手工修复PE文件的IAT

在做PE文件二次开发时常常需要手工添加导入函数,例如程序导入了7个dll文件(如下图),每个导入的dll有一个对应的IID: 

其中前三个dll是程序隐式调用的,编译时会自动添加IID数组中,PE头中的数据目录项有一个AddressOfImport字段指向该数组的首地址,数组以一个全零的IID结束; 后面五个dll是手工添加进去的(可以借助LordPE工具添加),通过FirstTrunk可以看到这里的IID不是连续存放的,这就导致通过PE头找不到完整的IAT列表.

 

修复办法如下:

 

1.查找iat函数:

用ImportRec打开程序,手工输入每个IAT的RVA值和长度,(长度计算方法: [长度] = [IAT最后一个函数的RVA]- [第一个函数的RVA] + 4),点击获取输入列表,ImportRec会将找到的函数显示上列表中,对每个IAT进行同样的操作.

 

2.重建iat

在ImportRec的选项中设置"创建新的IAT",然后点击主窗口的"修复转储文件",对dump文件进行修复即可.这是修复后的效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值