티스토리 뷰
[Reversing] PE 파일 만들기③
Dos Header ~ .text 섹션을 생성하고 내용을 채워 제작했습니다.
1. IMPORT Directory Table
[Step1]
- 먼저 IMAGE_DATA_DIRECTORY에서 IMPORT Table의 RVA값을 작성할 것입니다.
- 저는 IMPORT Table의 RVA를 0x40으로 제작할 것입니다.
- 이전 게시물에 MS-DOS Stub Program 0으로 채운 부분에 IDT를 작성한다고 했습니다.(참고)
[IDT 지정 HxD]
[Step2]
- IMPORT Directory Table의 필드를 다시 보겠습니다.
- Import Name Table RVA, Time Date Stamp 필드 등이 들어가는데 주소를 작성하기 전에 필드의 값들을 먼저 제작할 것입니다.
[Step3]
- 이전 게시물 IMAGE_DOS_HEADER 부분에 출력값('Hello world!')과 필요한 DLL을 작성할 것입니다.
- 항상 프로그램이 실행되면 사용되는 kernel32.DLL
- 'Hello world !' 출력을 위해 printf 함수를 그 함수를 사용하기 위해 stdio.h 헤더를 사용했습니다. 관련있는 DLL을 찾아보시면 MSVCRT.DLL
- 마지막으로 프로세스를 종료하기 위해 ExitProcess 함수
[출력값 HxD]
[IMPORT DLL Name HxD]
[Step4]
- IMPORT_Name_Table 필요한 것들을 생각해야 됩니다.
- .text 섹션 이전 빈공간을 활용하여 INT 이름을 작성해줍니다.(필요한 함수)
- kernel32.DLL에 있는 ExitProcess 함수
- MSVCRT.DLL에 있는 printf, system 함수
- IMAGE_IMPORT_BY_NAME 구조체의 Hint, Name를 이용할 것입니다.
[IMPORT_Name_Table HxD]
[Step5]
- IDT의 INT ~ IAT의 주소를 새로 작성해줍니다.(참조)
- 저는 1A0에서 부터 작성할 것입니다.
- 먼저 새로운 주소([Step6]에서 지정)에서는 실제 주소를 입력해주는 것입니다.
- 작성 후에는 IMAGE_OPTIONAL_HEADER의 IMPORT Address Table RVA, Size를 지정해주면 됩니다.
[INT, IAT 실제 주소값 HxD]
- IDT에서 [Step5]에서 지정한 주소를 작성해줍니다.
- 40h 이동하여 IDT에서 INT, DLL, IAT 주소를 작성해줍니다.
- 로드된 실제 함수 주소 목록(IMPORT Address Table)
- 임포트 함수 이름 주소 목록(IMPORT Name Table)
- 로그하는 임포트 함수 이름 목록(IMPORT Hints/Names & DLL Names)
[IDT 작성 HxD]
2. IMAGE_OPTIONAL_HEADER
- IMPORT Table, IMPORT Address Table Size 작성할 것입니다.
- IDT, IAT Size 칸의 개수만큼 구하면 됩니다.
- IDT는 4byte짜리가 5개(Kernel32.dll), 또 4byte짜리가 5개(msvcrt.dll) 입니다.
- IDT는 총 Kernel32.dll, msvcrt.dll, NULL 3개가 있으니까 14h * 3개 총 0x3c 입니다.
- IAT는 4byte짜리가 5개 있으니까 0x14 입니다.
[IDT, IAT Size]
[현재까지 PE Format]
[현재]
'Reversing > Reversing Tech' 카테고리의 다른 글
[Reversing] Inline Code Patch ② (0) | 2019.07.19 |
---|---|
[Reversing] Inline Code Patch ① (0) | 2019.07.17 |
[Reversing] PE 파일 만들기④ (0) | 2019.06.25 |
[Reversing] PE 파일 만들기② (0) | 2019.06.17 |
[Reversing] PE 파일 만들기① (0) | 2019.06.16 |
- Total
- Today