|
第1章 软件加密综述........................ 1 |
|
1.1 软件加密的发展历史..................................................... 2
1.2 软件加密方式的确定因素............................................... 5
1.3 软件保护的应用模式..................................................... 7
1.4 软件加密的误区........................................................... 9
1.5 软件加密的代价.......................................................... 11 |
|
第2章 方法................................13 |
|
2.1 密码表...................................................................... 13
2.2 软盘加密................................................................... 14
2.2.1 软盘的构造和原理.................................................... 14
2.2.2 软盘驱动器的结构原理.............................................. 19
2.2.3 软盘控制器............................................................. 23
2.2.4 终极软盘控制方法——直接I/O....................................27
2.2.5 软盘加密技术与技巧................................................. 39
2.3 电子注册................................................................... 44
2.3.1 用户名/密码............................................................ 45
2.3.2 计算机信息............................................................. 46
2.3.3 Key file或License file............................................. 48
2.4 光盘加密................................................................... 48
2.4.1 光盘的构造和原理.................................................... 48
2.4.2 常见的光盘加密方法................................................. 50
2.4.3 光盘加密的缺点....................................................... 54
2.5 硬件加密................................................................... 54
2.5.1 硬件加密的发展史.................................................... 54
2.5.2 硬件加密的原理....................................................... 55
2.5.3 市面上常见的加密锁................................................. 55 |
|
第3章 破解................................56 |
|
3.1 了解解密者................................................................ 56
3.1.1 解密者的心态.......................................................... 56
3.1.2 解密者的水平.......................................................... 58
3.1.3 解密者的思路.......................................................... 58
3.2 Patch,Serial和KeyMaker——地下世界的规则............. 59
3.2.1 文件补丁(File Patch)........................................... 60
3.2.2 内存补丁(Memory Patch).................................... 61
3.2.3 序列码(Serial Number)....................................... 61
3.2.4 注册机(Key Maker)............................................. 62
3.3 另类破解................................................................... 63
3.3.1 内存快照................................................................ 63
3.3.2 暴力破解................................................................ 66
3.3.3 溢出攻击................................................................ 67
3.4 解密者的工作流程....................................................... 68
3.4.1 研究保护方法.......................................................... 68
3.4.2 脱壳...................................................................... 68
3.4.3 辨别开发工具.......................................................... 68
3.4.4 静态分析................................................................ 70
3.4.5 动态分析................................................................ 71
3.4.6 解密工具................................................................ 72
3.4.7 反编译................................................................... 72
3.5 软件保护的薄弱环节.................................................... 73
3.5.1 软件的安装与卸载.................................................... 73
3.5.2 软件调用动态链接库................................................. 73
3.5.3 暴露信息的系统API调用............................................ 74
3.5.4 一个被放大的加密点................................................. 75
3.5.5 加密点的安排.......................................................... 76 |
|
第4章 语言............................... 77 |
|
4.1 解释与编译................................................................ 77
4.1.1 编译...................................................................... 78
4.1.2 解释...................................................................... 79
4.1.3 编译型语言............................................................. 80
4.1.4 解释型语言............................................................. 80
4.2 永远的汇编语言.......................................................... 81
4.2.1 各代微处理器的寄存器的区别..................................... 81
4.2.2 存储器寻址的实地址方式和保护虚拟地址方式................ 86
4.2.3 寻址方式概述.......................................................... 92
4.2.4 常用指令概述.......................................................... 96
4.3 Java代码的保护....................................................... 103
4.3.1 类文件格式........................................................... 104
4.3.2 Java虚拟机.......................................................... 106
4.3.3 Java的安全性....................................................... 110
4.3.4 Java类文件的保护................................................. 111
4.4 虚拟机保护策略........................................................ 123
4.4.1 虚拟计算机简介..................................................... 123
4.4.2 虚拟机保护策略的具体实现...................................... 126
4.4.3 如何用TINY来保护软件........................................... 138 |
|
第5章 外壳.............................. 144 |
|
5.1 什么是外壳.............................................................. 144
5.2 与壳有关的技术........................................................ 145
5.3 PE基础知识............................................................. 149
5.3.1 WIN32可执行程序的加载....................................... 150
5.3.2 虚拟地址.............................................................. 150
5.3.3 RVA.................................................................... 150
5.3.4 导出函数表........................................................... 150
5.3.5 引入函数表及引入函数地址表................................... 151
5.3.6 Section及Section表............................................. 151
5.3.7 编译器、Obj文件................................................... 152
5.3.8 链接器、Lib文件.................................................... 152
5.3.9 WIN32 ASM......................................................... 152
5.3.10 调用方式............................................................. 153
5.3.11 局部变量全局变量................................................. 155
5.3.12 PE文件头............................................................ 155
5.4 加壳与脱壳............................................................... 168
5.4.1 壳的识别............................................................... 168
5.4.2 使用ProcDump实现自动脱壳................................... 170
5.4.3 找入口点(OEP).................................................. 170
5.4.4 引入表修复............................................................ 173
5.4.5 打造自己的外壳...................................................... 178
5.5 实战自己的外壳......................................................... 178
5.5.1 PEMaker使用....................................................... 178
5.5.2 指针、函数指针...................................................... 184
5.5.3 在程序启动前添加MessageBox............................... 185
5.5.4 在启动时做更多的事................................................ 186
5.5.5 Windows程序入口................................................ 187
5.5.6 壳的入口函数........................................................ 190
5.5.7 置换引入函数表实现Hook ExitProcess.................... 196
5.5.8 代码、数据........................................................... 197
5.5.9 对代码进行异或加密............................................... 199
5.5.10 壳内自检............................................................ 202
5.5.11 基址重定位......................................................... 206
5.6 关于壳的扩充........................................................... 225
5.6.1 规避防毒软件........................................................ 225
5.6.2 增加区块.............................................................. 225
5.6.3 增加程序引用的动态库............................................ 225
5.6.4 在壳中应用线程..................................................... 226
5.6.5 定时访问加密锁..................................................... 227
5.6.6 利用Sleep实现定时检测......................................... 227
5.6.7 WndProc Hook简易法.......................................... 228
5.6.8 在壳中应用C++.................................................... 228 |
|
第6章 信息.............................. 232 |
|
6.1 如何获得用户的身份................................................. 232
6.2 什么样的信息是我们需要的........................................ 233
6.2.1 获取网卡的MAC地址............................................. 233
6.2.2 获取CPU的信息................................................... 235
6.2.3 获取硬盘序列号信息............................................. 240
6.3 密码学应用............................................................ 251
6.3.1 密码学的定义...................................................... 252
6.3.2 密码学的分类...................................................... 252
6.3.3 常用密码算法介绍................................................ 254
6.3.4 密码学的应用...................................................... 260
6.3.5 密码学的局限性................................................... 261
6.4 网络认证............................................................... 261 |
|
第7章 调试..............................268 |
|
7.1 调试工具介绍......................................................... 268
7.1.1 NuMega公司的SoftICE调试器.............................. 268
7.1.2 WinDbg简介...................................................... 278
7.1.3 国产调试器TRW.................................................. 294
7.1.4 用户级调试器OllyDebugger .................................298
7.2 静态分析与反静态分析............................................. 305
7.2.1 识别文件信息...................................................... 306
7.2.2 带有反汇编功能的二进制编辑器.............................. 306
7.2.3 反汇编工具......................................................... 307
7.2.4 花指令............................................................... 311
7.3 反跟踪.................................................................. 318
7.3.1 调试器检测......................................................... 318
7.3.2 CC断点的检测、补丁系统动态库............................. 328
7.3.3 API变址调用....................................................... 329
7.3.4 让SoftICE崩溃的技术.......................................... 332
7.3.5 Anti UI Debugger............................................. 332
7.3.6 Anti Spy++....................................................... 333
7.3.7 结构化异常......................................................... 335
7.4 反补丁.................................................................. 342
7.5 反脱壳.................................................................. 343
7.5.1 一次性代码......................................................... 343
7.5.2 核内壳............................................................... 345
7.5.3 代码块动态加解密................................................ 348
7.5.4 API重定向.......................................................... 350
7.5.5 APIRedir........................................................... 351
7.5.6 AdvAPIHook..................................................... 355
7.5.7 Anti冲击波2000................................................. 355
7.6 反加载.................................................................. 356
7.7 Win32 Debug-API............................................... 357
7.7.1 Debug-API的使用.............................................. 357
7.7.2 Debug-API的应用.............................................. 364
7.8 Monitor监视技术................................................... 371
7.8.1 监视技术简介...................................................... 371
7.8.2 市面常见的监视工具简介....................................... 371
|
|
第8章 技巧..............................378 |
|
8.1 时间控制的技巧...................................................... 378
8.2 带有迷惑性的代码................................................... 383
8.2.1 分身的字符串...................................................... 384
8.2.2 捕捉解密者的陷阱................................................ 385
8.2.3 虚假的错误信息................................................... 386
8.2.4 验证的时机......................................................... 386
8.3 逻辑的迷宫............................................................ 387
8.4 消息接口DLL......................................................... 390
8.5 类加密.................................................................. 394
8.5.1 基类加密............................................................ 394
8.5.2 简单数据类型加密................................................ 396
8.6 用消息隐藏程序的流程............................................. 398 |
|
第9章 加密锁........................... 401 |
|
9.1 加密锁简介............................................................ 401
9.2 加密锁的历史......................................................... 403
9.2.1 第一代 逻辑电路加密锁......................................... 403
9.2.2 第二代 存储器加密锁............................................ 404
9.2.3 第三代 逻辑电路加存储器加密锁............................. 404
9.2.4 第四代 可编程加密锁............................................ 405
9.2.5 第五代 智能卡加密锁............................................ 405
9.3 加密锁的攻防战....................................................... 406
9.4 不可解密的加密锁——智能卡带来的革命...................... 408
9.4.1 智能卡简介.......................................................... 408
9.4.2 智能卡为什么可以应用于加密.................................. 409
9.4.3 采用智能卡技术的加密锁所带来的技术进步................ 411
9.4.4 现有的几种智能卡加密锁........................................ 412
9.5 加密锁使用的技巧.................................................... 418
9.5.1 怎样用可编程加密锁加密........................................ 418
9.5.2 怎样用智能卡加密锁加密........................................ 422
9.5.3 怎样用ROCKEY5虚拟加密锁进行程序模拟保护........... 430
9.5.4 不良的加密锁加密方案举例及应对方法...................... 431 |
|
参考文献................................ 442 |
|