首页
社区
课程
招聘
[破解资料大全]:来至网上,不断更新
发表于: 2004-8-3 15:37 81237

[破解资料大全]:来至网上,不断更新

2004-8-3 15:37
81237
收藏
免费 1
支持
分享
最新回复 (117)
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
26
此书最早在1975年出版,是最早的讲述软件工程的书籍。历经将近20年,依旧风靡全世界,可见此书的影响力,目前此书已被好多大学、培训机构指定为软件工程专业的教材。
402K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3g2%4K9h3&6*7K9r3g2F1k6#2)9J5k6h3y4G2L8g2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6u0r3f1$3!0X3N6q4k6A6k6i4N6Q4y4h3j5I4y4e0V1%4x3#2)9J5k6h3S2@1L8b7`.`.
2004-8-3 18:16
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
27
2004-8-3 18:17
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
28
2004-8-3 18:18
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
29
OLLYDBG破解教学篇 作者:飞叶流枫
a85K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4k6A6M7r3u0G2L8$3E0Q4x3X3g2F1k6i4c8Q4x3V1k6K6L8$3k6@1i4K6u0r3x3e0M7^5y4W2)9J5k6h3S2@1L8b7`.`.
2004-8-3 18:47
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
30
ollydbg菜鸟使用动画
052K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3&6A6k6h3c8#2i4K6u0W2L8X3g2@1i4K6u0r3f1$3!0X3N6q4k6A6k6i4N6Q4x3V1k6e0L8$3k6@1g2X3W2W2N6#2)9#2k6U0p5#2z5e0W2Q4x3X3g2Z5N6r3#2D9
2004-8-3 18:52
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
31
2004-8-3 18:52
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
32
2004-8-3 18:53
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
33
2004-8-3 18:55
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
34
2004-8-3 18:55
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
35
2004-8-3 18:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
楼主辛苦了啊
2004-8-3 18:59
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
37
2004-8-3 19:05
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
38
《软件工程思想》讲述“软件开发”和“做程序员”的道理,视野独特,构思新颖,内容风趣,不落窠臼,令人耳目一新。堪称难得,以至回味无穷。
c08K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3g2%4K9h3&6*7K9r3g2F1k6#2)9J5k6h3y4G2L8g2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6u0r3f1$3!0X3N6q4k6A6k6i4N6Q4y4h3j5I4z5e0R3^5x3g2)9J5k6h3S2@1L8b7`.`.
2004-8-3 19:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
这年代难得,特别在中国大地上出先类风同志啊
2004-8-3 19:13
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
40
注册机制作/keymake2.0修正完全版.rar 2.0
   由于keymake的作者刘健英已经退出,keymake到目前为止仍然是预览版,现根据keymake v2.0预览版和新版的masm特意制作keymake2.0的修改版完全安装版。欢迎大家测试使用!

张湘平(网名:独鹤,duhe)
2004.2.2
使用注意:
1)keymake v2.0预览版--没有内存注册机生成功能!
2)用此软件注册生成的内存注册机,会多了一个空格,请使用时删除空格!

6d7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2G2L8X3A6A6j5h3&6Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9r3!0%4i4K6u0W2j5i4y4H3i4K6y4r3K9h3c8Q4x3@1b7I4x3o6V1H3
2004-8-3 19:18
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
41
Compuware (SoftICE) Driver Studio V3.1 完全版
acaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3f1H3P5X3!0F1k6i4y4Q4x3X3g2U0L8$3#2Q4x3V1k6e0L8$3k6@1g2X3W2W2N6#2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6g2X3x3e0f1^5x3U0S2Q4x3X3g2Z5N6r3#2D9

NuMega Driver Studio 3.0 Beta2
f34K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0t1I4z5q4)9J5k6h3S2@1L8b7`.`.

NuMega Driver Studio 2.7
c56K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0x3@1i4K6u0W2K9s2c8E0

SoftICE V4.05 For NT & Win2000
0b4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0t1^5i4K6u0W2K9s2c8E0

TRW 2000 1.22 pll621修改版.rar
13cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0x3I4i4K6u0W2K9s2c8E0

Ollydbg V1.10 正式汉化修改版+最新最全插件
Ollydbg是一个新的动态追踪工具,将IDA与SoftICE的思想结合了起来。值得推荐!
本修改版采用的是:flyODBG修改版。
f12K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3f1H3P5X3!0F1k6i4y4Q4x3X3g2U0L8$3#2Q4x3V1k6e0L8$3k6@1g2X3W2W2N6#2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6g2X3x3e0j5#2x3U0m8Q4x3X3g2Z5N6r3#2D9

IDA Pro Standard V4.5.1.770 + Flare421 + SDK
e51K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3f1H3P5X3!0F1k6i4y4Q4x3X3g2U0L8$3#2Q4x3V1k6e0L8$3k6@1g2X3W2W2N6#2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6g2X3x3e0f1#2y4K6y4Q4x3X3g2Z5N6r3#2D9

IDA 4.17正式版
305K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0p5H3y4q4)9J5k6h3S2@1L8b7`.`.

IDA 4.15正式版
374K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0p5H3x3#2)9J5k6h3S2@1L8b7`.`.

IDA 4.30正式版
543K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3M7$3!0X3N6q4)9J5c8U0p5H3y4g2)9J5k6h3S2@1L8b7`.`.

SmartCheck V6.20
06dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3f1H3P5X3!0F1k6i4y4Q4x3X3g2U0L8$3#2Q4x3V1k6e0L8$3k6@1g2X3W2W2N6#2)9J5c8W2y4G2k6Y4c8h3K9h3g2%4i4K6g2X3x3e0j5$3y4e0k6Q4x3X3g2Z5N6r3#2D9

peid0.92(2004.5.3)冷剑汉化版-带10个插件
840K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2^5x3o6l9%4i4K6u0W2j5$3!0E0i4K6u0r3k6Y4m8^5P5s2m8Q4x3V1k6V1L8%4N6F1i4K6u0r3M7$3!0X3N6q4)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5x3R3`.`.

w32dasm黄金中文版
f9dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2^5x3o6l9%4i4K6u0W2j5$3!0E0i4K6u0r3k6Y4m8^5P5s2m8Q4x3V1k6V1L8%4N6F1i4K6u0r3M7$3!0X3N6q4)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5z5b7`.`.

ASProtect v.1.31 build 06.14 Release
e05K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2^5x3o6l9%4i4K6u0W2j5$3!0E0i4K6u0r3k6Y4m8^5P5s2m8Q4x3V1k6V1L8%4N6F1i4K6u0r3M7$3!0X3N6q4)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5x3U0V1`.

exescope6.5
a3dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2^5x3o6l9%4i4K6u0W2j5$3!0E0i4K6u0r3k6Y4m8^5P5s2m8Q4x3V1k6V1L8%4N6F1i4K6u0r3M7$3!0X3N6q4)9J5k6h3q4K6M7q4)9K6c8X3W2V1i4K6y4p5x3U0M7`.
2004-8-3 19:36
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
42
看雪学院论坛
http://bbs.pediy.com/index.php?

DFCG官方论坛
b0bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5b7g2)9J5k6h3y4G2L8g2)9J5c8R3`.`.

