dump文件 修复iat_在OD中手工修复IAT重定向

前言

壳代码,都会重定向IAT表项到壳里的地址.

如果找到真正的IAT表项的API地址列表, 自己手工填到ImpREC中挺繁琐的.

这时, 可以在已经停在OEP处的OD中, 先在ImpREC中填写正确OEP, 得到IAT表项.

当IAT表项在壳内时(无效项), 在OD中根据ImpREC提示的IAT表项地址, 手工找到真实的API地址, 将IAT手工填充(2进制拷贝,2进制粘贴), Dump出去壳PE. 在用ImpREC再次Load, 修复IAT, 只要做少量确认和删除任务, IAT就可修复完成.

记录

异常计数法

对于有对抗的壳, 大概只能采用异常技术法(相对于F8, F7)走到OEP.

OD载入PE后, 直接(SHIFT+F9), 记录N-1次的计数到程序启动.

再次载入PE, (SHIFT+F9)(N-1)次, 在Memory窗口F2断点到代码段(PE头下面就是代码段).

最后一次(SHIFT+F9), 命中时, 离OEP就几步(过了JMP就是OEP), 可以F8,F7走过去.

ImpREC中无效IAT项的识别

无效IAT

可以在无效表项上右击, 选择反汇编, 看看是不是找到有效IAT(包括IAT表项重定向)

可以看出, 这个IAT表项是ImpREC识别错了, 没有指向API地址, 也没有API重定向. 在这个IAT上看看, 如果表项都是无效的, 可以将这个IAT整个cut掉.

被重定向的IAT

去[0x3f11f0]看, 确实是实际的IAT

在OD中手工修复IAT重定向

拿IAT为例子

这个表项内容在壳地址里.

IAT范围

IatAddrBegin = 00268284

IatAddrEnd = 00268284 + 0xB7 * 4 = 00268560

FirstRva = 00268284

FirstApiPtr = 003f0000

FirstRealApiPtr = [0x003f11f0] = 0x7c809bd7

IAT表项是以0结尾的, 从第一个IAT表项往下拉, 拖选到0结尾的地址, 选择2进制拷贝.

在CPU窗口内存小窗口, go到IatAddrBegin, 往下拖选到IatAddrEnd(如果实际API个数较少, 可以拖到多留一个\0的位置, 总之选择2进制粘贴时, 目标地址范围选择区域要>=原地址范围), 选择2进制粘贴.

此时, EIP就在OEP, 用OllyDump插件Dump出无壳PE. 用ImpREC再次载入OD中的目标程序, 填写OEP, 取IAT集合. 这时, 只有少量无效IAT, 可以用看反汇编的方法确认无效项, 然后cut掉. 当IAT全部有效时, 修复IAT. 可选PeRebuild, 脱壳完成.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值