读书人

软件加密与解密 [平装]

发布时间: 2013-12-23 02:08:46 作者: rapoo

编辑推荐

《软件加密与解密》详尽地介绍了相关技术。探讨了计算机科学的各个相关领域。包括密码学、隐写术、水印、软件度量、逆向工程和编译优化等。《软件加密与解密》通过大量的示例代码。向读者展示了代码混淆、软件水印、代码防篡改和“胎记”技术等保护算法的实现方式,并且从理论和实践两个角度探讨了这些技术的局限。《软件加密与解密》适合各层次软件开发人员阅读。
近十年来,人们在软件防盗版和防篡改技术的研发上取得了重大进展。这些技术在保护软件开发人员的知识产权方面具有不可替代的作用。无论是研究人员、在校学生。还是开发人员.要了解这些技术及其能提供的安全级别和可能引发的性能开销,都可以从本书获得权威、全面的参考资料。

名人推荐

“本书透彻、严谨地介绍了计算机安全中一个日益重要的领域,是从事软件保护的研究、学习和实践的‘必备手册’。”
——Mikhail Atallah,普度大学计算机科学系教授

作者简介

作者:(美国)科尔伯格(Collberg C.),(美国)纳盖雷(Nagra J.) 译者:崔孝晨

科尔伯格,瑞典隆德大学计算机科学博士,亚利桑那州立大学计算机科学系副教授,从事代码混淆、软件水印和“胎记”方面的基础性研究工作。他曾在新西兰奥克兰大学及中国科学院工作过。
纳盖雷,专注于设计强壮的动态水印算法,曾致力于通过代码混淆和防篡改技术保护运行在远程不可信平台上的软件的完整性。目前,他任职于谷歌公司,在加利福尼亚州从事与基于编程语言的安全性有关的研究工作。

目录

第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.10 一些说明
第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:修改指令编码方式
4.7 小结
第5章 混淆理论
5.1 定义
5.2 可被证明是安全的混淆:我们能做到吗
5.2.1 图灵停机问题
5.2.2 算法REAA:对程序进行反混淆
5.3 可被证明是安全的混淆:有时我们能做到
5.3.1 算法OBFLBS:混淆点函数
5.3.2 算法OBFNS:对数据库进行混淆
5.3.3 算法OBFPP:同态加密
5.3.4 算法OBFCEJO:白盒DES加密
5.4 可被证明是安全的混淆: (有时是)不可能完成的任务
5.4.1 通用混淆器
5.4.2 混淆最简单的程序
5.4.3对混淆所有程序的不可能性的证明
5.4.4 小结
5.5 可被证明为安全的混淆:这玩儿还能成吗
5.5.1 跳出不可能性的阴霾
5.5.2 重新审视定义:构造交互式的混淆方法
5.5.3 重新审视定义:如果混淆不保留语义又当如何
5.6 小结
第6章 动态混淆
6.1 定义
6.2 代码迁徙
6.2.1 算法OBFKMNM:替换指令
6.2.2 算法OBFAGswap:自修改状态机
6.2.3 算法OBFMAMDSB:动态代码合并
6.3 加密技术
6.3.1 算法OBFCKSP:把代码作为产生密钥的源泉
6.3.2 算法OBFAGcrypt:结合自修改代码和加密
6.4 小结
第7章 软件防篡改
7.1 定义
7.1.1 对篡改的监测
7.1.2 对篡改的响应
7.1.3 系统设计
7.2 自监测
7.2.1 算法TPCA:防护代码之网
7.2.2 生成hash函数
7.2.3 算法TPHMST:隐藏hash值
7.2.4 Skype中使用的软件保护技术
7.2.5 算法REWOS:攻击自hash算法
7.2.6 讲评
7.3 算法RETCJ:响应机制
7.4 状态自检
7.4.1 算法TPCVCPSJ:易遭忽视的hash函数
7.4.2 算法TPJJV:重叠的指令
7.5 远程防篡改
7.5.1 分布式监测和响应机制
7.5.2 解决方案
7.5.3 算法TPZG:拆分函数
7.5.4 算法TPSLSPDK:通过确保远程机器硬件配置来防篡改
7.5.5 算法TPCNS:对代码进行持续的改变
7.6 小结
第8章 软件水印
8.1 历史和应用
8.1.1 应用
8.1.2 在音频中嵌入水印
8.1.3 在图片中嵌入水印
8.1.4 在自然语言文本中嵌入水印
8.2 软件水印
8.3 定义
8.3.1 水印的可靠性
8.3.2 攻击
8.3.3 水印与指纹
8.4 使用重新排序的方法嵌入水印
8.4.1 算法WMDM:重新排列基本块
8.4.2 重新分配资源
8.4.3 算法WMQP:提高可靠性
8.5 防篡改水印
8.6 提高水印的抗干扰能力
8.7 提高隐蔽性
8.7.1 算法WMMIMIT:替换指令
8.7.2 算法WMVVS:在控制流图中嵌入水印
8.7.3 算法WMCC:抽象解析
8.8 用于隐写术的水印
8.9 把水印值分成几个片段
8.9.1 把大水印分解成几个小片段
8.9.2 相互冗余的水印片段
8.9.3 使用稀疏编码提高水印的可靠性
8.10 图的编/解码器
8.10.1 父指针导向树
8.10.2 底数图
8.10.3 排序图
8.10.4 根延伸的平面三叉树枚举编码
8.10.5 可归约排序图
8.11 讲评
8.11.1 嵌入技术
8.11.2 攻击模型
第9章 动态水印
9.1 算法WMCT:利用别名
9.1.1 一个简单的例子
9.1.2 水印识别中的问题
9.1.3 增加数据嵌入率
9.1.4 增加抵御攻击的抗干扰性能
9.1.5 增加隐蔽性
9.1.6 讲评
9.2 算法WMNT:利用并发
9.2.1 嵌入水印的基础构件
9.2.2 嵌入示例
9.2.3 识别
9.2.4 避免模式匹配攻击
9.2.5 对构件进行防篡改处理
9.2.6 讲评
9.3 算法WMCCDKHLSpaths:扩展执行路径
9.3.1 水印的表示和嵌入
9.3.2 识别
9.3.3 讲评
9.4 算法WMCCDKHLSbf:防篡改的执行路径
9.4.1 嵌入
9.4.2 识别
9.4.3 对跳转函数进行防篡改加固
9.4.4 讲评
9.5 小结
第10章 软件相似性分析
10.1 应用
10.1.1 重复代码筛选
10.1.2 软件作者鉴别
10.1.3 剽窃检测
10.1.4 胎记检测
10.2 定义
10.3 基于k—gram的分析
10.3.1 算法SSSWAwinnow:有选择地记录k—gram hash
10.3.2 算法SSSWAMOSS:软件剽窃检测
10.3.3 算法SSMCkgram:Java字节码的k—gram“胎记”
10.4 基于API的分析
10.4.1 算法SSTNMM:面向对象的“胎记”
10.4.2 算法SSTONMM:动态函数调用“胎记”
10.4.3 算法SSSDL:动态k—gramAPI“胎记”
10.5 基于树的分析
10.6 基于图的分析
10.6.1 算法SSKH:基于PDG的重复代码筛选
10.6.2 算法SSLCHY:基于PDG的剽窃检测
10.6.3 算法SSMCwpp:整个程序的动态“胎记”
10.7 基于软件度量的分析方法
10.7.1 算法SSKK:基于软件度量的重复代码筛选
10.7.2 算法SSLM:基于度量的软件作者鉴别
10.8 小结
第11章 用硬件保护软件
11.1 使用发行的物理设备反盗版
11.1.1 对发行盘片的保护
11.1.2 软件狗和加密锁
11.2 通过可信平台模块完成认证启动
11.2.1 可信启动
11.2.2 产生评估结果
11.2.3 TPM
11.2.4 盘问式验证过程
11.2.5 社会可信性和隐私问题
11.2.6 应用和争议
1 1.3 加密的可执行文件
11.3.1 XOM体系结构
11.3.2 阻止重放攻击
11.3.3 修补有漏洞的地址总线
11.3.4 修补有漏洞的数据总线
11.3.5 讲评
11.4 攻击防篡改设备
11.4.1 监听总线——破解微软的XBOX
11.4.2 猜测指令——破解达拉斯半导体公司的DS5002FP微处理器
11.4.3 破解智能卡
11.4.4 非侵入式攻击
11.4.5 主板级的保护
11.5 小结
参考文献

