1.PEID查壳
JDPack
2.载入OD,入口是一个pushad入栈,可以使用ESP,下硬件访问断点,shift+F9
0040E000 > 60 pushad ; //入口 0040E001 E8 00000000 call JDPACK.0040E006 ; //ESP 0040E006 5D pop ebp 0040E007 8BD5 mov edx,ebp 0040E009 81ED C62B4000 sub ebp,JDPACK.00402BC6 0040E00F 2B95 3D344000 sub edx,dword ptr ss:[ebp+0x40343>
3.ESP落脚点,落脚点的下一行就是一个retn,经过实践证明,这就是跳向OEP的关键跳,F8让跳转实现
0040E3FD 50 push eax ; //ESP落脚点 0040E3FE C3 retn ; //指向OEP的关键跳 0040E3FF 23E8 and ebp,eax 0040E401 72 00 jb short JDPACK.0040E403 0040E403 0000 add byte ptr ds:[eax],al 0040E405 8CC8 mov ax,cs 0040E407 50 push eax
4.来到OEP,脱壳吧
004035C9 6A 00 push 0x0 ; //来到OEP 004035CB E8 A20A0000 call JDPACK.00404072 004035D0 A3 5B704000 mov dword ptr ds:[0x40705B],eax 004035D5 68 80000000 push 0x80 004035DA 68 2C754000 push JDPACK.0040752C 004035DF FF35 5B704000 push dword ptr ds:[0x40705B] 004035E5 E8 820A0000 call JDPACK.0040406C 004035EA E8 87070000 call JDPACK.00403D76 004035EF 6A 00 push 0x0 004035F1 68 0B364000 push JDPACK.0040360B
5.运行,查壳
运行OK,查壳:TASM / MASM