第1章 绪论 1
1.1 软件逆向分析 1
1.1.1 与安全相关的逆向分析 2
1.1.2 针对软件开发的逆向分析 4
1.1.3 本书的主要内容 5
1.2 软件逆向分析的历史 6
1.3 软件逆向分析的各个阶段 6
1.3.1 文件装载 7
1.3.2 指令解码 7
1.3.3 语义映射 8
1.3.4 相关图构造 8
1.3.5 过程分析 8
1.3.6 类型分析 9
1.3.7 结果输出 9
1.4 逆向分析框架 9
1.4.1 静态分析框架 9
1.4.2 动态分析框架 10
1.4.3 动静结合的分析框架 10
第2章 指令系统 12
2.1 指令系统概述 12
2.2 机器指令与汇编指令 12
2.2.1 机器指令 12
2.2.2 汇编指令 14
2.3 IA-64体系结构的特点 15
2.3.1 显式并行机制 16
2.3.2 IA-64微处理器体系结构 18
2.4 指令格式 21
本章小结 24
第3章 可执行文件 25
3.1 可执行文件概述 25
3.2 可执行文件格式 25
3.2.1 ELF文件的3种主要类型 26
3.2.2 文件格式 26
3.2.3 数据表示 26
3.2.4 文件头 27
3.2.5 节 29
3.2.6 字符串表 30
3.2.7 符号表 31
3.3 一个简单的ELF文件分析 31
3.3.1 文件头分析 32
3.3.2 section信息分析 33
本章小结 33
第4章 反汇编技术 35
4.1 反汇编技术简介 35
4.2 反汇编算法流程 37
4.2.1 线性扫描算法 37
4.2.2 递归扫描算法 38
4.3 反汇编工具的自动构造方法 39
4.3.1 自动构造工具 39
4.3.2 利用自动构造方法构建IA-64反汇编器 41
4.4 常用反汇编工具介绍 42
4.4.1 IDA Pro介绍 42
4.4.2 ILDasm介绍 44
本章小结 45
第5章 指令的语义抽象 47
5.1 语义描述语言 47
5.1.1 SSL简介 47
5.1.2 SSL文法的设计 47
5.1.3 SSL文法的扩展 52
5.2 中间表示 55
5.2.1 低级中间表示(RTL) 56
5.2.2 高级中间表示(I-IRTL) 57
5.3 指令的语义抽象技术 59
5.3.1 语义抽象技术简介 59
5.3.2 指令语义的SSL描述 60
5.3.3 指令语义的高级模拟 60
5.4 基于SSL的IA-64指令语义抽象技术 61
5.4.1 IA-64的体系结构特征描述 61
5.4.2 整数指令的语义描述 63
5.5 基于模拟的LA-64指令语义抽象技术 66
5.5.1 IA.64浮点特性 66
5.5.2 浮点指令的语义模拟 68
5.5.3 浮点并行指令的语义模拟 78
本章小结 79
第6章 基本数据类型分析 81
6.1 数据类型分析的相关概念 81
6.1.1 ITA系统中数据类型分析的依据 82
6.1.2 ITA系统中基本数据类型分析的重要性 82
6.1.3 ITA系统中基本数据类型和高级C语言数据类型 82
6.2 基于指令语义的基本数据类型分析 83
6.2.1 &和*运算符 84
6.2.2 普通算术指令的描述 85
6.2.3 内存读写指令 85
6.2.4 转移指令 86
6.3 基于过程的数据类型分析技术 87
6.3.1 变量重命名技术 87
6.3.2 变量类型推导的规则 89
6.3.3 格理论在变量类型推导中的应用 91
本章小结 96
第7章 高级控制流恢复 98
7.1 控制流恢复概述 98
7.1.1 控制语句在中间代码中的组织特点 98
7.1.2 基本块的划分及控制流图的构建 101
7.1.3 控制流恢复术语 103
7.2 高级控制流恢复分析 106
7.2.1 可结构化和不可结构化循环子图 106
7.2.2 可结构化和不可结构化two-way条件子图 106
7.2.3 可结构化和不可结构化n-way条件子图 107
7.2.4 多重结构头节点子图 108
7.3 结构化算法介绍 109
7.3.1 对流图各节点进行正向后序遍历 109
7.3.2 对流图各节点进行反向后序遍历 109
7.3.3 直接后必经节点的确定 110
7.3.4 结构化含有条件判断的子图 111
7.3.5 使用PT定理构建循环子图结构 114
7.4 可能出现的问题与解决办法 119
本章小结 120
第8章 过程恢复技术 121
8.1 相关知识简介 121
8.1.1 调用约定 121
8.1.2 控制流分析及数据流分析 124
8.1.3 过程抽象 124
8.1.4 过程分析的目标 125
8.2 库函数恢复 126
8.2.1 内嵌库函数的恢复 126
8.2.2 动态链接库函数的恢复 140
8.3 用户自定义函数分析 145
8.3.1 函数名识别 145
8.3.2 用户自定义函数的参数分析 146
8.3.3 用户自定义函数的返回值分析 158
本章小结 161
第9章 部分编译优化效果的消除 162
9.1 谓词执行效果的消除 162
9.1.1 谓词执行和IF转换 163
9.1.2 简单谓词消除策略 166
9.1.3 谓词分析 166
9.1.4 谓词消除 171
9.2 投机优化的消除 178
9.2.1 IA-64中投机的方式及实现方法 178
9.2.2 反投机的目的和算法设计 180
9.3 软件流水优化的消除 184
9.3.1 软件流水机制 184
9.3.2 IA-64软件流水循环 187
9.3.3 软件流水消除技术 194
9.3.4 ITA系统中软件流水消除技术的实现 200
本章小结 206
第10章 程序的调试与测试 207
10.1 常用程序调试工具 207
10.2 几种常用测试集 214
参考文献 218