脱壳的基本流程分四步走:查壳 -> 定位OEP -> 进程内存镜像dump -> 修复IAT.
1. 定位OEP
1.1 ESP定律(栈平衡)
使用UPX对计算器calc.exe进行加壳。
OD载入,如下:
第一条指令PUSHAD表示将所有通用寄存器值压栈,这些值即代表原程序加壳前的值,在壳运行完成后,需要借助栈恢复这些值,程序转到OEP,原程序才能正常执行。
F8向下走一步,此时ESP的值为压栈后的值:
对该ESP值下硬件断点:HW 0007FFA4
F9运行程序,程序将中断在上述硬件断点,此时表示程序要访问原来压栈的数据,也就是说壳运行基本结束,此时正试图恢复栈内容,运行原程序,因此OEP也就离这不远了。