Reversing/PE File Format2012. 11. 7. 01:12

PE File Format 0x05



0x01. IAT (Import Address Table)


Windows에서 제공하는 WinNT.h의 _IMAGE_IMPORT_DESCRIPTOR 구조체입니다.

   


IAT는 Process가 어떤 library에서 어떤 함수를 가져와 사용하는지에 대한 정보를 가지고 있습니다.

일반적으로는 여러개의 library를 import 하기 때문에

Library 개수만큼 위의 구조체가 배열로 저장되어 있습니다.

구조체 배열의 마지막은 null로 끝납니다.

IAT에서 중요한 부분은 OriginalFirstThunk, Name, FirstThunk 입니다.


OriginalFirstThunk /* INT(Import Name Table)의 주소를 가리키고 있습니다.

     상황에 따라 함수의 주소를 가리키기도 하고

     Ordinal 값으로 사용되기도 하고

     Forwarder로 사용되기도 합니다.

     저장된 주소는 RVA 형식입니다.

     INT의 각 원소는 IMAGE_IMPORT_BY_NAME 구조체 포인터입니다. */

Name /* Library의 이름 문자열의 주소를 가리키고 있습니다.

  저장된 주소는 RVA 형식입니다. */

FirstThunk /* IAT(Import Address Table)의 주소를 가리키고 있습니다.

    저장된 주소는 RVA 형식입니다. */


0x02. IAT Address Mapping


IAT가 어떤 식으로 입력이 되는지를 알아보도록 하겠습니다.


IID의 Name을 이용해 해당 library를 로드합니다.


IID의 OriginalFirstThunk를 이용해 INT의 주소를 얻습니다.

해당 INT에서 IMAGE_IMPORT_BY_NAME의 주소를 얻습니다.

IMAGE_IMPORT_BY_NAME의 Hint 또는 Name을 이용해 해당 함수의 주소를 얻습니다.


IID의 FirstThunk를 이용해 IAT의 주소를 얻습니다.

해당 IAT에 위의 과정에서 얻어온 함수의 주소를 입력합니다.


위의 과정을 INT가 null일 때까지 반복합니다.


'Reversing > PE File Format' 카테고리의 다른 글

RVA & RAW  (0) 2012.11.12
PE File Format 0x06  (0) 2012.11.11
PE File Format 0x04  (0) 2012.10.31
PE File Format 0x03  (0) 2012.10.29
PE File Format 0x02  (0) 2012.10.29
Posted by slimV