关于 ESP 定理

一般,压缩壳在执行加壳代码的开始和结束位置,分别会有 pushad 和 popad 来保存所有的寄存器环境,利用这一点,可以定位到程序真正入口代码的位置。

–>练习程序下载

打开程序后,程序的入口点就是汇编指令 pushad,下面的都是加壳代码。

这里写图片描述

执行 pushad 指令后,寄存器全部都入栈,此时栈顶以下的位置都存储了寄存器的环境。当加壳结束时,程序一定会恢复环境。所以,在右侧寄存器位置点击数据窗口跟随,再在栈顶位置下 硬件访问断点

这里写图片描述

这里写图片描述

按下 F9 键,可以看到断下的代码处恰好有汇编代码popad。再往下走就是主程序的代码了。

这里写图片描述

此时,如果如果使用 dump 功能,就可以将 dump 出脱壳的程序了。

这里写图片描述

该程序是 32 位程序,需要在 32 位系统下 dump。由于加壳程序都会将 导入表 抹去,所以 dump 时需要选中恢复导入表

dump可恢复导入表的 OD


后记:esp定理不一定只应用于开头只有 pushad 指令的程序,即使开头是 push eax,由于加壳结束后,一定会平到原来的栈,所以也会断到入口处。

如何对抗

只要将原来栈顶的数据复制到栈顶的以上部分,加壳结束后,以新的栈顶为起点,那么下的硬件断点就断不下来了。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值