找回密码
 注册
搜索
热搜: 回贴

软件破解教程-第8章第4节 手动脱壳3,软件破解教程,逆向工程技术

2010-1-30 18:36| 发布者: admin| 查看: 165| 评论: 0|原作者: 仙之剑缘


软件破解教程-第8章第4节 手动脱壳3,软件破解教程,逆向工程技术
2008年06月24日 星期二 下午 02:29
第8章 压缩与脱壳



第四节 手动脱壳



3、Shrinker v3.4 的壳



英文原作: Etenal Bliss

电子邮件: Eternal_Bliss@hotmail.com

作者网址: http://crackmes.cjb.net

http://surf.to/crackmes

写作日期: 2000年2月25日

中文翻译: **

翻译日期: 2000年3月14日



目标程序: 用Shrinker v3.4压缩过的Notepad.exe



******************************************************************

**注:

1. Notepad.exe就是Windows自带的写字板程序,相信大家的机器中都会有.

2. Shrinker v3.4可以在http://w3.to/protools下载,这里你可以找到你

想要的几乎所有的工具.

******************************************************************



使用工具:

ProcDump

Softice

Symbol Loader (**注:这个是Softice自带的,用过Softice的应该知道)



破解方法:

手动脱壳



教学目的:

教你手动脱壳的基本技术

__________________________________________________________________________



关于这个教程



这是我打算写的*简单*的脱壳系列教程的第一篇. 目标程序是notepad.exe,在大多数

的电脑中都有它. 因为我还不能很好地解释脱壳中的一些问题,我只能尽我所能向你们

展示简单的方法. 至于高级的方法,你们必须去读别的教程.

_________________________________________________________________________





使Softice中断于程序入口处



用Symbol Loader打开已压缩的notepad.exe.



点击Symbol loader任务条上的第二个图标,当你把鼠标移到图标上时,在Symbol Loader

窗口底部提示行你会见到"Load the currently open module"的字样



你将得到一条出错信息并问你是否尽管出错还是要装入这个exe文件. 点击"Yes".



假如Softice已经运行的话, 它应该在程序的入口处中断.可是它并没有中断,压缩过的

notepad.exe直接就运行了.



该到改变characteristics of the sections的时间了...

通过改变characteristics, 你可以使Softice中断于程序入口.



用ProcDump装入压缩过的notepad.exe (使用PE Editor)

你会看到这个以"PE Structure Editor"作为标题的窗口.

点击称作"Sections"的按钮.



你将得到另一个以"Sections Editor"做标题的窗口.

你会见到压缩过的notepad.exe的不同sections.



第一个是 .shrink0 它的characteristics是C0000082.

改变characteristics: 鼠标左键点击.shrink0再点击右键并选择edit section.



你将得到另一个窗口,它用’Modify section value" 作标题.

把Section Characteristics由C0000082改为E0000020.

一路按OK直到你回到ProcDump的主窗口.

你现在可以把ProcDump放在一边了.



**我愿意多作解释为什么必须这样做,但我没这个能力. 8P

你也许要读些PE结构的资料来找到原因.

别人教我说, E0000020将使section成为可执行的,因此Softice将会中断于入口处



找到程序真正入口并进行脱壳



现在, 希望你没有关闭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)


最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 11:39 , Processed in 0.182320 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部