龙族联盟论坛
bf8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4Z5K9h3&6S2k6r3k6G2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2H3K9s2l9`.

中国狂热破解联盟-梦想家园社区  
cf8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0g2A6j5%4u0S2j5$3E0Q4x3X3g2U0L8$3#2Q4x3V1k6T1j5Y4y4Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7l9`.`.

风飘雪|加密与解密实战攻略|最酷破解教学,带你轻松进入破解的殿堂
3b4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2^5x3o6l9%4i4K6u0W2j5$3!0E0i4K6u0r3k6Y4m8^5P5s2m8Q4x3V1j5`.

加密与解密-看雪学院
524K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6u0r3

绿盟安全论坛
91cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0T1M7#2)9J5k6h3&6K6k6X3!0U0N6i4y4Q4x3X3g2F1k6i4c8Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7l9`.`.

破解联盟论坛
cf6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4J5j5h3y4C8i4K6u0W2P5Y4g2S2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3y4Y4K9g2)9J5k6r3u0A6L8W2)9J5c8Y4g2@1i4K6u0r3k6X3!0J5N6h3#2Q4y4h3k6K6K9r3!0%4i4K6u0W2j5$3N6A6

软件调试论坛
d29K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4Z5j5i4b7H3x3o6q4Q4x3X3g2U0L8$3#2Q4x3V1k6X3L8%4u0#2L8g2)9J5c8X3y4J5j5h3y4C8k6X3!0J5N6h3#2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6h3S2@1L8h3H3`.

零度地带[0ZONES.COM]
b86K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4G2k6Y4c8Q4x3X3f1H3P5X3!0F1k6i4y4Q4x3X3g2U0L8$3#2Q4x3V1j5`.

白菜乐园
9d2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5%4u0W2j5%4W2Q4x3X3g2S2P5h3W2F1k6X3!0Q4x3X3g2Z5j5g2)9J5k6h3y4F1i4K6u0r3
2004-8-3 19:47
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
43
明:

一.本文实用于初学者,需要具备一定的汇编和系统底层的知识。
二.本文只是为了让广大网友共同提高一些基础知识,本人决无卖弄之意,只供需
要这方面知识的读者阅读,如果你是高手,或者不需要这方面知识,请跳过。
三.本文的实例均为普通程序,如有雷同,敬请谅解。
四.本文欢迎传抄转载,如果是商业用途,请联系本人。af6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4A6G2N6h3c8S2L8W2)9J5k6b7`.`.
com zoudan@sina.com

   打补丁是常见的一种软件升级和更新手段。打补丁的形式很多,本文所述的方
式基本上为修改原程序二进制代码的方式,适用于Windows95之后的平台(Win32)


   Windows95(Win32)以后的可执行文件都是PE格式,.exe、.ocx、.dll.等等都
是常见的PE格式的文件映像,看一个文件是否为PE文件,不是看它的扩展名,而是
看它的文件头中是否有PE文件头标示和具体的文件内容。比如常见的软件"追捕"中
那个wry.dll,就不是一个PE格式的Dll(动态连接库)文件,通常用16进制编辑软
件打开文件首部观察便可得知。关于PE文件的具体格式和教程不是本文的描述范围
,大家可以查阅相关的资料,我网站上那篇"关于95下的可执行文件加密研究"中也
有比较详尽的描述。

   PE文件是一个程序代码、数据的集合。其中的程序代码是该执行文件本身的,
它可能通过动态连接的形式访问其他附属的程序或者动态连接库,通常一个程序文
件中包含了大量的系统调用和对其他程序及动态连接库的调用。

   言归正传,无论是破解,程序改良或者程序升级,在改动不大,且没有源程序
参考的情况下,最直接的方法就是更改PE可执行文件。大家都知道我制作的补丁程
序,基本上就是直接修改程序文件,使之达到我们需要得到的功能。

   一个PE可执行文件中通常有很多段(section),分别描述不通的数据结构和代
码。最基本的几种段有.code(.text)(代码段)、.data(数据段)、.rdata、.
rscs(资源)等等,这些段的名称可以是程序自定,决定它们属性的不是他的名称
,而是PE文件头中的描述。有很多查看PE文件结构和内容的软件,我向大家推荐
Borland C自带的一个叫Tdump的小软件,很简单和方便,在现在的Borland C++
Builder和Borland C中都有,大家可以用他来了解PE文件的内部信息。

   一般来说,修改资源段中的东西最为简单。那些对话框、字符串、位图等等。
修改这些资源很容易,因为有很多这方面的软件,最常见的就是VC++,只要用VC用
资源修改方式打开程序文件,所有这个程序相关的资源就会很容易的修改了。大家
可以随便找几个程序来试试手,挪挪对话框,改改属性,编辑文字,画画位图,很
容易上手和熟悉。

   修改程序文件的其他地方就没有修改资源段容易了,程序当然都是汇编机器代
码,数据也是未知的结构。关于怎样看懂、跟踪、了解程序的运作就是一件非常经
验的事情,不同的程序不同的方法,没有定式,它们唯一的共同点就是都是汇编代
码,都能用软件反汇编和动态调试。这也已经超出了本文的范畴,我想它需要扎实
的汇编基础,系统底层知识以及丰富的程序调试经验,不可能在很快的时间内掌握
。这需要耐心,长时间的实战以及积累。在此我向大家推荐我常用的工具,静态的
反汇编可以用IDA pro,使用该软件你会发现枯燥乏味的汇编代码变得井井有条,
且多了很多帮助理解的注释,当然还有很多重要程序库的符号,比如MFC库类,标
准C库等等。该程序是最好的反汇编工具,为我们读懂苦涩的机器指令提供了良好
的互动环境。光静态分析汇编代码无疑是极其困难的,光靠眼睛看不可能看到寄存
器,内存单元数据等等和程序运行息息相关的东西。关键是汇编代码苦涩难懂,动
态的调试就成了我们深入了解程序、调试程序、探测程序的最重要的手段。我所提
到的动态调试是汇编级别的,并非任何高级语言。值得提到的是有些程序带有调试
符号信息,那会为我们动态调试提供很大很大的便利,不过一般Release版本都不
会把调试信息链接到最终的程序文件中,粗心的程序员有可能犯这个错误。总之,
汇编级的调试一般来说都非常的艰苦,不过动态调试和静态阅读相结合还是会使效
率提高很多。动态调试的软件很多,而且都支持汇编级别的调试。一般集成变成环
境都带有这种工具,比如VC++,C++ Builder等等。专业调试软件有W32dasm、Trw
、Soft-ice等等,在这个领域里,Soft-ice无疑是绝对的佼佼者。我觉得几乎没有
Soft-ice触及不到的深度,Soft-ice为我们了解系统的任何一个细节提供了可能,
从DOS时代到windows时代,Soft-ice无疑是动态调试领域最重要的工具。好话说得
够多了,我不是在为它打广告,实事的确如此,网上很容易下载到它的各种版本。
Soft-ice虽然很厉害,但是对初学者来说的确不容易掌握,且更需要扎实的底层基
础。掌握了它就为掌握了系统的最底层提供了可能,这无疑是个核武器。

   关于具体怎么放置补丁程序,用DLL动态连接库方式编制复杂的补丁程序等等细
节问题我将在以后的文章中介绍,请各位网友密切留意。

本篇总结:
1. 本系列文章讨论的主要话题和范围。
2. PE文件是Win32平台的可执行文件。
3. 关于修改资源段的问题。
4. 其他一些相关知识的介绍。
5. 几种工具的推荐及其简要介绍。
2004-8-3 20:53
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
44
声明:

