本书包括基础和技术两部分。基础部分介绍与逆向分析和漏洞分析相关的基础知识,包括基本概念、常见漏洞特征,让读者对本书分析研究的对象有个初步了解。技术部分介绍漏洞分析常用的几种技术,既有偏于理论的符号执行技术,也有偏于工程实践的模糊测试技术。每种技术按照概念、分类、发展、原理、案例的逻辑关系进行介绍,使读者能够由浅入深、循序渐进地理解。每章最后配有习题,读者完成这些习题,可以加深对相关知识点的理解和掌握。
样章试读
目录
- 目录
第1章 逆向与漏洞分析概述 1
1.1 逆向概述 1
1.1.1 基本概念 1
1.1.2 基本流程 2
1.1.3 作用 3
1.2 漏洞的概念 3
1.2.1 漏洞的基本定义 4
1.2.2 漏洞的特征 5
1.2.3 漏洞分类 6
1.2.4 漏洞分级 8
1.3 漏洞的影响及发展历程 11
1.3.1 漏洞的影响 11
1.3.2 漏洞发展历程 13
1.3.3 漏洞分析技术发展脉络 14
1.4 本章小结 15
1.5 习题 16
第2章 逆向分析基础 17
2.1 软件保护方法 17
2.1.1 防止调试 17
2.1.2 防止分析 18
2.1.3 防止修改 22
2.1.4 其他保护方法 22
2.2 程序预处理 22
2.2.1 软件脱壳 22
2.2.2 程序入口定位 24
2.2.3 实例分析 25
2.3 基本数据类型逆向 27
2.3.1 整数 27
2.3.2 浮点数 27
2.3.3 字符和字符串 28
2.3.4 内存地址和指针 28
2.3.5 常量 28
2.3.6 数组 29
2.3.7 实例分析 30
2.4 表达式逆向 32
2.4.1 算术运算 32
2.4.2 关系与逻辑运算 33
2.4.3 实例分析 33
2.5 控制语句逆向 35
2.5.1 分支类语句 36
2.5.2 循环类语句 37
2.5.3 实例分析 38
2.6 函数逆向 43
2.6.1 栈帧 43
2.6.2 函数参数 43
2.6.3 函数返回值 43
2.6.4 实例分析 44
2.7 代码优化 48
2.7.1 表达式优化 48
2.7.2 代码结构优化 48
2.8 本章小结 50
2.9 习题 50
第3章 漏洞分析基础 51
3.1 缓冲区溢出漏洞 51
3.1.1 基本概念 51
3.1.2 栈溢出漏洞机理 51
3.2 格式化字符串漏洞 57
3.2.1 基本概念 57
3.2.2 漏洞机理 57
3.3 整型溢出漏洞 59
3.3.1 基本概念 59
3.3.2 漏洞机理 59
3.4 提权漏洞 60
3.4.1 基本概念 60
3.4.2 漏洞机理 61
3.5 UAF 漏洞 62
3.5.1 基本概念 62
3.5.2 漏洞机理 63
3.6 本章小结 67
3.7 习题 67
第4章 数据流分析技术 68
4.1 概念与作用 68
4.1.1 基本概念 68
4.1.2 数据流分析的作用 70
4.2 基本分析模型 70
4.2.1 代码基本块 70
4.2.2 抽象语法树 71
4.2.3 三地址码 72
4.2.4 静态单赋值 73
4.2.5 控制流图 75
4.2.6 其他代码模型 77
4.3 数据流分析原理 82
4.3.1 程序建模 82
4.3.2 函数内分析 84
4.3.3 函数间分析 89
4.3.4 漏洞规则分析 93
4.4 数据流分析的应用 94
4.4.1 辅助程序优化 94
4.4.2 检测程序漏洞 97
4.5 本章小结 99
4.6 习题 99
第5章 污点分析技术 101
5.1 污点分析概述 101
5.1.1 基本概念 101
5.1.2 动、静态污点分析的异同 103
5.2 静态污点分析 105
5.2.1 正向静态污点分析 105
5.2.2 反向静态污点分析 108
5.2.3 静态污点分析的应用 108
5.3 动态污点分析 109
5.3.1 动态污点分析过程 110
5.3.2 动态污点分析应用 122
5.4 本章小结 123
5.5 习题 124
第6章 符号执行技术 125
6.1 符号执行概述 125
6.1.1 基本概念 125
6.1.2 发展脉络 126
6.2 符号执行的原理 129
6.2.1 正向符号执行 129
6.2.2 逆向符号执行 134
6.3 符号执行的应用 136
6.3.1 使用符号执行检测程序漏洞 136
6.3.2 使用符号执行构造测试用例 136
6.3.3 使用离线符号执行生成Exploit 137
6.4 实例分析 138
6.4.1 检测缓冲区溢出漏洞 138
6.4.2 构造测试用例 140
6.5 其他符号执行 142
6.5.1 动态符号执行 142
6.5.2 组合符号执行 144
6.5.3 选择符号执行 146
6.5.4 混合符号执行 148
6.5.5 并行符号执行 149
6.6 符号执行存在的难题及缓解措施 150
6.6.1 路径爆炸问题 150
6.6.2 约束求解问题 151
6.6.3 外部函数调用问题 152
6.6.4 浮点指针计算问题 152
6.6.5 循环处理 153
6.7 本章小结 153
6.8 习题 153
第7章 模糊测试技术 154
7.1 模糊测试概述 154
7.1.1 起源与发展 155
7.1.2 基本概念 160
7.1.3 分类与作用 161
7.2 基本原理 163
7.2.1 目标识别 163
7.2.2 输入识别 164
7.2.3 测试用例生成 164
7.2.4 执行过程监控 165
7.2.5 异常分析 166
7.2.6 可用性判定 174
7.3 传统模糊测试 176
7.3.1 基本流程 176
7.3.2 输入构造 177
7.3.3 输入验证 178
7.3.4 适应度函数 180
7.3.5 基于生成与基于变异技术对比 182
7.3.6 案例分析 182
7.4 覆盖率引导的模糊测试 186
7.4.1 覆盖率概念与分类 186
7.4.2 基本流程 187
7.4.3 初始种子获取 188
7.4.4 种子选择策略 189
7.4.5 覆盖率引导统计 190
7.4.6 案例分析 191
7.5 其他模糊测试技术 193
7.5.1 定向模糊测试 193
7.5.2 内存模糊测试 194
7.5.3 内核模糊测试 195
7.5.4 反模糊测试 196
7.6 模糊测试的局限性和发展方向 196
7.6.1 局限性和面临问题 196
7.6.2 发展方向 197
7.7 本章小结 198
7.8 习题 199
第8章 漏洞攻防演变 200
8.1 漏洞攻防对抗概述 200
8.2 栈空间对抗 202
8.2.1 防御原理 202
8.2.2 对抗方法 205
8.3 堆空间对抗 205
8.3.1 防御原理 205
8.3.2 对抗方法 206
8.4 异常处理机制对抗 207
8.4.1 防御原理 207
8.4.2 对抗方法 209
8.5 数据保护对抗 210
8.5.1 防御原理 210
8.5.2 对抗方法 211
8.5.3 其他数据保护方法 212
8.6 控制保护对抗 217
8.6.1 防御原理 217
8.6.2 对抗方法 218
8.6.3 其他控制保护方法 218
8.7 Windows最新安全机制 222
8.8 本章小结 225
8.9 习题 225
参考文献 226