티스토리 뷰

Reversing

[Reversing] PE 파일 만들기③

정짱 정뚱띵 2019.06.25 09:39

[Reversing] PE 파일 만들기③


Dos Header ~ .text 섹션을 생성하고 내용을 채워 제작했습니다.

[Reversing] PE 파일 만들기①

[Reversing] PE 파일 만들기②


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]


[Step6]

- 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]


Hello

[현재]



댓글
공지사항
«   2019/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Total
134,087
Today
11