一.本文实用于初学者,需要具备一定的汇编和系统底层的知识。
二.本文只是为了让广大网友共同提高一些基础知识,本人决无卖弄之意,只供需
要这方面知识的读者阅读,如果你是高手,或者不需要这方面知识,请跳过。
三.本文的实例均为普通程序,如有雷同,敬请谅解。
四.本文欢迎传抄转载,如果是商业用途,请联系本人。924K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4A6G2N6h3c8S2L8W2)9J5k6b7`.`.
com [email]zd_dan@263.com[/email]

   不知道各位把“基础篇”中的内容搞懂没有,我现在要带领大家提高啦,请各
位用心听讲!

    这次要教大家的是如何为程序添加功能。大家都知道,在可执行文件当中只有
少量的空间和位置可以放置我们的补丁程序,这就注定了要实现比较复杂的功能是
非常有局限的。想象一下,如果在人家程序中添加大量的汇编代码,且只能是汇编
代码(不要问我为什么),并且调试运行。因为是在人家的运行环境中运行,必须
维护大量的寄存器,地址空间,堆栈等等,那将是何其困难和痛苦的一件事情。汇
编能作很多事情,但是也不是万能,要用汇编实现很多复杂的功能简直就是变态的
行为。我为大家制作的FolkQQ补丁程序,其实汇编代码也就几十行,功能也很简单
,就几十个字节。但这已经使我够痛苦的了,如果再多些,常人是吃不消的(调试
运行这些代码很费力,如果一个地方错了至少得重敲,而且死机重起是常事)。

      看到这里,可能有同学会问,像你的SE补丁系列,实现了IP地址到具体物理
地址的转换,难道也是你用汇编写的吗(用汇编写这个会死人的)?当然不是,大
家注意到有个IPsearcher.dll,这是一个动态链接库,看名字就知道这是关于IP地
址转换成实际地址功能的东东。对,所有的转换工作就是在其中完成。他是我用
VC写的,程序很简单,但是如果用汇编写那就复杂了。我想我自己都没有毅力把它
用汇编写完,然后一个一个字节一个一个指令的敲到人家的程序中去。

    呵呵,今天要教大家的就是如何在补丁程序中实现复杂的功能,具体问题在上
面已经描述了,方法就是为程序附带一个动态链接库,把所有复杂的功能都留在
DLL里面,让高级语言去作低级语言难于实现的功能,留出接口,供被打补丁的使
用即可。

    关于什么是DLL,我想不用我再多说了。简单的理解就是一个函数库,别人调
用它,它具体完成,就这么简单。大家可以用软件看看我写的那个IPsearcher.
dll(用tdump,或者VC中的工具depends.exe),可以看到其中只有一个函数接口,
叫“_GetAddress”。给它一个IP地址的作为参数,它就能返回那个IP地址的实际
地址。具体它的实现不在我们今天的讨论范围当中。

    问题的关键就是如何在要被打补丁的程序中调用到这个动态链接库,让它为我
们添加的补丁程序服务。

      再往下看,就需要各位同学具备一定的Win32 PE格式的可执行文件的基础了
(可以参考我以前写的“关于Win95下的可执行文件的加密研究”和“基础篇”)
。在PE文件中,指定了该程序要使用到的所有动态链接库,还有要调用的哪个函数
接口。这些信息都写在一个叫Import Table的数据结构当中。它描述了某个动态链
接库的某个函数接口的调用地址,这个是为了使系统能够为该程序装入动态链接库
并且重定位接口地址信息的。

    可能大家有点晕菜了,没关系。让我用一个实例来解释一下Import Table。我
们用tdump 打开一个PE格式的可执行文件:

C:\>tdump example.exe |more
Turbo Dump Version 5.0.16.12 Copyright (c) 1988, 2000 Inprise
Corporation

........

Name RVA Size
------------------ -------- --------
Exports 00000000 00000000
Imports 0019CFA0 0000017C
Resources 00287000 00077F18

........

# Name VirtSize RVA PhysSize Phys off Flags
-- -------- -------- -------- -------- -------- --------
01 .text 00157744 00001000 00158000 00001000 60000020 [CER]
02 .rdata 0004723A 00159000 00048000 00159000 40000040 [IR]
03 .data 000E5C28 001A1000 0002A000 001A1000 C0000040 [IRW]

.......

Section: Import
ImportLookUpTblRVA:0019D938
Time Stamp: 00000000
Forwarder Chain: 00000000 (index of first forwarder reference)

Imports from WINMM.dll
(hint = 0071) mixerOpen
(hint = 0065) mixerClose
(hint = 006B) mixerGetLineControlsA

    先说说第一个出现红字的地方,这是这个程序的Import Table的RVA地址(什
么是RVA自己查)和长度;第二个红字是1A1000,它大于19CFA0,说明什么呢,
Import Table的地址在.rdata段当中(好像知道了也没什么用,呵呵,写都写了,
也不管这么多了);第三个红字的地方就是tdump解析出的Import Table具体的内
容,比如有个叫WINMM.DLL的动态链接库,需要调用它的序列号是0ach的
waveOutClose 函数。诸如此类的后面还有很多很多,通常一个程序需要调用至少
是几个的动态链接库(kernel32.dll,user32.dll等等)。

    那Import Table在文件中具体的样子是什么呢,同学们可以用UltraEdit打开
偏移为19CFA0的地方看看。然后结合我给出的数据结构和tdump解析出的结果,具
体分析和理解一下。

以下摘抄于“关于Win95下的可执行文件的加密研究”

   .idata块以一个IMAGE_IMPORT_DESCRIPTOR数组开始。每一个被PE文件隐式连结
进来的DLL都有一个IMAGE_IMPORT_DESCRIPTOR。在这个数组中,没有字段指出该结
构数组的项数,但它的最后一个单元是NULL,可以由此计数算出该数组的项数。
IMAGE_IMPORT_DESCRIPTOR的格式如下:
Dword Characteristics
   该字段是一个指针数组的RVA偏移。其中每一个指针都指向一个
IMAGE_IMPORT_BY_NAME结构
Dword TimeDateStamp
   时间及日期标志,可以忽略。
Dword ForwarderChain
   正向链结索引。我们的资料中没有函数正向链结的格式,也没有这一样的例子

Dword Name
   以NULL结尾的ASCII字符的RVA地址,该字符串包含输入的DLL名,比如“
Kernel32.dll”或“USER32.DLL”。
PIMAGE_THUNK_DATA FirstThunk
   该字段是在Image_thunk_data联合结构中的RVA偏移。大多数情况下,
Image_thunk_data是指IMAGE_IMPORT_BY_NAME结构的指针。如果不是一个指针的话
,那它就是该功能在DLL中的序号。

IMAGE_IMPORT_DESCRIPTOR重要的部分有输入的DLL名字及两个
IMAGE_IMPORT_BY_NAME指针数组。在执行文件中,这两个指针数组彼此平行,末尾
都是以Null表示数组的结束。下图给出了这种关系的图形描述。

     为什么由两个并行的指针数组指向IMAGE_IMPORT_BY_NAME结构呢?第一个
Characteristics是单独的一项,而且不可改写,它有时被称为提示名表(Hint
Name Table)。第二个数组(FirstThunk所指)是由PE装入器重写的。装载程序迭
代搜索数组中的每一个指针,找到每一个IMAGE_IMPORT_BY_NAME结构所指的输入函
数的地址,然后装载器找到程序的地址改写IMAGE_IMPORT_BY_NAME指针。Jmp
dword ptr [xxxxxxxx]中的[xxxxxxxx]是指First Thunk数组中的一个入口。因为
它被称为输入地址表(Import Address Table)。

     好了,不知道大家看明白了没有,对Import Table不解的地方可以仔细查看
