现在我们来实践以下esp定律的功效:
upx壳
---------------------------------------
载入程序后:
0040EF20 > 60 PUSHAD //程序入口
0040EF21 BE 15C04000 MOV ESI,upx.0040C015 //来到这里,看ollydbg右窗口esp寄存器的值=12ffa4
0040EF26 8DBE EB4FFFFF LEA EDI,DWORD PTR DS:[ESI+FFFF4FEB]
0040EF2C 57 PUSH EDI
0040EF2D 83CD FF OR EBP,FFFFFFFF
0040EF30 EB 10 JMP SHORT upx.0040EF42
0040EF32 90 NOP
0040EF33 90 NOP
-------------------------------------------------------------
鼠标选中esp,再按右键,
dd 12ffa4
选择断点--硬件访问---word,然后按F9运行
0040F06F - E9 5820FFFF JMP upx.004010CC //直接中断在这里,跳向oep
0040F074 0000 ADD BYTE PTR DS:[EAX],AL
0040F076 0000 ADD BYTE PTR DS:[EAX],AL
-------------------------------------------------------------
再看看aspack
0040D001 > 60 PUSHAD //程序入口
0040D002 E8 03000000 CALL aspack2_.0040D00A ////来到这里,看ollydbg右窗口esp寄存器的值=12ffa4
0040D007 - E9 EB045D45 JMP 459DD4F7
0040D00C 55 PUSH EBP
---------------------------------------------------------------
鼠标选中esp,再按右键,
dd 12FFA4
用鼠标选中00 00 ,再按鼠标右键,选择断点--硬件访问---word,
然后按F9运行
0040D3B0 /75 08 JNZ SHORT aspack2_.0040D3BA //直接中断在这里.
0040D3B2 |B8 01000000 MOV EAX,1
0040D3B7 |C2 0C00 RETN 0C
0040D3BA \68 CC104000 PUSH aspack2_.004010CC //跳向这里,程序的oep
0040D3BF C3 RETN
0040D3C0 8B85 26040000 MOV EAX,DWORD PTR SS:[EBP+426]
------------------------------------------------------------------