压缩与脱壳-手动脱壳 下

时间:2005-12-20 来源: 作者: 点击:
现在, 希望你没有关闭symbol loader. 假如你关掉的话,重新运行它,打开并装入已压缩的notepad.exe 当你这次点击"Yes"时, 你会发现你已在进入Softice中了... 我把下面的代码贴出来并加上注解. ************************* 你在SICE中所见到的 ************************* **
  现在, 希望你没有关闭symbol loader. 假如你关掉的话,重新运行它,打开并装入已压缩的notepad.exe

当你这次点击"Yes"时, 你会发现你已在进入Softice中了...
我把下面的代码贴出来并加上注解.

************************* 你在SICE中所见到的 *************************

**Softice中断时,你会在这儿. 一直按F10走过这部分代码

0041454F  FFFF                INVALID
00414556  55                  PUSH      EBP
00414557  8BEC                MOV      EBP,ESP
00414559  56                  PUSH      ESI
0041455A  57                  PUSH      EDI
0041455B  756B                JNZ      004145C8                (NO JUMP)
0041455D  6800010000          PUSH      00000100
00414562  E8D60B0000          CALL      0041513D
00414567  83C404              ADD      ESP,04
0041456A  8B7508              MOV      ESI,[EBP+08]
0041456D  A3B4F14000          MOV      [0040F1B4],EAX
00414572  85F6                TEST      ESI,ESI
00414574  7423                JZ        00414599                (JUMP)
00414599  33FF                XOR      EDI,EDI
0041459B  57                  PUSH      EDI
0041459C  893D8C184100        MOV      [0041188C],EDI
004145A2  FF1510224100        CALL      [KERNEL32!GetModuleHandleA]
004145A8  8BF0                MOV      ESI,EAX
004145AA  68FF000000          PUSH      000000FF
004145AF  A1B4F14000          MOV      EAX,[0040F1B4]
004145B4  897D10              MOV      [EBP+10],EDI
004145B7  C7450C01000000      MOV      DWORD PTR [EBP+0C],00000001
004145BE  50                  PUSH      EAX
004145BF  56                  PUSH      ESI
004145C0  FF15F4214100        CALL      [KERNEL32!GetModuleFileNameA]
004145C6  EB03                JMP      004145CB                (JUMP)
004145CB  E830EAFFFF          CALL      00413000
004145D0  FF7510              PUSH      DWORD PTR [EBP+10]
004145D3  FF750C              PUSH      DWORD PTR [EBP+0C]
004145D6  56                  PUSH      ESI
004145D7  E806000000          CALL      004145E2

**当你走过这个位于004145D7的CALL, 压缩过的notepad.exe就自由运行了. 再次用
  symbol loader装入. 再次来到这个CALL时, 按F8追进去. 你将看到以下代码. 不
  过记着先BPX 004145D7.

004145E2  64A100000000        MOV      EAX,FS:[00000000]
004145E8  55                  PUSH      EBP
004145E9  8BEC                MOV      EBP,ESP
004145EB  6AFF                PUSH      FF
004145ED  6810E04000          PUSH      0040E010
004145F2  68EC5D4100          PUSH      00415DEC
004145F7  50                  PUSH      EAX
004145F8  64892500000000      MOV      FS:[00000000],ESP
004145FF  83EC14              SUB      ESP,14
00414602  C745E401000000      MOV      DWORD PTR [EBP-1C],00000001
00414609  53                  PUSH      EBX
0041460A  56                  PUSH      ESI
0041460B  57                  PUSH      EDI
0041460C  8965E8              MOV      [EBP-18],ESP
0041460F  C745FC00000000      MOV      DWORD PTR [EBP-04],00000000
00414616  8B450C              MOV      EAX,[EBP+0C]
00414619  83F801              CMP      EAX,01
0041461C  7510                JNZ      0041462E                (NO JUMP)
0041461E  E886030000          CALL      004149A9
00414623  FF05C0F14000        INC      DWORD PTR [0040F1C0]
00414629  E882F6FFFF          CALL      00413CB0
0041462E  8B35C0F14000        MOV      ESI,[0040F1C0]
00414634  85F6                TEST      ESI,ESI
00414636  0F848D000000        JZ        004146C9                (NO JUMP)
0041463C  833DC4F1400000      CMP      DWORD PTR [0040F1C4],00
00414643  7526                JNZ      0041466B                (NO JUMP)
00414645  833D6417410000      CMP      DWORD PTR [00411764],00
0041464C  741D                JZ        0041466B                (NO JUMP)
0041464E  A164174100          MOV      EAX,[00411764]

**EAX现在的值是000010CC

00414653  030588184100        ADD      EAX,[00411888]

**EAX现在的值是004010CC

00414659  8945DC              MOV      [EBP-24],EAX

**[EBP-24]现在含的是004010CC

0041465C  FF7510              PUSH      DWORD PTR [EBP+10]
0041465F  FF750C              PUSH      DWORD PTR [EBP+0C]
00414662  FF7508              PUSH      DWORD PTR [EBP+08]
00414665  FF55DC              CALL      [EBP-24]

**假如你追过最后这个CALL,notepad.exe将再次自由运行.
  由上得知, 既然[EBP-24] = 004010CC, 最后这句代码就意味着压缩过的程序在
  CALL 004010CC. 如果你追进这个CALL, 你会发现notepad.exe很快就会运行了.
 
假如你曾经追过更多shrinker v3.4压缩的程序, 你总会见到这个"CALL [EBP-24]".
所以, 程序实际上正在进入已脱壳的程序的真正入口.

再次装入压缩过的notepad.exe,中断之后,按F5,你将中断于004145D7行(这里你原来
设过断点). 追进去直到你到达00414665行,这里程序正要进入已脱壳程序的真正入口.

现在,键入以下命令:
a eip (然后按回车)
jmp eip (然后按回车)
按下F5

这样将改变00414665行的代码. 你会注意到在键入"jmp eip"并按下回车后,00414665的
指令现在是一个jmp.这将有效地使程序"暂停". 按下F5使你回到window,你就可以dump
已经脱壳的程序到你的硬盘了.

现在又要用ProcDump了,在Task的列表中的第一个list上点击鼠标右键,然后选择"Refresh
list". 在Task列表中找到notepad.exe,在它的上面点击鼠标右键.
然后,选中"Dump (Full)",给脱壳的程序起名存盘.
再在notepad.exe上点击鼠标右键,然后选中"Kill Task".

_____________________________________________________________

            改动程序入口值

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

在"Header Infos"一项, 你会看见程序入口值是0001454F,这当然是错误的. 如果你试着
不改动这个入口值而运行脱壳后的notepad.exe,程序将无法运行.

改变入口值为Entry Poin=004010CC-基址(ImageBase ),点击"OK".

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

__________________________________________________________


                            最后的说明

这篇教程是为所有和我一样的newbies而作.

我感谢和感激:

MiZ. 从他那里我学会了脱壳的基本技巧.

所有破解教程和CrackMe的作者,以及所有一直支持我的网站和论坛的Cracker们.

4、ASPack v1.083

压缩文件:下载。

如用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吧,它应该正常运行了。

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容