我的文章,那里面有很详细的阐述。

     我们的目标已经很明确了,把我们自己的DLL描述添加到被打补丁程序的
Import table当中,让系统在装入该程序的同时,装入我们自己的DLL,并且做好
重定位,为我们的补丁程序调用DLL中的接口做好准备。

     我们可以直接修改Import Table,如果空间足够,我们可以这么干。但是
Import Table往往是个很小一块数据,可以为一个段,也可以塞在程序的任何地方
。所以Import Table的往往前后都是其他数据,我们要加一项都是很困难的事情(
其实一项也就20个字节)。那如果前后都是有数据的怎么半,没关系,直接全部挪
到其他空闲的地方去(什么地方空闲,请看“基础篇”)。但一定要记得的是,必
须修改PE部首的字段(第一个红字所描述的地方),改到你自己的Import Table所
在的地方,当然,长度也要修改(通常一个DLL就是一项,一项就是20个字节)。

     最重要最关键的就是自己构造一个Import Table的表项了。(喝口水,稍等


   关于表项的具体数据结构和描述已经在上面讲述了。用UltraEdit改二进制文件
就像是给病人开刀,要格外小心谨慎。要记住,每个数据的每一位都像是病人身上
的肉肉,动刀前先要有信心,要有把握,谨慎,仔细,把稳。。。。

     算了,说得我自己都紧张了,还是我一手一手示范讲解吧。(上个WC,不好
意思)

     回来了,我接着和大家聊。让我们先来看看一个实际PE可之行文件的16进制
映像吧。就拿那个程序为例,我们已经知道它的Import Table的起始RVA地址
(0019CFA0),用UltraEdit打开该程序,按那个Goto按钮,接着输入地址“
0x19CFA0”回车。这样你就会在编辑其中看到该文件Import Table的样子。(如下
图)

  大家可以看到这个可执行文件的从19cfa0到19d11b共17C个字节的Import Table
,其中最后20个字节是一个空表项,它表示这个Import Table的结束。可以看到,
在Import Table结束之后仍然有大量的未知数据,这就给我们添加表项带来了困难
。该怎么办呢,前面已经提到,挪到其他地方去。怎么挪?

1。先找空地方,我们找到001A0250,它在.rdata和.data中间,大家可以自己用
UltraEdit找各个段的接逢处,往往有空余的空间。(怎么找空隙请参阅“基础篇
”)

2。把UltraEdit的光标移动到地址19cfa0到19d11f(0x180h个字节),然后按
Ctrl-c拷贝。然后移动光标到1A0250,选住空白的0x180h个字节好(如果不选住再
粘贴就是插入了),按Ctrl-V。这样我们就把以前的Import Table拷贝到了新的地
方(以前Import Table 19cfa0的数据不用删除)。

3。拷贝完了之后还需要把PE文件头Dir Table中的Import Table的首址RVA指向到
新的地方。具体做法是,在文件头部查找16进制数A0 CF 19 00(也就是19cfa0),
把它改成50 02 1A 00 (1a0250),然后紧接着后面两个自己是Import Table的
长度,以前是17Ch,现在改成17Ch+14h=190h。(14h=20,这是一个表项的长度)

  挪完了,让我们用tdump 检查一下文件:

Name RVA Size
------------------ -------- --------
Exports 00000000 00000000
Imports 001A0250 00000190

.......

Section: Import
ImportLookUpTblRVA:0019D938
Time Stamp: 00000000
Forwarder Chain: 00000000 (index of first forwarder reference)

Imports from WINMM.dll
(hint = 0071) mixerOpen
(hint = 0065) mixerClose
(hint = 006B) mixerGetLineControlsA

  第一个红字的地方说明我们已经把Import Table的首址改到了1a0250长度是190
了。第二个红字的地方说明新的Import Table的表项数据是可靠的。

  好了,最关键的最激动人心的时候到了,让我们真正为这个新的Import Table添
加表项,添加表项必须是要建立在你已经完全对Import Table结构了解的基础上,
输入的过程就是输入一些16进制数和字符串。下面是输入好后的屏幕切图,我将结
合该图为大家讲解。

   好了,大家已经看到了,这是添加好表项以后的Import Table,其中1a0250到
1a03b8和以前的Import Table一模一样。以前的Import Table在1a03b8以后是20个
字节的全零结束符。1a03b9到1a03cc是我们添加的表项,后面的20个字节是新的结
束符。然后空了16个字节,接着是DLL信息。

   让我把新表项的每一个字段都给大家讲解一下。

   1a03b9开始,第一个DWORD是1a0410。地址1a0410是指向的1a03f0,1a03f0这是
一个DLL接口的描述(具体结构请自行查阅资料)。可以看到01 00(0001)是
_GetAddress函数在DLL中的序列号(IPsearcher.dll中只有一个函数接口,序号是
1),然后是一个以0结尾的字符串“_GetAddress”这是函数的名称。

   表项的第二个第三个DWORD是timestamp和向后的指针链,不管(只有一个函数
,所以指针链是0,表示结束)。

   第四个DWORD是1a03e0,它指向DLL文件的文件名,图例中是“ipsearcher.dll
”,当然也需要以0结尾。

   第五个DWORD是1a0418,这个地址是在图例中有数值,其实可以不管。因为这个
地址是系统在装入DLL之后填写的该函数接口的具体地址。我们的补丁程序就是调
用这个地址中的地址来调用_GetAddress这个函数。具体怎么访问呢?程序装入地
址是40000h,所以该地址在装入之后就是40000h+1a0418h=5a0418h。我们的补丁程
序使用call dword ptr [5a0418]就可以调用_GetAddress了。

   

   呵呵,修改Import Table的工作已经结束。我使劲在讲,不知道大家明白了没
有,可不要说我没照顾大家的感受!

   对了,还有一个很重要的事情。由于在系统装入DLL的时候需要在1a0418中填写
函数入口地址,所以,找个地址所在的段必须可写。关于怎么修改段表,使某一个
段可写,请参阅我以前的文章。

   最后当然要用我们的tdump查看一下我们修改PE文件的结果:

Imports from WININET.dll
(hint = 0075) InternetQueryOptionA
(hint = 0052) InternetCanonicalizeUrlA
(hint = 0056) InternetCloseHandle
(hint = 007E) InternetSetFilePointer
(hint = 0077) InternetReadFile
(hint = 0074) InternetQueryDataAvailable
(hint = 0088) InternetWriteFile
(hint = 0069) InternetGetLastResponseInfoA
(hint = 005C) InternetCrackUrlA
(hint = 0071) InternetOpenUrlA
(hint = 006F) InternetOpenA
(hint = 0083) InternetSetStatusCallback

Imports from ipsearcher.dll
(hint = 0001) _GetAddress

   看红字,呵呵,我们已经成功了。这样,被打补丁的程序在装入的时候会自动
装入ipsearcher.dll,并且把_GetAddress函数的入口地址填写到1a0418处。

   以后该怎么办不是我们今天要探讨的内容,总之我们在被打补丁的程序中已经
能够调用新的动态链接库中的函数接口了,这无疑为在补丁中添加实现复杂的功能
提供了可能。

   呵呵,很有用吧。我表达能力不太好,希望大家看懂了。不懂的自己先努力查
资料自己专研,实在不懂的再问我吧。

   辛苦大家看这么多,下次再见吧!
2004-8-3 20:55
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
45
发信人: shuyang (pLayAr), 信区: Hacker      
一部分程序在xp with SP1下脱壳后在其他系统下运行不了.这是因为kernel32的
版本不同导致的.

如果遇到这样的问题.可以搜索脱壳后的程序中的"RestoreLastError",并将其改
为"SetLastError",不足的位数用0x00补齐即可. 或者在使用ImportREC等修复工
具的时候直接指定为SetLastError.

原因:XP下修复Import表的时候ImportREC会将ntdll!RtlRestoreLastWin32Error
重定位到kernel32!RestoreLastError,而这个函数在以前的windows系统下是不存
在的.经过我的检查,这和SetLastError实际上是同一个函数.都被转移到对
ntdll!RtlRestoreLastWin32Error的调用.
2004-8-3 21:17
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
46
发信人: cca (^ok^), 信区: Crack
标  题: (原创) 用OLLYDBG脱ASPR压缩过的程序 激励人气!
发信站: BBS 水木清华站 (Sat Feb  7 21:17:42 2004), 转信

--------------------------------------------------------------------------------

用OLLYDBG脱ASPR压缩过的程序

目标程序:奇迹游戏的的客户端 Main.exe Ver 0.97.0.0
作者:cca
--------------------------------------------------------------------------------

1。脱壳前的准备工作

使用的工具
Ollydbg V1.09d (我的是汉化版),插件最好有Ollydump
ImportREC v1.6,插件(需要ASProtect1.22的插件)
LordPe

工具不全的兄弟到请用Google搜索一下,网上都很容易找到的。
要脱壳的程序请到奇迹网站下载,fb9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3#2#2j5$3S2A6L8X3q4Q4x3X3g2U0L8$3@1`.

2。第一步 寻找程序的入口点OEP

紧记住ASProtect保护的程序是动态地址分配,每次的地址都不同的,所以不要关心代码地址,地址不同,代码基本是相同的。

用OD装载Main.exe后,忽略压缩提示,选不继续分析。运行程序,程序会出异常出错,停在

0B2041A4   3100             XOR DWORD PTR DS:[EAX],EAX
0B2041A6   EB 01            JMP SHORT 0B2041A9

连续按25次Shift+F9,一直到代码显示为:

0B2039EC   3100             XOR DWORD PTR DS:[EAX],EAX
0B2039EE   64:8F05 00000000 POP DWORD PTR FS:[0]
0B2039F5   58               POP EAX
0B2039F6   833D B07E200B 00 CMP DWORD PTR DS:[B207EB0],0
0B2039FD   74 14            JE SHORT 0B203A13
0B2039FF   6A 0C            PUSH 0C
0B203A01   B9 B07E200B      MOV ECX,0B207EB0
0B203A06   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]
0B203A09   BA 04000000      MOV EDX,4
0B203A0E   E8 2DD1FFFF      CALL 0B200B40
0B203A13   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
0B203A16   FF75 F8          PUSH DWORD PTR SS:[EBP-8]
0B203A19   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]
0B203A1C   8338 00          CMP DWORD PTR DS:[EAX],0
0B203A1F   74 02            JE SHORT 0B203A23
0B203A21   FF30             PUSH DWORD PTR DS:[EAX]
0B203A23   FF75 F0          PUSH DWORD PTR SS:[EBP-10]
0B203A26   FF75 EC          PUSH DWORD PTR SS:[EBP-14]
0B203A29   C3               RETN
0B203A2A   5F               POP EDI
0B203A2B   5E               POP ESI
0B203A2C   5B               POP EBX
0B203A2D   8BE5             MOV ESP,EBP
0B203A2F   5D               POP EBP
0B203A30   C3               RETN

