ESP法和二次断点法脱壳总结

ESP法和二次断点法脱壳总结

一直想学一些逆向破解之类的知识,但是起步比较难,听看雪的某个高手说你可以从免杀方面的知识入手,掌握点基础。

首先感谢姬良写的《杀不死的秘密》这本书,真心不错。

1、ESP

原理:维持堆栈平衡

壳程序运行后,首先运行壳部分,然后将原程序还原到内存中并将控制权返还。而大部分压缩壳在运行壳程序时都会将原程序做一个堆栈保护,壳程序运行完成后将原程序还原到内存时会将原先保存的环境恢复供原程序使用,这样我们就可以很轻易的找到OEP。

操作实践:

未加壳程序text.exe

入口点:00001020



加UPX壳程序UPX壳.exe


入口点:0000A7B0

同时也提示加了UPX壳,说明加壳成功。


载入OD(OllyICE),出现下面提示,选择否。


程序停在0040A7B0处,这里有一指令 


pushad 这一指令很重要,他的作用是将所有32位寄存器压栈,很显然这是为了保护环境。如果这条指令后面有JMP指令,

那么JMP指令后的地址很可能就是OEP

在看一下寄存器部分注意和下面对比。


F8单步调试


发现ESP变了,EIP为指令寄存器不管它,在下面的Command编辑框中输入

Hr 0012FFA4 在按回车键,在这里下一个硬件中断。F9直接运行。


程序停在Jmp这里 ,在看下图有没有发现寄存器的值和执行pushad指令前一样,这就说明在这里做了环境恢复。

F7调试步入。


这时程序停在00401020出,这时你会觉得很熟悉了,原程序入口点是00001020,这里的00401020是基址00400000加上入口点得到的虚拟地址。既然找到了原程序的入口点了,接下来就是脱壳了。

右击00401020处指令选择Dump debugged process


点击 Dump按钮保存即可,之后我们运行脱壳后的程序,并用Pedit查看和加壳前的程序比较。发现是一样的,说明此次脱壳成功。


总结:改方法脱壳利用堆栈平衡原理,适用于大部分压缩壳,方法简单。但在脱北斗壳是会出现一些假象,不要管他继续Dump即可。


2、二次断点法(又叫内存镜像法)

个人觉得这个原理比较难懂一点,需要一点PE结构的知识。我对这方面原理的理解来自

看雪论坛http://bbs.pediy.com/showthread.php?t=20366 

黑客防线http://bbs.hackerxfiles.net/archiver/tid-88027.html 

原理:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值