본문 바로가기
Reversing/Reversing

PE의 IAT입력 과정

by bbolmin 2012. 10. 31.

 

IMAGE_DIRECTORY_ENTRY_IMPORT

 

|-------------------|
|     VirtualAddress   |
|-------------------|
|           Size           | 

|-------------------|


VirtualAddress + ImageBase가 IMAGE_IMPORT_DESCRIPTOR의 가상주소를 가진다.

 

 

IMAGE_IMPORT_DESCRIPTOR (임포트 테이블)

|----------------------|
|    OriginalFirstThunk    |  -> INT(IMPORT_NAME_TABLE) 주소
|----------------------|
|     TimeDateStamp       |
|----------------------|
|     ForwarderChain     |
|----------------------|
|            Name             |  -> DLL name 주소
|----------------------|
|          FirstThunk        |  -> IAT(IMPORT_ADDRESS_TABLE) 주소
|----------------------|

 

 

* PE로더가 임포트 함수 주소를 IAT에 입력하는 과정

 

1. PE파일이 메모리에 로드된 후 데이터 디렉토리의 2번째 엔트리인 IMAGE_DIRECTORY_ENTRY_IMPORT에서 IMAGE_IMPORT_DESCRIPTOR의 위치를 구한다.

2. 순서대로 IMAGE_IMPORT_DESCRIPTOR에서 임포트 할 DLL name을 가져온 후 LoadLibrary() 한다.

3. OriginalFirstThunk에서 INT 주소를 얻어 온다.

4. INT에서 순서대로 서수(ordinal)나 함수 이름으로 함수 주소를 얻는다. [GetProcAddress() - EAT에서 가져옴]

5. FirstThunk를 읽어서 IAT 주소를 얻어와서 (4)번 과정에서 가져온 함수 주소를 IAT에 기록한다.

 

DLL개수 만큼 (1~5)를 반복한다.

각 DLL마다 임포트 함수 개수 만큼 (4~5)를 반복한다. 

 

 

 

 

'Reversing > Reversing' 카테고리의 다른 글

ollydbg로 dll파일 디버깅  (0) 2013.02.28
static 안티 디버깅  (0) 2013.01.03
함수 호출 규약  (1) 2012.10.16
Windbg 명령어 요약  (0) 2012.10.13
혼동되는 어셈블리 명령어  (2) 2012.10.07