在 0B203A29  处按F2设置断点,然后按Shift+F9运行到断点处。
记得一定要在0B203A29  RETN返回前按F2清除断点,然后单步跟踪F7,后代码为:

0B214B58   66:BB 56CA       MOV BX,0CA56
0B214B5C   0F8F 1C000000    JG 0B214B7E
0B214B62   81F6 2ECE3D5D    XOR ESI,5D3DCE2E
0B214B68   E9 11000000      JMP 0B214B7E
0B214B6D   65:3AEB          CMP CH,BL                                ; 多余的前缀
0B214B70   48               DEC EAX
0B214B71   E1 06            LOOPDE SHORT 0B214B79
0B214B73   C7               ???                                      ; 未知命令
0B214B74   F4               HLT                                      ; 特权级命令
0B214B75   1D 92636019      SBB EAX,19606392
0B214B7A   DEBF 8CD5E80F    FIDIVR WORD PTR DS:[EDI+FE8D58C]
0B214B80   0000             ADD BYTE PTR DS:[EAX],AL
0B214B82   00DB             ADD BL,BL
0B214B84   78 51            JS SHORT 0B214BD7
0B214B86   B6 B7            MOV DH,0B7
0B214B88   24 8D            AND AL,8D
0B214B8A   42               INC EDX
0B214B8B   53               PUSH EBX

说明,下面的代码是Asprotect的解码部分,多按F7几次,(不要在Call指令处按F8,否则会跑飞)。
当看到如下代码段后:

0B214D3C   5E               POP ESI
0B214D3D   66:81C0 706D     ADD AX,6D70
0B214D42   80E0 9C          AND AL,9C
0B214D45   58               POP EAX
0B214D46   81FF 54EBFFFF    CMP EDI,-14AC               
0B214D4C   0F85 2F000000    JNZ 0B214D81                ;此处是判断解码是否完成
0B214D52   0FB7C2           MOVZX EAX,DX
0B214D55   E8 07000000      CALL 0B214D61
0B214D5A   A3 A0591EFF      MOV DWORD PTR DS:[FF1E59A0],EAX
0B214D5F   CC               INT3

在0B214D52下断点,F9运行至断点处,清除断点后,按F7单步跟踪,记住不要F8,否则会跑飞。一直按F7,记住要有些耐心,运行到

0B21488E   55               PUSH EBP
0B21488F   8BEC             MOV EBP,ESP
0B214891   6A FF            PUSH -1
0B214893   68 48E95400      PUSH 54E948
0B214898   68 542B5400      PUSH 542B54
0B21489D   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
0B2148A3   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148A4   EB 01            JMP SHORT 0B2148A7

这里的代码涉及到 Aspr抽掉的代码(stolen),但与寻找OEP没关系。先把它拷贝下来复制到一个文本文件。0B2148A4   后跳转到:

0B2148A7   50               PUSH EAX
0B2148A8   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0B2148AF   83EC 58          SUB ESP,58
0B2148B2   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148B3   EB 01            JMP SHORT 0B2148B6

0B2148B6   53               PUSH EBX
0B2148B7   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148B8   EB 01            JMP SHORT 0B2148BB

0B2148BB   56               PUSH ESI
0B2148BC   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148BD   EB 01            JMP SHORT 0B2148C0

0B2148C0   57               PUSH EDI
0B2148C1   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
0B2148C4   3E:EB 01         JMP SHORT 0B2148C8                       ; 多余的前缀

这些代码都涉及到 Aspr抽掉的代码(stolen),都要拷贝下来复制到文本文件。

单步继续跟踪到

