PE 헤더 IAT 이해

2021. 5. 7. 01:16리버싱,악성코드분석

IAT?

프로그램이 어떤라이브러리에서 어떤 함수를 사용하고 있는지 기술한 테이블.

 

PE 파일은 어떤라이브러리를 임포트하는지 IMPORT_DESCRIPTOR 구조체에 명시함.

 

중요멤버

OriginalFirstThunk - INT(import name table)의 주소(rva)

Name - 라이브러리 이름 문자열의 주소(rva)

FirstThunk - IAT의 주소(RVA)

 

PE로더가 임포트 함수 주소를 IAT에 입력하는 순서

1. IID의 NAME멤버를 읽어 라이브러리 이름 문자열을 얻는다.

2. 해당 라이브러리를 로딩

3. IID의 OriginalFirstThunk멤버를 읽고 INT주소를 얻는다.

4. INT에서 배열의 값을 하나씩 읽고 HINT OR NAME값을 얻는다.(IAT테이블에 이 순서대로 저장되어있다.)

5.  HINT OR NAME값을 이용하여 해당함수의 시작주소를 얻는다.

6. IID의 IAT멤버를 읽고 IAT 주소를 얻는다.

7. IAT 배열 값에 위에서구한 함수주소를 입력.

8. INT가 끝날때까지 이 과정을 반복한다.(4~7)

 

IAT구조

 

 

PE VIEW로 IAT 테이블확인.

PE헤더가 아닌 PE바디 영역에 존재함.

 

IMPORT_OPTIONAL_HEADER에서 IID구조체 배열의 RVA를 알 수있다.

 

 

IMPORT Directory Table

 

 

IMPORT ADDRESS TABLE

 

 

IMPORT NAME TABLE