第1章 引言 1
1.1软件保护的背景及意义 1
1.2软件保护场景 2
1.3软件攻击模型 3
1.3.1攻击者的能力 3
1.3.2攻击者的目标 4
1.3.3针对软件保护的通用攻击方式 4
1.3.4针对软件水印的特定攻击方式 4
1.4研究现状 5
1.5软件保护方案 6
1.5.1基于审计的保护方案 6
1.5.2基于硬件的保护方案 6
1.5.3基于软件的保护方案 6
1.6关于软件保护的专利及法律条文 7
1.6.1美国 7
1.6.2欧盟 8
1.6.3日本 8
1.6.4中国 8
参考文献 9
参考文献注释 10
第2章 软件保护基础 11
2.1代码操纵技术 11
2.1.1字节码查看工具 11
2.1.2字节码操纵工具 11
2.1.3字节码操纵示例 14
2.2程序分析技术 15
2.3 Class文件结构 19
2.4拆分与编码知识 23
2.4.1整数拆分 23
2.4.2图编码 23
参考文献 25
参考文献注释 25
第3章 软件水印技术 26
3.1国内外研究现状 26
3.2软件水印的概念、模型及分类 26
3.2.1软件水印概念 26
3.2.2软件水印系统的模型 27
3.2.3软件水印的分类 28
3.3评价指标 30
3.3.1数据率 30
3.3.2隐蔽性 30
3.3.3弹性 30
3.3.4代价 30
3.3.5效率 30
3.3.6可信度 30
3.4若干关键算法 31
3.4.1静态水印算法 31
3.4.2动态水印算法 42
3.4.3半动态水印算法 46
3.5软件水印系统 53
3.5.1现有水印系统 53
3.5.2 TRUP平台 56
参考文献 59
参考文献注释 60
第4章 软件混淆技术 61
4.1引言 61
4.2混淆技术的概念、分类及评估 61
4.2.1概念 61
4.2.2分类 62
4.2.3评估 62
4.3混淆算法 63
4.3.1设计混淆 63
4.3.2数据混淆 67
4.3.3控制流混淆 68
4.3.4预防混淆 69
4.4混淆工具 70
4.5混淆算法的检验与比较 72
4.5.1实验说明 73
4.5.2混淆算法的效果 73
4.5.3混淆算法的正确性测试 76
4.5.4混淆算法对程序性能的影响 76
4.5.5混淆算法对程序优化的抵抗力 78
参考文献 79
参考文献注释 80
第5章 软件防篡改技术 81
5.1引言 81
5.2软件防篡改技术的分类方式和设计准则 81
5.2.1攻击类型 81
5.2.2分类方式 82
5.2.3设计准则 83
5.3软件防篡改技术 83
5.3.1校验和 84
5.3.2多块加密 84
5.3.3哨兵 85
5.3.4断言检查 86
5.3.5隐式哈希 87
5.3.6 Tester-Corrector 87
5.3.7控制流图检测 87
5.3.8基于分支函数的检测 88
5.3.9联机检测 88
5.3.10指针置空响应法 89
5.3.11加密 90
5.3.12硬件方式 91
5.4软件防篡改技术辅助方案 92
5.4.1 TPM 92
5.4.2 SWATT 92
5.4.3混淆 93
5.4.4程序定制 93
5.5软件防篡改的研究前景 93
5.5.1软件防篡改技术的度量机制 93
5.5.2将检测和响应结合 93
5.5.3将防篡改技术与软件水印技术相结合 94
参考文献 94
参考文献注释 97
第6章 软件保护综合技术 98
6.1水印与混淆技术的结合 98
6.1.1 semi-danamic水印算法与混淆算法结合 98
6.1.2.NET平台的软件保护 98
6.2水印与防篡改技术的结合 99
6.3水印感知的Java软件可信运行环境 100
6.3.1 Java虚拟机现有安全策略 100
6.3.2基于脆弱水印的可信运行环境 103
参考文献 105
参考文献注释 105
第7章 总结和展望 106
7.1本书内容总结 106
7.2展望 107
附录A按操作码字节值排列的操作码助记符 108
A.1标准操作码 108
A.2快速操作码 110
A.3保留操作码 111
附录B习题及解答 112