【逆向】脱壳后修复IAT并关闭ASLR

0x1 寻找OEP

OEP八大法…这里不具体展开…
在这里插入图片描述
在这里插入图片描述

0x2 加壳程序的IAT

脱壳后如遇到程序无法正常运行(XP环境),可能是因为导入表破坏,需要手动修复。

通过PC文件格式的学习,可以知道导入表的RVA在可选头的DataDirectory数组中存放

在这里插入图片描述
图为加壳程序DESCRIPTOR的偏移 18008,大小64
在这里插入图片描述
根据节区头的信息定位IAT在第6个节区 .aspack 中

通过节区已知的虚拟偏移与物理偏移可以计算出DESCRIPTOR在文件中的位置。

offset = A008

在这里插入图片描述
找到导出表的位置,可以知道导入了两个DLL文件,可以分别计算出Name和IAT的偏移

NAME(1) = 9FC8
NAME(2) = A044

IAT(1) = 9FB8
IAT(2) = A04F

在这里插入图片描述
在这里插入图片描述
当然如果对PC头不了解,可以借助PE View进行查看。

在这里插入图片描述
这样就清晰的看到加壳后的程序在启动时导入的函数

0x3 运行时压缩的原理

在这里插入图片描述
可能存在疑问,为什么脱壳后需要手动修复IAT。

IAT主要用于DLL文件的重定位,IAT的引入相较于 16位dos程序 不再需要包含库文件,而是通过表的形式进行映射。如果IAT不准确,则程序无法执行相关库的函数。

压缩壳对节区进行了压缩,把IAT修改为壳自身的IAT,在解压缩的最后一步会还原IAT使程序可以正常运行,所以脱壳后需要进行IAT的修复。

通过OD查看运行后程序的IAT。
在这里插入图片描述
相较于加壳程序的IAT,运行加壳程序后真正的IAT要多的多,如果我们只进行脱壳,而不进行IAT的修复(如下图所示)
在这里插入图片描述
程序的IAT是被损坏的

0x4 IAT修复

使用ImportREC工具,加载处于OEP的程序进程
在这里插入图片描述
填写正确的IAT信息
在这里插入图片描述
获取到内存中的IAT信息,然后删除无效函数后转存到脱壳后程序中,程序即可正常运行。
在这里插入图片描述
在这里插入图片描述

0x5 脱壳程序无法在WIN7以上平台运行

windows vista / win7 系统就开始使用ASLR技术防止溢出攻击。使得每次加载程序都加载到一个随机虚拟地址。ASLR依赖于重定位表进行定位,对于EXE程序来说,重定位是可选的,通过关闭ASLR即可解决。
在这里插入图片描述
将 40 81 改为 00 81

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值