本书全面分析软件防护技术,系统阐述防范非法复制的解决方案。首先介绍解密工具、软件保护的基本类型、光盘保护策略、免费软件和共享件以及商业软件保护程序。然后论述防范SoftICE和TRW的反调试、反-反汇编策略;分析断点、跟踪程序和调试程序的检测方法。最后介绍Windows的重要结构和一些软件保护编写规则。本书是最新软件防护技术的结晶,适合那些从事软件保护工作和商业软件开发的技术人员,也适合从事软件保护研究的相关人员。
特色:
●全面介绍各种最新的实用软件保护技术
●能够实实在在的提供程序员的软件保护水平
●语言流畅并提供示例代码和各种免费资源
第1章 开篇 1
1.1 解密者的动机 1
1.2 解密方法:调试程序和反汇编程序 1
1.2.1 调试程序 1
1.2.2 反汇编程序 2
1.2.3 反编译程序 2
1.3 常见的保护故障 2
第2章 解密工具 3
2.1 认识SoftICE 4
2.1.1 键盘命令 5
2.1.2 BPX命令 6
2.1.3 BPR开关 6
2.1.4 BPM开关 6
2.1.5 显示命令 7
第3章 软件保护的基本类型 8
3.1 注册号保护 8
3.1.1 注册号保持不变 8
3.1.2 注册号因输入信息而异 9
3.1.3 注册号因用户计算机而异 10
3.1.4 Visual Basic程序中的注册号保护 11
3.1.5 在线检查注册号 14
3.2 限期程序 16
3.2.1 一旦输入正确注册号就解除时间限制 16
3.2.2 一旦输入注册文件就解除时间限制 17
3.2.3 时间限制不能解除 18
3.2.4 时间限制包含在Visual Basic程序中 18
3.2.5 将时间限制应用于确定的启动次数 19
3.3 注册文件保护 19
3.3.1 若无正确注册文件,则阻止一些程序功能 19
3.3.2 若无正确注册文件,则对程序执行时间限制 20
3.4 硬件密钥保护 20
3.4.1 若无硬件密钥,则不能启动程序 21
3.4.2 若无硬件密钥,则限制一些功能 22
3.4.3 HASP硬件密钥 23
3.4.4 Sentinel硬件密钥 28
第4章 光盘保护策略 30
4.1 光盘保护软件 31
4.1.1 CD-Cops 31
4.1.2 DiscGuard 32
4.1.3 LaserLock 32
4.1.4 SafeCast 32
4.1.5 SafeDisc 33
4.1.6 SecuROM 35
4.1.7 VOB 35
4.2 其他光盘保护策略 36
4.2.1 光盘含74分钟以上的数据 37
4.2.2 受损的TOC 37
4.2.3 光盘包含大型文件 37
4.2.4 光盘含物理错误 38
4.2.5 光盘含若干个大型文件 38
4.2.6 限制所选程序功能的演示 38
第5章 程序压缩和编码:免费软件和共享件 40
5.1 aPLib 40
5.2 ASPack 40
5.3 Ding Boy’s PE-Crypt 42
5.4 NeoLite 44
5.5 NFO 46
5.6 PECompact 47
5.7 PELOCKnt 48
5.8 PE-Crypt 49
5.8.1 手动删除 52
5.8.2 创建一个加载器 52
5.8.3 PE-Crypt选项 52
5.8.4 PE-Crypt小结 53
5.9 PE-SHiELD 54
5.10 Petite 55
5.11 Shrinker 56
5.12 UPX 56
5.13 WWPack32 57
第6章 商业软件保护程序 59
6.1 ASProtect 59
6.2 FLEXlm 63
6.3 InstallShield 64
6.4 ShareLock 66
6.5 Armadillo软件保护系统 66
6.6 Vbox 68
6.6.1 TimeLock 3.03到3.10 69
6.6.2 TimeLock 3.13到3.15 69
6.6.3 Vbox 4.0到4.03 69
6.6.4 Vbox 4.10 70
6.6.5 Vbox 4.3 70
6.6.6 SVKP 71
第7章 用于防范SoftICE和TRW的反调试、反-反汇编及其他策略 75
7.1 通过调用INT 68h检测SoftICE 76
7.2 通过调用INT 3h检测SoftICE 78
7.3 通过搜索内存检测SoftICE 81
7.4 通过打开SoftICE驱动程序并调用API函数CreateFileA(SICE, NTICE)
来检测SoftICE 83
7.5 通过测量INT 1h和INT 3h服务之间的距离检测SoftICE 87
7.6 通过打开SoftICE驱动程序并调用API函数CreateFileA(SIWVID)
来检测SoftICE 89
7.7 通过调用nmtrans.dll库的NmSymlsSoftICELoaded DLL函数检测
SoftICE 90
7.8 通过识别SoftICE的INT 68h服务来检测SoftICE 93
7.9 通过检测INT 41h服务的更改来检测SoftICE 94
7.10 通过打开SoftICE驱动程序并调用API函数CreateFileA(SIWDEBUG)
来检测SoftICE 96
7.11 通过调用INT 2Fh及其函数GET DEVICE API ENTRY POINT检测
SoftICE (查找VxD ICE) 98
7.12 通过调用INT 2Fh及其函数GET DEVICE API ENTRY POINT检测
SoftICE (查找VxD SIWVID) 103
7.13 使用前缀为LOCK的CMPXCHG8B指令 108
7.14 通过VxDCall检测SoftICE 111
7.15 通过DR7调试寄存器查找活动的调试程序 114
7.16 通过Kernel32!ORD_0001并调用VxDCalls检测SoftICE 116
7.17 通过Windows注册表找出SoftICE的安装目录 121
7.18 通过Int 1h和Int 3h服务之间的距离检测TRW 124
7.19 通过调用API函数CreateFileA(TRW)打开TRW驱动程序来检测
TRW 126
7.20 启动SoftICE接口的BCHK命令 127
7.21 通过调用Int 3h检测TRW 132
7.22 通过调用API函数CreateFileA(SIWVIDSTART)打开SoftICE驱动
程序来检测 SoftICE 135
7.23 通过调用API函数CreateFileW(NTICE, SIWVIDSTART)打开SoftICE
驱动程序来检测SoftICE 137
7.24 通过调用API函数Function_lcreat(SICE, NTICE, SIWVID,
SIWDEBUG, SIWVIDSTART)打开SoftICE驱动程序来检测SoftICE 140
7.25 通过调用API函数Function_lopen(SICE, NTICE, SIWVID,
SIWDEBUG, SIWVIDSTART)打开SoftICE驱动程序来检测SoftICE 142
7.26 反FrogsICE策略 143
7.27 通过在UnhandledExceptionFilter查找指令Int 3h来检测SoftICE 147
7.28 通过Int 1h检测SoftICE 149
第8章 防止断点、跟踪程序和调试程序 152
8.1 通过Trap标志检测跟踪程序 152
8.2 通过查找Int 3h检测断点 154
8.3 通过CRC测试断点 157
8.4 检测调试断点 163
8.5 检测用户调试程序 165
8.6 通过API函数IsDebuggerPresent检测用户调试程序 167
第9章 其他保护策略 170
9.1 API挂钩检测 170
9.2 反ProcDump策略 173
9.3 将运行程序从ring3切换到ring0 176
9.3.1 通过LDT切换到ring0 176
9.3.2 通过IDT切换到ring0 179
9.3.3 通过SEH切换到ring0 181
9.4 反-反汇编宏 184
9.4.1 最简单方法 185
9.4.2 相似方法 185
9.4.3 更进一步 186
9.4.4 想象无极限 186
9.4.5 跳转至指令中间并使代码更难理解 186
9.5 在解码前测试解压缩试图 188
9.6 用API函数MapFileAndCheckSumA测试文件校验和 188
9.7 PE文件.code节的特性更改 188
9.8 查找监视程序 189
9.9 惩罚解密者之策 191
第10章 Windows中的重要结构 193
10.1 上下文结构 193
10.2 Windows NT可执行文件 196
10.3 对象表 202
10.4 节类型 204
10.4.1 代码节 204
10.4.2 数据节 205
10.4.3 BSS节 205
10.4.4 导出符号 205
10.4.5 导入符号 206
10.4.6 资源 208
第11章 软件防护建议 210
11.1 编写软件保护的原则 210
11.2 最新信息 213
术语表 214
本书全面介绍软件防护,内容丰富,涵盖面广,涉及许多前所未有的主题。若您编写自己的软件又想防止软件被非法复制,或创建免费软件又希望保护源代码,那么,本书将是您的理想选择。
目前,很难找到关于软件防护的书籍,更难获得有关软件保护的全面信息。在前捷克斯洛伐克共和国参加游戏产品开发时,我惊奇地发现,由于缺乏该领域的信息和经验,其软件保护非常简陋,有时根本不设防护。最终,他们的产品蒙受了巨大经济损失。
保护的制止作用
无论软件保护多么周密,解密者最终也能破解。软件保护是一种缓兵之策,可起到延缓及制止作用。
若保护制止力度大,成为网上免费(已破解)软件的时间便会后延,您就可以利用这个时间段销售更多产品。假如不采取任何保护措施,那么,程序或游戏(共享件或商业软件)在发布当天就可能被盗取,销售量必定大打折扣。
防止保护被正确解除是一种非常有效的方法,这将使盗版软件不能运行,或不能正确运行,由此增加了原始副本的购买人数。虽然解密者最终能够成功,但拖延时间就等于赚取利润。上好方案是尽量延长停滞时间,造成几种解密版本出现,其中一些不能正确运行。在这种情况下,很多铁杆盗版者也可能就此作罢,花钱购买原版软件,免于无休止的激战。
使用汇编程序
本书列举了很多防止调试、反汇编或反编译应用程序实例。源代码中添加了注释,以方便读者理解。所有实例都用汇编语言写成,而未使用其他高级语言。原因有以下几点:
● 若使用C++之类的高级语言,会将其他高级语言用户拒于门外。
● 若使用Visual Basic,大多数实例的代码将无法编写。
● 即使C++代码也有一些是用汇编语言写成的。
另外,您可将汇编代码直接插入C++和Delphi代码,换言之,汇编程序实例可用于这两种语言。汇编代码不能直接插入Visual Basic,不过,编程人员可将代码插入在另一编程语言(汇编、C++或Delphi)创建的库,然后从应用程序代码调用该库。
发布解密者策略
本书资料大多来源于解密者的Web页。
软件防护及解密信息是一把双刃剑。可用作开发人员编写保护的工具,也可用作解密者破解保护的利器。本书的读者对象是前者,原因有:
● 开发人员通常不具备充足资源,需要为他们提供一本权威技术书籍,帮助他们获得及时准确的信息,从而立足技术前沿。防止因信息不畅,开发过时的保护策略,最终无功而返,空耗人力财力。
● 解密者信息来源广,若解密者了解破除某种保护的方法,迟早也会在专用Web页上发布详细技术信息。对他们而言,本书并不非常重要。
● 解密者可创建出极好的软件保护,因为他们消息灵通,经验丰富。如能化害为利,软件业的未来必更加光明。若能如此,我们将感到无比荣幸。