windows pe) IAT
IAT는 Import Adress Table의 약자 이고 process, memory, DLL의 구조등에 대한내용이 있습니다.
DLL은 Dinamic Linked Libary의 약어로 프로그램에서 함수를 사용할떄 이 라이브러리에서 함수를 가져와서 사용합니다.
프로그램 안에 함수가 있으면 똑같은 함수를 여러프로그램에서 사용하는데 각 프로그램마다 가지고 있으면 자원낭비 입니다.
참고로 DOS시절에는 각프로그램이 함수를 내장하고 있었습니다.
windows nt버전이나오면서 멀티테스킹을 지우너하면서 DLL파일이 나온것입니다.
DLL이 로딩될떄 프로그램에서는 함수를 호출하고 사용이끝나면 바로 헤제하는 방법과 프로그램이 끝날때 같이 헤제하는 방법이있습니다.
ollydbg에서 오은쪽클릭후 long -adress 로 변경하시면 위와 같이 보실수 있습니다.
만약 call 75258A29를 한다면 이것은 DOS시절방식입니다.
IMAGE_IMPORT_DESCRIPTOR
이구조체는 어떤라이브러리를 포함하고있는지 나타내는 구조체입니다.
이구조체는 라이브러리를 포함하는 많큼 배열로 나타내짐니다.(여러개라는 뜻)
typedef struct _IMAGE_IMPORT_BY_NAME {
WORD Hint;
CHAR Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics; // 0 for terminating null import descriptor
DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
} DUMMYUNIONNAME;
DWORD TimeDateStamp; // 0 if not bound,
// -1 if bound, and real date\time stamp
// in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
// O.W. date/time stamp of DLL bound to (Old BIND)
DWORD ForwarderChain; // -1 if no forwarders
DWORD Name;
DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses)
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
프로그램에서는 라이브러리를 여러개 import 시키기떄문에 라이브러리개수많큼 위구조체를 갯수만큼 가짐니다.
그리고 구조체의 마지막은 null 구조체로 끝남니다.
함목 |
의미 |
OriginalFirstThunk |
INT(Import Adress Table)의 주소(RVA) |
Name |
Library 이름 문자열의 주소 (RVA) |
FirstThunk |
IAT(Import Address Table)의 주소 (RVA) |
참조
*pe해더에서 table은 배열을 뜻합니다.
*IAT와INT는 long type 배열이고 null로 끝남니다.(크기가 명시되어있지않음)
*INT에서 각 원소의 값은 IMAGE_IMPORT_BY_NAME 구조체배열 입니다.(IAT도 같은 값을 가지는 경우도 있습니다,)
*INT와IAT의 크기는 같아야합니다.
출처 리버스코어 http://reversecore.tistory.com
간단하게 정리한 그림입니다.
pe view 에서도 IAT와 INT는 같은 값을 가지고 있습니다.
주소만 다를 뿐 DESCRIPTION과 VALUE의 값은 같습니다.
'Reversing > Windows PE' 카테고리의 다른 글
pe) reloc 섹션 제거 (0) | 2014.09.17 |
---|---|
windows pe) EAT (0) | 2014.08.06 |
windows pe) null패딩이 진짜 null패딩인지 확인하기 (0) | 2014.07.23 |
windows pe) RVA to RAW(file offset) (0) | 2014.07.15 |
windows pe)NT_HEADER 하 (0) | 2014.07.11 |