本帖最后由 天象独行 于 2020-12-7 09:12 编辑
PE结构_导入表_实验实验目的:分析IMAGE_IMPORT_DESCRIPTOR结构当中的OriginalFirstThunk以及FirstThunk的关系。 注释:相关工具如附件 一;结构图
PE结构_导入表_实验
二;定位导入表位置 导入表记录在PE扩展头当中的数据目录项当中,我们使用一个PE文件。找到导入表RVA地址以及大小。(导入表信息记录在数据目录项当中第二条记录)
PE结构_导入表_实验
已知导入表RVA地址,那么现在我们计算FOA地址。打开工具查看节等相关信息:
PE结构_导入表_实验
从导入表RVA地址大小来看,我们知道它在.idata节区当中,那么计算FOA=0X3000-0X3000 + A00 = A00。则导入表如下图位置:
PE结构_导入表_实验
三;IMAGE_IMPORT_DESCRIPTOR
导入表当中,每20个字节组成一个名为IMAGE_IMPORT_DESCRIPTOR的结构。如下图:
PE结构_导入表_实验
3.1;OriginalFirstThunk 由结构图我们知道,IMAGE_IMPORT_DESCRIPTOR第一个元素为OriginalFirstThunk且大小为DWORD。它当中保存着另外一个数据结构的地址指针(IMAGE_THUNK_DATA)。
下面我们定位一下IMAGE_THUNK_DATA位置。已知OriginalFirstThunk地址RVA值为0X303C,计算FOA值0XA3C
PE结构_导入表_实验
现在我们找到了IMAGE_THUNK_DATA数据结构,该结构内容保存着数据结构IMAGE_IMPORT_BY_MAME的指针,那么我们通过得到的0X307C的值计算出IMAGE_IMPORT_BY_MAME数据结构的FOA地址0XA7C
PE结构_导入表_实验
IMAGE_IMPORT_BY_MAME当中保存着导入函数的序号以及函数名称。 3.2;FirstThunk
FirstThunk是IMAGE_IMPORT_DESCRIPTOT结构当中的最后一个元素,且大小为DWORD。
PE结构_导入表_实验
同样计算出FOA地址,FOA=0XA50。该元素同样指向了一个IMAGE_THUNK_DATA数组。
PE结构_导入表_实验
这个时候,我们注意一下,0XA50 IMAGE_THUNK_DATA的位置的值等于0X30 IMAGE_THUNK_DATA 的值。都是0X307C。那么,他们可以肯定他们指向的IMAGE_IMPORT_BY_MAME。也是一样的。 总结:
IID(IMAGE_IMPORT_DESCRIPTOR)当中的OriginalFirstThunk和FirstThunk最终都指向了同一个数据结构IMAGE_IMPORT_BY_MAME。该结构当中保存着导入函数的序号以及函数名称。(注意:当程序加载到内存当中,或者运行中,FirstThunk指向的内容会转化为导入函数的地址)
|