0x.리버스 엔지니어링
-
0x02.PE header(2)0x.리버스 엔지니어링/PE File Format 2017. 8. 7. 12:17
0x02.PE header(2) 저번 포스팅에 이어서 설명하겠다. 4. Section header 각 섹션이 갖는 속성을 정의하는 것이 섹션 헤더인데, 메모장 같은 경우, text, data, rsrc라는 섹션이 있기에 그에 해당되는 3개의 섹션 헤더가 존재한다. 섹션이 3가지로 나뉘어지는 까닭은 안정성을 위해서인데 그 예로 버퍼 오버플로우를 들 수 있다. 섹션 헤더는 구조체의 배열 형태로 되어 있는데 아래와 같다. #define IMAGE_SIZEOF_SHORT_NAME typedef struct _IMAGE_SECTION_HEADER {BYTE Name[IMAGE_SIZEOF_SHORT_NAME];union {DWORD PhysicalAddress;DWORD VirtualSize;} Misc;DWOR..
-
0x01.PE header0x.리버스 엔지니어링/PE File Format 2017. 8. 4. 12:04
0x01.PE header 앞 포스팅에서 설명했지만 DOS header ~ Section header(".rsrc") 까지를 헤더라고 부른다. 1. DOS header 마이크로소프트는 언제나 하위호환성을 신경쓰기 때문에 DOS를 고려해서 앞 부분에는 DOS header를 붙이는데 구조체의 크기는 40이다. typedef struct _IMAGE_DOS_HEADER{WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_..
-
0x00.PE File Format0x.리버스 엔지니어링/PE File Format 2017. 8. 3. 15:11
0x00.PE File Format PE파일은 원도우에서 사용되는 실행파일 형식인데, UNIX의 COFF(Common Object File FOrmat)을 기반으로 만들어졌다. 보통 PE파일은 32비트를 뜻하며, 요즘 사용되는 64비트는 PE+, PE32+로 다르게 불리운다. PE파일에는 EXE와 같은 실행계열, SYS와 같은 드라이버 계열, DLL과 같은 라이브러리 계열 그리고 오브젝트 계열인 OBJ등이 있다. 결국 실행 가능한 모든 파일이 PE파일에 속한다고 보면 된다. 윈도우의 메모장의 PE구조는 위와 같다. DOS header ~ Section header까지를 PE헤더, 그 밑의 섹션들을 PE바디라고 한다. 파일은 보통 코드, 데이터, 리소스로 섹션이 나뉘어지는데 그 순서는 위와 같이 text,..
-
0x05.Lena's Reversing for Newbies0x.리버스 엔지니어링 2017. 7. 12. 17:11
0x05.Lena's Reversing for Newbies tuts4you.com 게시판에 있는 Lena라는 분이 올린 문제를 풀어보자. 실행시키면 위와 같이 Nag Screen이라는 알림창이 뜨고 Use SmartCheck to reg!라고 적힌 창이 뜬다. 알림창을 보니 쓸데없는 코드들을 제거하고 Regcode를 찾는게 문제인 것 같다. 이 파일도 저번 파일과 같이 Visual Basic을 사용해서 만들었다는 것을 알 수 있다. 왜냐하면 MSVBVM50.ThunRTMain 이라는 부분을 확인할 수 있기 때문이다. Visual basic에서 메시지 박스 출력함수의 이름이 MSVBVM50.rtcMSGBOX 라고 한다. 첫 번째 알림창을 찾아내기 위해 Search for -> All intermodula..
-
0x04.Abexcm20x.리버스 엔지니어링 2017. 7. 10. 15:36
0x04.Abexcm2 위와 같이 Name과 Serial이 있는데 올바른 값을 입력하면 성공한 결과를 출력해주는 문제이다. (다만 이 문제의 시리얼을 생성하는 부분은 아직 분석하기에 너무너무너무너무너무너무x100 어려워서 나중에 확실한 분석이 가능해지면 포스팅하도록 하겠다.) MSVBVM60은 VB 엔진에서 사용되는데 이는 GUI 프로그래밍을 하는 Virtual Basic에서 제작된 경우에 사용된다. 주소 401238에서 PUSH를 통해 EP(엔트리 포인트)를 스택으로 집어넣는데 그 값을 덤프에서 보면 다음과 같이 VB5! ~~~~ 로 시작하는 아스키 값을 볼 수 있다. 이는 ThunRTMain() 함수의 파라미터인 RT_MAinSTruct의 구조체라고 한다. VB는 이 구조체를 참고하여 프로그램의 실행..