1.PEID查壳

JDPack

2.载入OD,入口是一个pushad入栈,可以使用ESP,下硬件访问断点,shift+F9

0040E000 >                pushad                            ; //入口
0040E001 E8 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                  push eax                          ; //ESP落脚点
0040E3FE C3 retn ; //指向OEP的关键跳
0040E3FF 23E8 and ebp,eax
0040E401 jb short JDPACK.0040E403
0040E403 add byte ptr ds:[eax],al
0040E405 8CC8 mov ax,cs
0040E407 push eax

4.来到OEP,脱壳吧

004035C9    6A            push 0x0                          ; //来到OEP
004035CB E8 A20A0000 call JDPACK.
004035D0 A3 5B704000 mov dword ptr ds:[0x40705B],eax
004035D5 push 0x80
004035DA 2C754000 push JDPACK.0040752C
004035DF FF35 5B704000 push dword ptr ds:[0x40705B]
004035E5 E8 820A0000 call JDPACK.0040406C
004035EA E8 call JDPACK.00403D76
004035EF 6A push 0x0
004035F1 0B364000 push JDPACK.0040360B

5.运行,查壳

运行OK,查壳:TASM / MASM
05-21 00:08