说明:如果用OD来脱,步骤比较简单,不必参考此文。(2010.12)

压缩文件:下载

用TRW2000调试,装载后,下命令:pnewsec就可中断到入口点。为了提高跟踪水平,下面以SOFTICE为例,讲述跟踪过程。

_________________________________________________________________________

寻找程序的入口点( Entry Point)


用Symbol Loader打开Notepad-ASPACK.exe,点击Symbol loader的第二个图标("Load the currently open module")

如SOFTICE 装载成功,它应中断在起始程序入口处。


当跟踪时,你会经过许多条件跳转指令及循环指令,要用点技巧跳出这些圈子,其形式一般这样:

*************************************
aaaaaaaa
...
wwwwwwww
xxxxxxxx JNZ zzzzzzzz <-- 循环返回到aaaaaaaa
yyyyyyyy JMP aaaaaaaa
zzzzzzzz 新的指令

如果你跟踪时,你将跳转到 aaaaaaa处多次,你可将光标移到 zzzzzzzz一行,按F7让指令直接跳到此处,可省不少时间。
*************************************


在跟踪过程会来到:
167:0040D558 POPAD
0167:0040D559 JNZ 0040D563 (JUMP)
0167:0040D55B MOV EAX,00000001
0167:0040D560 RET 000C
0167:0040D563 PUSH EAX<--EAX的值就是入口点的值=4010CC
0167:0040D564 RET <--返回到记事本的真正的入口点

*************************************
0167:004010CC PUSH EBP <--真正的入口点
0167:004010CD MOV EBP,ESP
0167:004010CF SUB ESP,00000044
0167:004010D2 PUSH ESI

经过0167:0040D564 RET 一行,程序将来到0167:004010CC刚完全解压的真正程序第一条指令处。
*************************************
当我们跟踪时发现POPAD或POPFD,就要提高警惕,一般入口点就在附近了,在此程序的原始入口点是004010CC
在0167:0040D564 RET一行键入:
a eip (然后按回车)
jmp eip (然后按回车)
F5

这个方法是让程序挂起,按F5回到windows下。
运行 Procdump,在Task的列表中的第一个list上点击鼠标右键,然后选择"Refresh
list". 在Task列表中找到notepad.exe,在它的上面点击鼠标右键.
然后,选中"Dump (Full)",给脱壳的程序起名存盘.
再在notepad.exe上点击鼠标右键,然后选中"Kill Task".


_________________________________________________________________________

修正入口点

脱壳的notepad.exe程序入口是004010CC.
再次使用ProcDump的PE Editor功能, 打开已脱壳的notepad.exe.


修正入口点值=4010CC-00400000(基址)=10CC
点击"OK".

现在, 运行脱壳后的notepad.exe吧,它应该正常运行了。