헤더파일과 소스코드를 오브젝트 파일로 일일이 컴파일을 해주어야 하는 불편함이 있어서 MakeFile이라는 것을 만들어서 간편하게 해보았다. CC = "gcc" CFLAGS = "-W" TARGET = exp $(TARGET) : pwnc.o exp.o $(CC) $(CFLAGS) -o $(TARGET) pwnc.o exp.o pwnc.o : pwnc.c $(CC) $(CFLAGS) -c -o pwnc.o pwnc.c exp.o : exp.c $(CC) $(CFLAGS) -c -o exp.o exp.c clean : rm pwnc.o exp.o exp 이런식으로 makefile을 구성하여 이제는 make명령어만 입력하면 자동으로 컴파일 되게 해놓았다. 실제로 컴파일한 뒤 실행하는 모습은 이렇다. 이런식으로..
최근 시험기간이라서 많이 코딩하지는 못했지만 우여곡절 끝에 전체적인 함수들과 구조체를 완성했고 이런 함수와 구조체를 별도의 헤더파일로 구성하면 끝이다. https://www.joinc.co.kr/w/Site/C/Documents/CprogramingForLinuxEnv/Ch12_module 리눅스 환경에서의 C 프로그래밍 - 12장 모듈과 라이브러리 공유라이브러리와 정적라이브러리의 장단점 www.joinc.co.kr GCC를 이용해서 헤더 파일들을 컴파일 한 뒤에 오브젝트 파일들을 링크하는 방식으로 해야 하는데 나는 그냥 헤더파일을 인클루드한 파일만 컴파일 하려해서 오류가 많이 발생했다. 그래서 위에 글을 참조해서 헤더파일 분리까지 완성했다. 또한 세이프 인클루드까지 해놓았다. 최종적인 소스코드는 이렇게..
interactive함수와 hexdump함수를 구현했다. 이 과정에서 interactive함수가 잘 동작하지 않아 gdb로 디버깅하는데 많이 애를 먹었다. 해킹할 프로그램도 디버깅해보면서 공격방법을 구상하였는데 hexdump()함수를 완성하여서 디버깅하기에 수월했다. void interactive(){ char * input = (char * ) malloc(INPUT_LIMIT); // 사용자의 입력 저장. 최대 크기 : INPUT_LIMIT 매크로 상수(기본 : 0x1000) printf("Switching to interactive mode\n"); while(1){ Recv(RECV_LIMIT, 1); // 입력받을 최대크기 : RECV_LIMIT 매크로 상수(기본 : 0x1000) write(1..
2021.05.11 - [1인 1프로젝트] - 코딩 중 코딩 중 데이터의 패킹&언패킹 함수 구현과 process함수의 동작방식을 자세하게 구상해보았다. 내가 구현한 패킹&언패킹 함수는 이렇다. unsigned long long * p64(unsigned long long value){ unsigned long long * tmp =.. youngsouk-hack.tistory.com 이전의 글에 이어 Process함수와 그 함수를 바탕으로 recv, send함수를 구현했다. void remote(char * ip, int port){ int SocketNum = socket(PF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; if(SocketNum < ..
데이터의 패킹&언패킹 함수 구현과 process함수의 동작방식을 자세하게 구상해보았다. 내가 구현한 패킹&언패킹 함수는 이렇다. unsigned long long * p64(unsigned long long value){ unsigned long long * tmp = malloc(sizeof(unsigned long long) + 1); *(tmp) = value; *(char *)(tmp + sizeof(unsigned long long)) = '\0'; return tmp; } unsigned int * p32(unsigned int value){ unsigned int * tmp = malloc(sizeof(unsigned int) + 1); *(tmp) = value; *(char *)(tmp ..
2021.05.10 - [1인 1프로젝트] - 코딩 시작 코딩 시작 youngsouk-hack.tistory.com 이전에 했던 코딩에 이어서 GOT 정보를 얻어오는 함수를 구현하여 최종적으로 ELF의 정보들을 얻어오는 함수 및 구조체를 만들었다. 또한 해킹하고자 하는 프로그램이 사용한는 libc파일을 자동으로 얻어오는 함수를 구현했다. unsigned long long getGOT(GOT * got, char * target){ if(__glibc_unlikely(got == 0)) return 0; for(int i = 0; (got + i) -> addr != 0 || (got + i) -> name != 0; i++){ if(!(strcmp((got + i) -> name, target))) re..
ELF 파일 구조체에 대한 공부를 해서 ELF 섹션 정보와 GOT 정보를 얻어오는 함수들을 구현했다. typedef struct Section{ Elf64_Half SectionCnt; Elf64_Half SectionStringIndex; char * SectionName; Elf64_Shdr * SectionHeader; }Section; typedef struct got{ char * name; unsigned long long addr; } GOT; typedef struct sym{ char * name; unsigned long long value; }SYM; typedef struct elfinfo{ int fd; char * filename; Section section; GOT * got..
동작 방식을 설계해야 하는데 내가 기본적으로 구상하고 있는 기능들은 아래에 있다. 1. 데이터 패킹 & 언패킹 함수 2. socket 통신을 위한 remote 함수 3. 로컬 컴퓨터에서의 실행을 위한 Process 함수 4. retmote로 실행되는 프로그램의 출력을 얻어오는 recv, recvuntil 함수 5. retmote로 실행되는 프로그램에 값을 보내는 send, sendline함수 6. remote로 실행되는 프로그램과 표준 출력&표준 입력을 통해 상호작용하는 함수 7. 출력되는 값을 보기 편하게 하기 위한 hexdump 함수 기본적으로는 이정도 기능이 있다. 기본적인 동작방법은 아래의 순서와 같다. 1. ELFinfo 구조체에 ELF함수를 이용하여, GOT, SYM 등의 정보를 얻어온다. 2..