0B2148CC   68 3BF05300      PUSH 53F03B
0B2148D1   68 7247210B      PUSH 0B214772
0B2148D6   C3               RETN

这里 53F03B 就是原来程序被Aspr修改过的入口点,这不是真正的入口点。
0B2148D6 处RETN后,到

0B214775   51               PUSH ECX
0B214776   57               PUSH EDI
0B214777   9C               PUSHFD
0B214778   FC               CLD
0B214779   BF B647210B      MOV EDI,0B2147B6
0B21477E   B9 5E140000      MOV ECX,145E
0B214783   F3:AA            REP STOS BYTE PTR ES:[EDI]
0B214785   9D               POPFD
0B214786   5F               POP EDI
0B214787   59               POP ECX
0B214788   C3               RETN

这段代码是用来把 Aspr的自解压代码清除的(不留痕迹!)。
F7执行到0B214788 处返回到0053F03B,(在0B214783处可F8)

0053F03B   FF15 DCD15400    CALL DWORD PTR DS:[54D1DC]
0053F041   33D2             XOR EDX,EDX
0053F043   8AD4             MOV DL,AH
0053F045   8915 10AF8B08    MOV DWORD PTR DS:[88BAF10],EDX

这里0053F03B可不是程序真正的入口点,:)

在Ollydbg里CPU窗口向上滚动,

0053F00B   8B62 10          MOV ESP,DWORD PTR DS:[EDX+10]
0053F00E   83C4 04          ADD ESP,4
0053F011   FF62 14          JMP DWORD PTR DS:[EDX+14]
0053F014   C3               RETN
0053F015   0000             ADD BYTE PTR DS:[EAX],AL
0053F017   0000             ADD BYTE PTR DS:[EAX],AL
0053F019   0000             ADD BYTE PTR DS:[EAX],AL
0053F01B   0000             ADD BYTE PTR DS:[EAX],AL
0053F01D   0000             ADD BYTE PTR DS:[EAX],AL
0053F01F   0000             ADD BYTE PTR DS:[EAX],AL
0053F021   0000             ADD BYTE PTR DS:[EAX],AL
0053F023   0000             ADD BYTE PTR DS:[EAX],AL
0053F025   0000             ADD BYTE PTR DS:[EAX],AL
0053F027   0000             ADD BYTE PTR DS:[EAX],AL
0053F029   0000             ADD BYTE PTR DS:[EAX],AL
0053F02B   0000             ADD BYTE PTR DS:[EAX],AL
0053F02D   0000             ADD BYTE PTR DS:[EAX],AL
0053F02F   0000             ADD BYTE PTR DS:[EAX],AL
0053F031   0000             ADD BYTE PTR DS:[EAX],AL
0053F033   0000             ADD BYTE PTR DS:[EAX],AL
0053F035   0000             ADD BYTE PTR DS:[EAX],AL
0053F037   0000             ADD BYTE PTR DS:[EAX],AL
0053F039   0000             ADD BYTE PTR DS:[EAX],AL
0053F03B   FF15 DCD15400    CALL DWORD PTR DS:[54D1DC]
0053F041   33D2             XOR EDX,EDX
0053F043   8AD4             MOV DL,AH
0053F045   8915 10AF8B08    MOV DWORD PTR DS:[88BAF10],EDX

大家看到了吧,从0053F015 到 0053F03B 的代码段为空!大家一定都很聪明,猜到
0053F015 才是真正的 OEP !

3。第二步,恢复被Aspr 偷走的代码

看一下我们刚才拷贝到文本框里的代码段

0B21488E   55               PUSH EBP
0B21488F   8BEC             MOV EBP,ESP
0B214891   6A FF            PUSH -1
0B214893   68 48E95400      PUSH 54E948
0B214898   68 542B5400      PUSH 542B54
0B21489D   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
0B2148A3   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148A4   EB 01            JMP SHORT 0B2148A7
0B2148A7   50               PUSH EAX
0B2148A8   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0B2148AF   83EC 58          SUB ESP,58
0B2148B2   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148B3   EB 01            JMP SHORT 0B2148B6
0B2148B6   53               PUSH EBX
0B2148B7   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148B8   EB 01            JMP SHORT 0B2148BB
0B2148BB   56               PUSH ESI
0B2148BC   F2:              PREFIX REPNE:                            ; 多余的前缀
0B2148BD   EB 01            JMP SHORT 0B2148C0
0B2148C0   57               PUSH EDI
0B2148C1   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
0B2148C4   3E:EB 01         JMP SHORT 0B2148C8     

把跳转指令和前缀去掉后就是

0B21488E   55               PUSH EBP
0B21488F   8BEC             MOV EBP,ESP
0B214891   6A FF            PUSH -1
0B214893   68 48E95400      PUSH 54E948
0B214898   68 542B5400      PUSH 542B54
0B21489D   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
0B2148A7   50               PUSH EAX
0B2148A8   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0B2148AF   83EC 58          SUB ESP,58
0B2148B6   53               PUSH EBX
0B2148BB   56               PUSH ESI
0B2148C0   57               PUSH EDI
0B2148C1   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP

被偷走的字节序列为
558bec6aff6848E9540068542B540064A100000000506489250000000083EC585356578965e8
共38个字节,而 0x0053F03B-0x0053F015 = 0x26, 0x26 = 38,呵呵,正好是被Apsr偷走的字节长度。

先把558bec6aff6848E9540068542B540064A100000000506489250000000083EC585356578965e8拷贝到剪贴版,在Ollydbg里选择从0053F015到0053F03B的代码段,然后点右键选择二进制里的二进制粘贴,就把被偷走的代码恢复了。

恢复后的代码段为

0053F014   C3               RETN
0053F015   55               PUSH EBP
0053F016   8BEC             MOV EBP,ESP
0053F018   6A FF            PUSH -1
0053F01A   68 48E95400      PUSH 54E948
0053F01F   68 542B5400      PUSH 542B54
0053F024   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
0053F02A   50               PUSH EAX
0053F02B   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
0053F032   83EC 58          SUB ESP,58
0053F035   53               PUSH EBX
0053F036   56               PUSH ESI
0053F037   57               PUSH EDI
0053F038   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
0053F03B   FF15 DCD15400    CALL DWORD PTR DS:[54D1DC]
0053F041   33D2             XOR EDX,EDX
0053F043   8AD4             MOV DL,AH
0053F045   8915 10AF8B08    MOV DWORD PTR DS:[88BAF10],EDX
0053F04B   8BC8             MOV ECX,EAX
0053F04D   81E1 FF000000    AND ECX,0FF
0053F053   890D 0CAF8B08    MOV DWORD PTR DS:[88BAF0C],ECX
0053F059   C1E1 08          SHL ECX,8
0053F05C   03CA             ADD ECX,EDX

入口点和被偷走的代码恢复后,就是的工作就是Dump程序和恢复引入表的工作了。

4。将恢复后的程序从内存Dump下来

如果装了Ollydump插件,可以直接在插件菜单里选OllyDump,在弹出的对话框里
去掉Rebuild Import选项,我们不要使用它的恢复引入表的功能,低版本的Ollydump插件没有这项选项。

在Modify框里 输入正确的OEP,13F015(这里是偏移,53F015-40000=13f014),接着我们要修改几个段的属性

