zj3t

email: euntaejang@gmail.com

Latest Posts

IAT(Import Address Table) 입력 과정

By 오후 7:45 ,

IMAGE_IMPORT_DESCRIPTOR=IMPORT Directory Table


typedef struct _IMAGE_IMPORT_DESCRIPTOR{
union{
DWORD characteristics;
DWORD OriginalFirstThunk; //INT address(RVA)
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
  DWORD Name;
DWORD FirstThunk; //IAT address (RVA)
}IMAGE_IMPORT_DESCRIPTOR;

typedef struct _IMAGE_IMPORT_BY_NAME{
WORD Hint;
BYTE Name[1];
}IMAGE_IMPORT_BY_NAME;

-IAT에 값 입력 과정


1.IMAGE_IMPORT_DESCRIPTOR(IID)의 Name 멤버를 읽어서 라이브러리의 이름 문자열(ex:kernel32.dll)을 얻습니다.
2.해당 라이브러리를 로딩 ->LoadLibrary("kernel32.dll")
3.IMAGE_IMPORT_DESCRIPTOR의 OriginalFirstThunk 멤버를 읽어서 INT(IMPORT_NAME_TABLE)주소를 얻음
4.INT에서 배열의 값을 하나씩 읽어 해당 IMAGE_IMPORT_BY_NAME 주소(RVA)를 얻음
5.IMAGE_IMPORT_BY_NAME의 Hint 또는 Name 항목을 이용하여 해당 함수의 시작 주소를 얻습니다.
   ->GetProcAddress("GetCurrentThreadld")
6.IDD의 FirstThunk 멤버를 읽어와 IAT 주소를 얻는다.
7.해당 IAT 배열 값에 위에서 구한 함수 주소를 입력한다.
8.INT가 끝날 때까지(NULL을 만날 때까지) 위 4~7과정을 반복

-출처: 리버싱핵심원리(www.reversecore.com)

You Might Also Like

0 개의 댓글