PECompact 2.x快速脱壳(我的第一篇脱文)
【破文作者】vro
【作者邮箱】unpack@265.com
【个人主页】vro.nease.net
【使用工具】od lordPE importREC
【操作系统】Windows XP
--------------------------------------------------------------------------------
【破解声明】初次写脱文,大家多多关照!
[软件名称] 梦幻西游主程序
【保护方式】PECompact 2.x -> Jeremy Collake
--------------------------------------------------------------------------------
【脱壳过程】
p.s此壳我用f8单步大法,老跑飞,就换用esp定律
先载入主程序
来到
0040AD7A > B8 088F4400 MOV EAX,my.00448F08
0040AD7F 50 PUSH EAX
0040AD80 64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040AD87 64:8925 0000000>MOV DWORD PTR FS:[0],ESP《――看这个
0040AD8E 33C0 XOR EAX,EAX
0040AD90 8908 MOV DWORD PTR DS:[EAX],ECX
0040AD92 50 PUSH EAX
0040AD93 45 INC EBP
一。运用esp定律
1.f8单步运行到0040AD87
看右边窗口的esp值,我这里是0012ffbc
2.好下命令 d 0012ffbc
我们发现下方的转存窗口有所变化出现:
0012FFBC E0 FF 12 00 08 8F 44 00 ?.?.
0012FFC4 4F 6D 81 7C 38 07 93 7C Om?8?
在0012FFBC的4个字节下下硬件写入->DWord 断点(也就是在E0 FF 12 00上下)
f9运行程序
二.找oep
运行后断在
00448F3C 51 PUSH ECX<---断在这里
00448F3D 57 PUSH EDI
00448F3E 56 PUSH ESI
00448F3F 52 PUSH EDX
观察一下,不是oep阿,奇怪(这里不懂,望高手指点)
向下翻
00448FB5 8985 23120010 MOV DWORD PTR SS:[EBP+10001223],EAX
00448FBB 8BF0 MOV ESI,EAX
00448FBD 59 POP ECX
00448FBE 5A POP EDX
00448FBF 03CA ADD ECX,EDX
00448FC1 68 00800000 PUSH 8000
00448FC6 6A 00 PUSH 0
00448FC8 57 PUSH EDI
00448FC9 FF11 CALL DWORD PTR DS:[ECX]
00448FCB 8BC6 MOV EAX,ESI
00448FCD 5A POP EDX
00448FCE 5E POP ESI
00448FCF 5F POP EDI
00448FD0 59 POP ECX
00448FD1 5B POP EBX
00448FD2 5D POP EBP
00448FD3 FFE0 JMP EAX<----关键代码
00448FD5 0000 ADD BYTE PTR DS:[EAX],AL
00448FD7 0000 ADD BYTE PTR DS:[EAX],AL
00448FD9 0000 ADD BYTE PTR DS:[EAX],AL
00448FDB 0000 ADD BYTE PTR DS:[EAX],AL
在00448FD3 FFE0 JMP EAX<----关键代码上下断点
f9运行,断下,在f8单步运行一下,到了---oep
0040AD7A > 6A 60 PUSH 60<---(oep!,接下来会用到)
0040AD7C 68 10704200 PUSH my.00427010
0040AD81 E8 A2230000 CALL my.0040D128
三.dump and修复
拿出lordPE选择文件,full dump
此时不要关闭od,拿出importREC,选取进程,oep填 0040ad7a-400000= ad7a填ad7a
点自动搜索ita,再点获取输入表,发现函数都有效,最后点修复抓取文件,save.....
到此为止,搞定了.
谢谢看完
[课程]Linux pwn 探索篇!