在做题过程中,有时会遇到upx-d或脱壳工具无法脱去的壳,这时就需要自己去手动脱壳
ESP定律法是脱壳的利器,是应用频率最高的脱壳方法之一.ESP定律的原理在于利用程序中堆栈平衡来快速找到OEP由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器状态压栈,如使用pushad在解压结束后,会将之前的寄存器值出栈,如使用popad.因此在寄存器出栈时,往往程序代码被恢复,此时硬件断点触发然后在程序当前位置只需要少许单步操作,就很容易到达正确的OEP位置
首先拖入查壳工具查看,显示该程序是32位的可执行文件并且带有壳
再用32位IDA打开,能够发现函数明显较少,反编译也看不出什么,
接下来用32位dbg对该可执行文件进行脱壳,点击入口断点
在入口断点设置EIP后,F8单步执行一步
右键寄存器ESP地址,在内存窗口中转到,右键内存窗口,下硬件访问断点,
运行,此时停在一个popad指令下,到这说明它壳环境执行完毕,下方第一个jmp所要跳转的地址就是程序oep的入口,
然后用软件自带的插件进行脱壳,dump后获得脱壳后的程序,
下一步进行IAT的修复,原因在于有可能它的原始IAT也就是导入函数地址表并没有恢复,继续利用插件,点击自动获取IAT,点击输出,然后Fix Dump选择Dump后的程序,获得修复后的程序
再将修复后的程序拖入查壳工具中,发现它的壳已经脱去,再用IDA打开,会发现它的函数显示已经正常,
此时脱壳已经成功