段表里的项为
Section | VirtualSize | Virtual Offset | Raw Size | Raw Offset | Charactaristics
          0014c000       00001000        0014c000    00001000     C0000040   
          00006000       0014D000        00006000    0014d000     C0000040
          0836A000       00153000        0836A000    00153000     C0000040
.rsrc     00003000       084bd000        00003000    084bd000     C0000040
.data     00012000       084C0000        00012000    084C0000     C0000040
.adata    00001000       084D2000        00001000    084D2000     C0000040
        
修改后段表为

Section | VirtualSize | Virtual Offset | Raw Size | Raw Offset | Charactaristics
.code     0014c000       00001000        0014c000    00001000     E0000060   
.rdata    00006000       0014D000        00006000    0014d000     40000040
.data     0836A000       00153000        0836A000    00153000     C00000C0
.rsrc     00003000       084bd000        00003000    084bd000     C0000040
.data     00012000       084C0000        00012000    084C0000     C0000040
.adata    00001000       084D2000        00001000    084D2000     C0000040
   
主要是修改前三个段的属性,取个名字,并修正段的属性,否则程序运行会出问题。

完成这些后,按Dump取文件名Main2.exe保存,由于这个程序分配的虚拟空间较大,所以初始保存下来的文件静像也会很大。

如果没有Ollydump插件,也可以用LordPe等工具Dump,注意的是也要修正OEP和段的属性。

5。恢复引入表

这是最重要的一步了。记住,保持Ollydbg的状态,不要继续运行,也不要退出。

运行ImPortRec1.6,怎么使用它请大家参考其使用说明,我只描述具体步骤。

1) 选择要获取的激活的进程Main.exe
2) 在IAT需要的信息处的OEP里填13F015,然后按自动搜索IAT, ImportRec会自动找到可能的IAT,并在RAV框里显示出其偏移地址
3) 按获取输入表后,在上面的输入函数列表框里会显示出找到的输入函数,
4) 选择 显示非法函数,ImportRec会选中无效的RAV项,先在这些选中的无效项里点右键选择跟踪层次1,   ImportRec会恢复大部分Rav项,
5) 再次选择 显示非法函数,在剩下的无效RAV项上点右键,在谈出的菜单里选插件跟踪的子菜单里的ASProtect1.22,ImportRec 会恢复所有剩下的无效的RAV项。
6) 在新的输入信息组里 去掉增加新块的选项,在RAV里填入左边RAV里的值0014D000,这是为了覆盖原来的IAT表。
7)选择修复抓取文件选中Main2.exe进行修复!

恭喜恭喜,Main2.exe的Import表修复了!

但是这时的Main2.exe还太臃肿,这是因为
它的有个段
.data   0836A000       00153000        0836A000    00153000     C00000C0
太大,但其中大部分为空值。

6。减肥!
  
  运行LordPe,用它里面的Rebuilder功能对Main2.exe进行减肥!

    呵呵减肥后的程序为1462K, 大功告成!
