본문 바로가기
해킹/리버싱엔지니어링

IAT 정리

by 맑은청이 2020. 4. 25.
728x90
반응형

IAT(Import Address Table) : 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하는지 기술한 테이블

핵심 개념 : process,memory,DLL 구조

 

IAT 를 이해하기 전, DLL의 대한 이해가 필요하다. 

 

Import : library에게 서비스(함수) 제공받는 일

Export : library 입장에서 PE 파일을 제공하는 일 

 

-DLL(Dynamic Linked Library) 동적 연결 라이브러리

과거 16비트 때는 DLL 개념 X -> 함수 사용시 컴파일러는 C 라이브러리에서 binary 코드 그대로 가져와서 삼입.

Windows OS, 멀티태스킹 지원 후 -> 위 방식 비효율적 

여러프로그램 동시에 실행 -> 동일한 라이브러리 포함은 심각한 메모리 낭비

->(아이디어) 프로그램에 라이브러리 포함 X,별도의 파일(DLL) 구성, 필요할 때마다 불러서 씀.

 

-일단 한 번 로딩된 DLL의 코드,리소스는 Memory Mapping 기술로 여러 process에서 공유해쓴다.

-라이브러리 업데이트 -> 해당 DLL 파일만 교체하면 됨. 

 

 

DLL 로딩 방식

1.Explict Linking : 프로그램에서 사용되는 순간 로딩/ 사용 끝나면 메모리에서 해제

2.Implicit Linking : 프로그램 시작할 때 로딩 / 프로그램 종료할 때 메모리에서 해제

 

Implicit Linking 가 IAT 매커니즘이다.

 

*DLL은 PE 헤더에 명시된 Imagebase에 로딩 안 될 수도 있다. 하지만 EXE는 그 위치에 로딩이 된다.

 

-직접적인 함수의 주소를 CALL 하지 못하는 이유

1. 어떤 Service Pack에서 실행될지 모르기 때문에 -> 모든 환경에서 함수호출을 보장하기 위해

2. DLL Relocation -> 여러개의 DLL이 같은 공간일 수 있음. /실제 하드코딩 못하는 이유, VA를 안 쓰고 RVA이 쓰는 이유

 

*하드코딩 : 공통 모듈로 개발해서 여러곳에서 호출해서 사용할 수 있는 부분 또는DB, 파일, 참조 정보를 얻어와서 사용해야할 부분을 사용처 부분에서 각자 프로그램으로 처리하는것을 흔히 하드 코딩,날코딩이라 합니다. 에러 확률 높음.

 

 

PE파일은 자신이 어떤 라이브러리를 임포트 하고 있는지 아래 구조체에 명시

 

*IMAGE_IMPORT_DESCRIPIOR 구조체

일반적으로 여러개의 라이브러리를 임포트하기 때문에 라이브러리 개수만큼 구조체 배열 형식으로 존재, 마지막은 NULL

   - Original First Thunk : INT(Import Name Table)이 주소(RVA)

   - Name : Library 이름 문자열의 주소(RVA)

   - FirstThunk : IAT(Import Address Table)의 주소(RVA)

   

     INT와 IAT의 크기는 같아야한다.

 

 

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

1. IID 구조체의 Name 멤버 -> 라이브러리의 이름 문자열 Get

2. 해당 라이브러리 로딩 -> LoadLibrary( ex : kernel32.dll)

3. IID의 Original First Thunk 로 INT 주소 Get

4. INT 에서 값 읽어 해당 IMAGE_IMPORT_BY_NAME 주소(RVA)를 얻음

5. IIBN의 Hint(Ordinal) 또는 Name 항목 -> 함수 시작주소 얻음 (GetProcAddress() 함수로)

6. IID의 FirstThunk(IAT) 읽어서 주소 얻음 

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

8. INT NULL 일때까지 4~7 반복

 

 

 

 

 

 

728x90
반응형

'해킹 > 리버싱엔지니어링' 카테고리의 다른 글

함수 호출 규약  (0) 2020.11.18
Base Relocation Table  (0) 2020.05.01
실행 압축  (0) 2020.04.28
EAT정리  (0) 2020.04.25
OllyDBG 단축키  (0) 2020.04.18