内容简介
对抗软件盗版、篡改和恶意逆向工程的理论、技巧和工具
近十年来,人们在软件防盗版和防篡改技术的研发上取得了重大进展。这些技术在保护软件开发人员的知识产权方面具有不可替代的作用。无论是研究人员、在校学生,还是开发人员,要了解这些技术及其能提供的安全级别和可能引发的性能开销,都可以从本书获得、全面的参考资料。
Christian Collberg和Jasvir Nagra在书中详尽地介绍了相关技术,涵盖了计算机科学的各个相关领域,包括密码学、隐写术、水印、软件度量、逆向工程和编译优化等。本书通过大量的示例代码,向读者展示了代码混淆、软件水印、代码防篡改和“胎记”技术等保护算法的实现方式,并且从理论和实践两个角度探讨了这些技术的局限。
涵盖的内容
攻击者和防御者用来分析程序的各种主要方法
代码混淆技术,用于提高程序被分析和理解的难度
软件水印和指纹,用于标识软件开发者并追踪盗版
代码防篡改技术,用于检测和响应非法修改代码和数据的行为,从而保护软件
动态水印和动态混淆技术,用于阻止软件的非法复制
软件相似性分析和“胎记”算法,用于检测代码剽窃
硬件技术,用于保护软件及各类媒体免遭盗版和篡改
在分布式系统中,检测远端不可信平台上运行的软件是否被篡改
代码混淆技术在理论上的局限性
目录
第1章 什么是隐蔽软件
1.1 概述
1.2 攻击和防御
1.3 程序分析的方法
1.4 代码混淆
1.4.1 代码混淆的应用
1.4.2 混淆技术概述
1.4.3 被黑客们使用的代码混淆技术
1.5 防篡改技术
1.5.1 防篡改技术的应用
1.5.2 防篡改技术的例子
1.6 软件水印
1.6.1 软件水印的例子
1.6.2 攻击水印系统
1.7 软件相似性比对
1.7.1 代码剽窃
1.7.2 软件作者鉴别
1.7.3 软件“胎记”
1.7.4 软件“胎记”的案例
1.8 基于硬件的保护技术
1.8.1 把硬件加密锁和软件一起发售
1.8.2 把程序和CPU绑定在一起
1.8.3 确保软件在安全的环境中执行
1.8.4 加密可执行文件
1.8.5 增添物理防护
1.9 小结
1.9.1 使用软件保护技术的理由
1.9.2 不使用软件保护技术的理由
1.9.3 那我该怎么办呢
1.1 一些说明
第2章 攻击与防御的方法
2.1 攻击的策略
2.1.1 被破解对象的原型
2.1.2 破解者的动机
2.1.3 破解是如何进行的
2.1.4 破解者会用到的破解方法
2.1.5 破解者都使用哪些工具
2.1.6 破解者都会使用哪些技术
2.1.7 小结
2.2 防御方法
2.2.1 一点说明
2.2.2 遮掩
2.2.3 复制
2.2.4 分散与合并
2.2.5 重新排序
2.2.6 映射
2.2.7 指引
2.2.8 模仿
2.2.9 示形
2.2.10 条件—触发
2.2.11 运动
2.2.12 小结
2.3 结论
2.3.1 对攻击/防御模型有什么要求
2.3.2 该如何使用上述模型设计算法
第3章 分析程序的方法
3.1 静态分析
3.1.1 控制流分析
3.1.2 数据流分析
3.1.3 数据依赖分析
3.1.4 别名分析
3.1.5 切片
3.1.6 抽象解析
3.2 动态分析
3.2.1 调试
3.2.2 剖分
3.2.3 trace
3.2.4 模拟器
3.3 重构源码
3.3.1 反汇编
3.3.2 反编译
3.4 实用性分析
3.4.1 编程风格度量
3.4.2 软件复杂性度量
3.4.3 软件可视化
3.5 小结
第4章 代码混淆
4.1 保留语义的混淆转换
4.1.1 算法OBFCF:多样化转换
4.1.2 算法OBFTP:标识符重命名
4.1.3 混淆的管理层
4.2 定义
4.2.1 可以实用的混淆转换
4.2.2 混淆引发的开销
4.2.3 隐蔽性
4.2.4 其他定义
4.3 复杂化控制流
4.3.1 不透明表达式
4.3.2 算法OBFWHKD:压扁控制流
4.3.3 使用别名
4.3.4 算法OBFCTJbogus:插入多余的控制流
4.3.5 算法OBFLDK:通过跳转函数执行无条件转移指令
4.3.6 攻击
4.4 不透明谓词
4.4.1 算法OBFCTJpointer:从指针别名中产生不透明谓词
4.4.2 算法OBFWHKDopaque:数组别名分析中的不透明值
4.4.3 算法OBFCTJthread:从并发中产生的不透明谓词
4.4.4 攻击不透明谓词
4.5 数据编码
4.5.1 编码整型数
4.5.2 混淆布尔型变量
4.5.3 混淆常量数据
4.5.4 混淆数组
4.6 结构混淆
4.6.1 算法OBFWCsig:合并函数签名
4.6.2 算法OBFCTJclass:分解和合并类
4.6.3 算法OBFDMRVSL:摧毁结构
4.6.4 算法OBFAJV:修改指令编码方式