手脱PECompact v2.xx

1、使用Detect It Easy进行查壳;
2、使用x32dbg打开该带壳程序,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略;
3、我们F9运行到程序入口处,会看到mov eax,puah eax,push dword,我们单步跳转到push dword的位置,堆栈窗口压入了一行地址,右键,内存窗口跟随该地址;
4、在该内存处下dword的硬件访问断点,然后F9运行,至图中位置后,向下查找(可能会由于异常或断点,一次无法跳转至此,可以F9,直到此位置);
5、找到pop ebp,jmp eax后,向jmp eax下断点,然后F9运行(注意删除之前的硬件访问断点),此处是由于我们可以看到jmp eax时,eax的值为004012CD,而EIP的地址为00406C5A,对比两地址,该处是个大跳转,非常有可能是OEP;
6、单步步入jmp eax中,该处就是OEP位置,在此处使用Scylla进行脱壳;
7、再次查壳,已成功将壳脱下;
8、总结;
该脱壳需要注意,尽量使用x32dbg,因为OD在脱壳后修复IAT表时会出现错误,会比较麻烦,另外向堆栈的上一个地址下硬件访问断点,这种手法被称为广义ESP定律,原理是加壳的程序,必然会在解密后运行前进行堆栈平衡,我们在此处下访问断点,出栈的时候极有可能是正常程序运行前的位置;





posted @ 2019-12-09 10:12  HOPEAMOR  阅读(564)  评论(0编辑  收藏  举报