2004-8-3 21:19
0
雪    币: 201
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
楼主真的是辛苦了!谢了
2004-8-3 21:31
0
雪    币: 123
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
大哥,真是热心啊
2004-8-3 21:36
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
49
asprotect版本多,升级快,每一次小小的升级,都足以使以前的脱壳方法或工具失效,没有一种自动脱壳工具是万能的。这里是caspr的作者SAC/UG2000对asprotect的评价:  
ASProtect是一个非常强大的win32保护工具。它拥有压缩(compression)、加密(encryption)、反跟踪代码(anti-debugging code)、反-反汇编代码(anti-disassembler code)、crc校验(crc checking),反脱壳(anti-dumping)等特点。它使用了
Blowfish,Twofish,TEA等强劲的加密算法,还用RSA1024 - 非常强劲的公钥加密算法 (very strong public keys cryptographic algorithm )- 作为注册密钥生成器(sregistration keys
generation)。(注:公钥加密算法属于非对称密钥算法体制,与对称密钥体制相对。)它还通过API钩子(API hooks,包括importhooks(GPA hook)和export hooks)与加壳的程序进行通讯。
ASProtect v1.1甚至 用到了 Win95.Marburg's 多态变形引擎(polymorphic engine)。
ASProtect v1.11c 增加了 反Apihook代码(anti-Apihook code(stolen from Win32.Crypto)) 和BPE32 的多态变形引擎(BPE32's polymorphic engine.)。
现在的大问题是:ASProtect究竟是一个超级病毒还是一个商业软件?(Is it a super virus or a commercial protector?)
怎么样,是不是已经对asprotect望而生畏了?  
因此我对asprotect的作者Alexey Solodovnikov(从名字看应该是个俄国人)非常钦佩。不过不用怕。
公欲善其事,必先利其器。  
要脱asprotect加的壳,似我等菜鸟,只能使用工具。我的工具箱里有:  
fi243,检测文件壳的类型
trw1.23,不用多说;
bw2k02,冲击波2000,用来找入口点EP;
SuperBPM,辅助设断工具,确保trw能够中断成功;
peditor,修正脱壳后的文件;
ImportREC1.2beta2,用来修复脱壳后文件的import表;
此外还有专用自动脱壳工具,如rad,caspr等。
实在不行,脱不下来或脱下来不能用,只有用内存补丁了。我推荐ppatcher3.93,比常见的3.60版增加了许多有用的新特性,如aitForWindowName,下面会讲到。URL未知,我是从作者那里直接获得的。  
我的运行环境是win98第二版,没有安装softice。  
概括一下一般的脱壳步骤:  
第一步,用fi243确定壳的类型,有自动脱壳工具的,用工具脱。否则第二步。  
第二步,用bw2k确定程序的真正入口点OEP,不妨记为xxxx;若找不到,请试一试Softice + icedump: 使用Icedump 的/tracex 命令可能找到OEP 的地址;若还找不到,只能手动跟踪,看你的功力和运气了。
第三步,用trw装入(load)程序,下bpx xxxx,g。中断后用pedump命令脱壳,格式是
pedump c:\test\test.exe。不能中断时运行superbpm,选中erase,重复第三步操作。若脱出来的test.exe可以运行,则脱壳完毕,否则第四步。
第四步, 用peditor 修正test.exe,用Import REConstructor v1.2 beta2修复输入表,参照以下这篇文章
若还是不行,建议你用内存补丁或放弃暴破,去算注册号吧。  
以下以S-Spline 2.04为例,讲一讲手动脱壳和修复import表的具体操作步骤。S-Spline 2.04
第一步,用fi243确定壳的类型。fi243没有GUI界面,是命令行程序,用法是这样:  
c:\fi243\fi s-spline.exe。
Fi已经检测不出新版asprotect了,所以如果遇到检测不出的类型,就有可能是asprotect。接着往下做吧。  
第二步,用bw2k确定程序的真正入口点OEP,  
运行bw2k,面板上的entry point显示为00000000。按track钮,再运行s-spline.exe,程序界面出来之后,bw2k的面板上entry point显示为7e910,这就是入口点了。退出s-spline,我们又迈出了可喜的第二步。
第三步,运行SuperBPM,选中erase(默认为不选中),确保trw能够中断。  
第四步,运行trw2k,按browse找到并选中s-spline.exe,按loader装入。下bpx 47e910,g。trw弹出时输入pedump c:\test\test.exe,退出trw(不退也行),但不要退出s-spline。在c:\test下会找到test.exe。这个程序目前还不能运行,因为它的import表是被加密的。
第五步,用peditor修正test.exe。运行peditor,按browse找到test.exe,确定。再按sections,弹出一个窗口,显示每个section的信息。在窗口中点右键,在弹出菜单中选dumpfixer(RS=VS & RO=VO),提示'DONE',这时可以关闭peditor了。
第六步,运行ImportREC1.2beta2,在Attach to an Active Process下拉框中选中s-spline.exe,然后在左下方OEP中输入7e910(就是EP-image base=47e910-400000),按IAT AutoSearch。出现对话框Found Something!=》
“Found address which may be in the Original IAT.Try 'Get Import'”
按Get Import,再按Show Invalids 按钮,在Imported Function Found框中会有很多蓝色的项目。在其中点右键,选Trace Level1(Disasm),再按Show Invalids 按钮,可以看到所有的dll都为valid:YES字样。输入表到此完成。
第七步,修复已脱壳的程序test.exe。选择Add new section(缺省是选上的),按Fix Dump,并选择刚才Dump出来的文件test.exe。ImpRECT 会在该文件所在目录生成一个新的文件:test_.exe ,这就是修复后的文件。至此终于大功告成,点击test_.exe可以运行了。
在遇到asprotect之前,procdump一直是我最爱的脱壳工具,它能脱的壳很多,操作方便,稳定性好,很少令我失望。直到那一次,一连碰到三个asprotect加壳的软件:  
Aspack2.11,加壳软件,asprotect 1.1b 加壳,未注册版有时间限制和功能限制;以前的下载地址找不到了,今天找到一个带破解文件的,URL: cc2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2#2k6q4)9J5k6i4y4*7i4K6u0W2K9Y4y4A6L8X3k6G2i4K6u0W2L8X3g2@1i4K6u0r3M7r3g2J5i4K6u0r3j5h3q4J5L8$3&6Q4x3V1k6X3K9h3I4W2M7#2)9J5c8X3y4G2L8i4m8J5k6i4y4K6L8%4u0K6i4K6u0r3N6$3W2F1i4K6u0r3j5i4y4H3j5h3y4C8x3U0p5I4i4K6u0W2P5X3W2H3i4@1f1K6i4K6R3H3i4K6R3J5  
Picturetoexe2.30,图片转可执行文件工具,asprotect 1.0 加壳,未注册版制作出得文件有公司标志;4c9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6F1M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3q4H3M7R3`.`.  
Advanced ZIP Password Recovery3.51(azpr),zip密码恢复工具,asprotect 1.1 加壳;未注册版只能破解5位以下密码。bddk6Y4c8H3i4K6y4m8i4K6u0r3i4K6u0r3N6%4N6%4i4K6u0W2L8X3g2%4K9s2g2S2i4K6u0W2j5$3!0E0i4K6u0r3j5i4A6H3M7W2)9J5k6i4A6A6M7l9`.`.  
有兴趣的不妨试一试,练练手。  
那段时间好痛苦啊。找不到真正的入口点(OEP),中断不了,壳脱不下来,脱下来的又不能运行,真是往事不堪回首。到现在也还谈不上破解,只是想把自己的一点经验写出来,希望弟兄们看了能少走点弯路。  
提示:  
Aspack用上述方法脱壳修复后,运行时显示  
Exception EaccessViolation in module ASPACK_.EXE at 007fb318.
Access violation at address bfc54c.Read of addreds bfc54c.
不能运行。失败。但是可以用rad06(17cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2#2k6q4)9J5k6i4y4*7i4K6u0W2K9Y4y4A6L8X3k6G2i4K6u0W2L8X3g2@1i4K6u0r3M7r3g2J5i4K6u0r3j5h3q4J5L8$3&6Q4x3V1k6X3K9h3I4W2M7#2)9J5c8Y4g2F1M7r3q4U0K9$3g2J5M7#2)9J5c8Y4N6A6L8W2)9J5c8Y4u0S2k6q4)9#2k6Y4j5H3y4W2)9J5k6i4A6A6M7l9`.`.)成功脱壳,脱壳后自动去掉时间限制,但仍为未注册版。  
Picturetoexe2.30用上述方法脱壳失败,impREC修复的程序运行时提示非法操作。用caspr v0.952脱壳成功。
Azpr用上述办法修复成功,文件可以运行,但对其进行修改后,提示找不到api函数,不能运行。无奈只能用内存补丁ppatcher3.93。这里有thewd提供的破解方法。  
首先在注册表中添加如下内容  
[HKEY_LOCAL_MACHINE\Software\Elcom\Advanced ZIP Password Recovery\Registration]
"Code"="00023112193920061941tcKxzxKUhzLjuAAD"  
以下是ppatcher配置文件(.ppc)的内容。  
-------------------------------------------------------------------  
#Process Patcher Configuration File
Version=3.93  
WaitForWindowName=AZPR*  
PatchAuthor=thewd  
PatchContactInformation=thewd@hotmail.com  
DisplayName=Advanced ZIP Password Recovery v3.51
Filename=azpr.exe  
Filesize=294912  
Address=0x416CE7:0x89:0x8B // (1)
Address=0x416CE8:0xC8:0xC2  
#End of Configuration File
#Cracking Notes
(1) Registration Code Example: 00023112193920061941tcKxzxKUhzLjuAAD
First 4 characters are ignored.
Next 16 characters are constant (MD5 Hash)
Last 16 characters are hashed (MD5) and compared against

the resource 'DB' for a match.
i.e.  
mov eax, ecx (Bad Code) ==> mov eax, edx (Correct Code)
---------------------------------------------------------------------  
建议大家去03fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3g2^5k6i4c8G2L8$3I4K6i4K6u0W2j5$3!0E0i4@1f1%4i4K6W2o6i4K6S2n7i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1%4i4K6W2o6i4K6S2n7i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1t1%4i4@1p5#2i4@1f1#2i4K6R3#2i4@1t1%4i4@1f1#2i4@1u0q4i4K6R3^5i4@1f1#2i4@1p5@1i4K6W2m8i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6W2n7i4@1t1@1i4@1f1$3i4K6V1$3i4@1t1H3i4@1f1#2i4@1u0q4i4K6R3^5i4@1f1#2i4@1u0r3i4@1q4n7i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1@1i4@1u0n7i4K6S2m8i4@1f1$3i4K6V1&6i4K6W2m8i4@1f1$3i4K6R3&6i4@1u0q4i4@1f1#2i4K6R3^5i4@1t1H3j5$3q4K6M7s2t1I4i4K6u0W2x3o6p5J5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1u0r3i4K6V1^5i4@1f1$3i4@1t1J5i4@1p5I4i4@1f1$3i4K6W2p5i4@1p5#2i4@1f1#2i4@1u0q4i4K6V1%4i4@1f1#2i4K6S2r3i4K6S2m8i4@1f1^5i4@1q4r3i4K6V1#2i4@1f1K6i4K6R3H3i4K6R3J5  
革命尚未成功,同志仍需努力。  
不要仅仅满足于几个软件的破解,应该立志做出更多更好的工具来,跟老外们一争高下。
2004-8-3 21:56
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
50
Keymake使用

ab3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3!0D9k6q4)9J5k6h3c8V1N6X3W2H3i4K6u0W2L8X3g2@1i4K6u0r3K9X3#2B7L8g2)9J5c8X3#2W2L8X3c8Q4x3V1j5I4x3q4)9J5k6h3S2@1L8b7`.`.
2004-8-3 22:10
0
游客
登录 | 注册 方可回帖
返回