PE_导入表

导入表简述

目的:为实现代码重用而设置的。
一个PE文件调用了多少外来函数,以及这些外来函数都存在于那些动态链接库DLL里等信息。

注:PE到这里套娃就很晕了(本人实在太笨,看了很多遍才理顺,相信应该没有比我更笨的了,参考一些资料也思维都跳的比较厉害或缺这少那的,所以还是想把PE的汇总分享大家, 希望以下内容能帮助大家快速理清思路及共同喜欢研究这方面入门的朋友们少走弯路)。

调用一个外部函数流程

在这里插入图片描述这里涉及导入表 和 IAT(导入函数地址表),它们分别是数据目录的第2项和第13项。
借助一个工具peinfo便能迅速定位。
在这里插入图片描述

导入表中涉及的数据结构

总览结构全局流程导向(这图要牢牢映入脑中)

在这里插入图片描述
吐槽一下:鬼知道我画了多久!!

IMAGE_THUNK_DATA(这真是个理解大坑)

这句才是本质:
在这里插入图片描述
后面又给出里面具体定义(我是满脑子问号,还不如不给,跟简单话说复杂一样,里面内容我感觉是没什么用,如果有理解这个朋友请指教
在这里插入图片描述

导入表描述符IMAGE_IMPORT_DESCRIPTOR结构信息

IMAGE_IMPORT_DESCRIPTOR	STRUCT
union
	Characteristics					dd
	OriginalFirstThunk				dd	;000h	-1
ends	
TimeDateStamp						dd	;0004h	-	时间表
ForwarderChain						dd	;0008h	-	链表的前一个结构
Name1								dd	;000ch	-	指向链接库名字的指针
FirstThunk							dd	;0010	-2

IMAGE_IMPORT_BY_NAME

IMAGE_IMPORT_BY_NAME STRUCT
	Hint	dw	?;0000h	-函数编号
	Name1	db	?;0004h	-表示函数名的字符串
	IMAGE_IMPORT_BY_NAME ENDS

查看IAT和导入表并分析

1.得到导入表和导入地址表RVA和SIZE,同时转换成FOA
在这里插入图片描述
#导入表RVA = 0X2010
#导入表大小 = 0X3C
#导入函数地址表=0X2000
#导入函数地址表大小=0X10

转换成FOA
#导入表FOA = 0X610
#IAT = 0X600

在这里插入图片描述导入表:每二十个字节描述一个引用DLL库相关函数信息。

分别是以下三组数据(磁盘和加载内存中的数据是一样的)
第一组DLL信息
在这里插入图片描述
第二组DLL信息
在这里插入图片描述
第三组是结束的标志
在这里插入图片描述
有工具就要充分利用,这里是上面3组数据转换成对应结构里面的内容。

在这里插入图片描述

证明(磁盘中)桥一和桥二最终指向一样

在这里插入图片描述
RVA = 0X205C
FOA=0X65C 即 hint / 函数名 内容

证明(加载内存中)桥一不变,桥二中地址操作系统填入函数真实地址

在这里插入图片描述

双桥结构存在的原因?

正是由于加载后,桥二IAT表中填入了真正的函数地址,如果你再想通过函数地址名字找到函数名,这时便时桥一INT表起作用的时候了。(INT起到为函数名备份的作用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值