1-9PE体——导入表分析

PE体——导入表分析

导入表在PE体中,通过IMAGE_OPTIONAL_HEADER.DataDirectory的第二项进行获取

1.导入表的结构体定义

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;

其中:这个文件在不同地方,保存的内容有所差异

1.在内存中
  • Name:保存的是一个RVA,这个RVA指向的内存内容是DLL的文件名。

  • OriginalFirstThunk:RVA,指向一个INT表,Import Name Table,这个表中保存的是所有导入函数名称的RVA

  • FirstThunk:RVA,指向一个IAT表,Import Name Table,这个表中保存的是所有导入函数的地址。(VA)

2.在文件中
  • Name:保存的是一个RVA,这个RVA指向的内存内容是DLL的文件名。

  • OriginalFirstThunk:RVA,指向一个INT表,Import Name Table,这个表中保存的是所有导入函数名称的RVA

  • FirstThunk:RVA,指向一个INT表,Import Name Table,这个表中保存的是所有导入函数名称的RVA(与OriginalFirstThunk一致)