原理:
在程序执行过程中,尤其是当函数调用发生时,ESP的值会发生变化,以反映栈上新的栈帧的创建。当函数返回时,ESP的值会恢复到函数调用之前的值,以保持栈的平衡。这就是堆栈平衡定律,也称ESP定律。在加了壳的软件中,程序刚开始加载时,首先会执行解密程序,而ESP栈顶指针会在解密程序执行完毕后,跳回到真正的程序时,有一个大幅度的跳转,这个跳转过程中ESP指针会回到执行解密程序之前的值。根据这一特性,通过跟踪ESP指针的归位时刻,可以找到解密程序的结束位置,进而找到程序的入口点(EP点),从而实现脱壳。
工具准备:
下载x64dbg压缩包(吾爱破解里面有),解压后打开
打开release文件
运行x96dbg.exe后桌面就会有x64dbg和x32dbg。打开X64dbg和x32dbg
选项——>选项,只打开入口断点
脱壳步骤:
用xdbg打开
程序停在了入口地址,按F8
此时ESP改变了,在ESP的位置按右键,选择在内存窗口中转到,然后选内存1
选完后左下角会跳的ESP指向的位置
选定开始的四个字节,右键,断点,硬件访问,4字节,这样就下好了断点。
然后程序继续执行,会停在断点处
此时看断点下方不远处有个jmp语句,应该就是跳转到程序入口(OEP),所以F8继续执行直到在jmp语句跳转
跳转后使用scylla插件
点这个Dump,就会生成一个exe文件,查壳试试是否脱壳成功
显示没有壳了,那么脱壳成功。