飞天诚信
 
会员信息

» 登录

软件加密原理与应用目录

《软件加密原理与应用》目录

第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