某shift后门简要分析 手动ESP定律脱北斗

使用PEID分析某shift后门后得到程序加壳特征 nSpackV2.x → LiuXingPing * ,北斗的壳, 有现成的脱壳机, 本篇使用ESP定律手脱

OD载入, 停在这:

0040BBA7   9C              pushfd0040BBA8    60              pushad

F7两次, 然后Ctrl+G到ESP位置下硬件断点后F9, 停下来后看到下面这个jmp:

0040BE2B    9D              popfd0040BE2C  - E9 2D5EFFFF     jmp    00401C5E

F7跟进jmp后到达OEP:

00401C5E    55              PUSH EBP
00401C5F    8BEC            MOV EBP,ESP
00401C61    6A FF           PUSH -1
00401C63    68 78274000     PUSH sethc.00402778
00401C68    68 E41D4000     PUSH sethc.00401DE4
00401C6D    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
00401C73    50              PUSH EAX
00401C74    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00401C7B    83EC 68         SUB ESP,68
00401C7E    53              PUSH EBX
00401C7F    56              PUSH ESI

标准的VC头, 接下来dump出来:

dump出来的程序可以直接执行, PEiD再次查壳显示Microsoft VisualC++ 6.0 [Overlay], 至此, 脱壳完成; OD载入脱壳后的程序,Ctrl+N对MessageBoxA下API断点:

F9运行, 输入假码断在这

00401882   .  E86B020000   call    <jmp.&MFC42.#4224_CWnd::MessageB>

往上翻, 找到对比关键点:

很简单的明文比较, 得到shift后门密码: *#&.hEz. 往下翻:

得到另一个密码:!h.e.z^