文摘

版权页:



插图:



2.2 防御方法
你已经学了很多破解者分析程序和找出(有时是摧毁)程序中隐藏秘密的方法了。这些技术有些是在调试器中单步执行每条指令,也有些要在模拟器中运行程序,还有些是要把程序反编译成更易于理解的源码形式。现在探险结束,你又恢复了好人的身份。毕竟,你最终想通过本书解答的问题是,如何保护你的程序不被破解。
你会发现,在本书中我们将以不同的形式反复强调一些基本的原则。而且最有意思的是,这些基本原则既不是新提出来的,也不是专用于软件领域的:自混沌初分以来,各种动植物就拥有各式各样的自卫方法,而自从有人类社会这天起,人们也想出了很多隐藏秘密以保护自身不受环境和敌人伤害的方法。在本节中,我们将向你展示一个描述这些基本方法并且把它们应用到软件保护方面的模型(84)。我们的目标是,指出各个可用于软件保护的基本方法并把它们用于本书接下来讨论的部分中,同时我们还要使用这些方法对各种已发表的软件保护技术进行分类。此外,我们希望这个模型也可以为研究员和工程师在讨论已有的或者开发新的软件保护技术时提供一种统一语言。
每当看见一种新的防护技术的时候,你都可以用这个模型对它进行归类。绝大多数情况下,你会说“这个技术只是另一个以前已经发表过的技术的简单变形”或者“这个办法比较有创意地把两个已知的方法给结合起来了,我估计它有如下属性”……但极少数情况下(但这也是很有用的),你可能会发现,“这个技术没法归类到这个模型中去——它含有某种全新的想法,我们必须要重新考虑整个模型的架构问题。”反之,要是我们的模型能够预言出某些新的软件保护的方法的话,那我们就再高兴不过了。如果你的需求是“啊,我需要一个具有下列属性的保护方法”,而使用我们的模型,你可以推出“如果以这样一种方法把这两个基本方法组合起来使用,那就能满足这些属性”,我觉得这个模型就算是很实用的了。虽然这个模型还不是很完善,但是它已经足以描述本书剩余部分的内容并对文献中已经发表过的所有保护技术进行分类了。
尽管建立这一模型的灵感是源自动植物的防御自卫的本能和人类社会之间的斗争艺术。但是我们还是没有在模型中把三十六计全部罗列一遍。比如河豚鱼在遭遇攻击时会把自己像吹气球一样鼓起来,以吓唬对方,但是这一招虚张声势在软件保护中显然是用不上的,于是我们就将其舍弃掉了。

喜欢软件加密与解密 [平装]请与您的朋友分享,由于版权原因,读书人网不提供图书下载服务

读书人网 >软件工程

热点推荐