第1章 绪论 1
1.1 协议 1
1.1.1 定义 1
1.1.2 网络体系结构 2
1.2 协议分析 8
1.2.1 应用需求 8
1.2.2 协议逆向工程 11
参考文献 14
第2章 协议设计原理 15
2.1 协议模型 15
2.2 协议设计的基本内容 17
2.2.1 协议的通信环境 17
2.2.2 协议提供的服务 18
2.2.3 协议功能 19
2.2.4 协议元素 22
2.3 差错控制技术 27
2.3.1 差错类型 27
2.3.2 差错检测技术 28
2.3.3 报文丢失、重复、失序处理技术 38
2.3.4 差错控制与层次的关系 43
2.4 典型协议 45
2.4.1 HDLC协议 45
2.4.2 PPP协议 49
2.4.3 IP协议 52
2.4.4 TCP协议 54
2.4.5 HTTP协议 57
2.5 总结与展望 60
参考文献 60
第3章 协议规范描述模型 61
3.1 概述 61
3.2 协议规范描述需求分析 62
3.3 高阶属性方法 64
3.3.1 协议格式分析 64
3.3.2 高阶属性文法 64
3.4 基于高阶属性方法的协议规范描述模型 67
3.5 模型实现 73
3.6 总结与展望 83
参考文献 83
第4章 基于网络流量的协议格式逆向分析 85
4.1 概述 85
4.2 序列比对技术 86
4.2.1 双序列比对 87
4.2.2 多序列比对 88
4.2.3 问题分析 89
4.3 典型报文序列分析方法 90
4.3.1 PI 90
4.3.2 PEXT 91
4.3.3 BFS 94
4.3.4 ScriptGen 96
4.3.5 Discoverer 98
4.3.6 Automaton 100
4.3.7 Netzob 101
4.4 基于递归聚类的协议格式提取方法 103
4.4.1 基本块划分 104
4.4.2 递归分析 105
4.4.3 报文结构信息分析 110
4.4.4 语义及取值约束推断 110
4.4.5 算法复杂度分析 120
4.5 人工知识在逆向分析中的应用 121
4.5.1 人工知识 122
4.5.2 半自动协议逆向分析 122
4.6 RPRA实现 127
4.6.1 输入模块 127
4.6.2 自动分析模块 130
4.6.3 输出模块 130
4.6.4 纠正模块 132
4.7 应用实例 135
4.7.1 样本集的获取 136
4.7.2 数据预处理 136
4.7.3 已知协议分析 136
4.8 总结与展望 148
参考文献 149
第5章 动态二进制程序分析技术 151
5.1 概述 151
5.2 动态污点分析技术 152
5.2.1 动态污点分析的原理 152
5.2.2 污点属性的传播特征 154
5.2.3 动态污点分析技术的应用 155
5.3 动态符号执行技术 155
5.3.1 符号执行的原理 156
5.3.2 符号执行技术的局限 158
5.3.3 动态符号执行的原理及应用 159
5.4 二进制分析平台简介 161
5.4.1 Intel Pin 161
5.4.2 BitBlaze 169
5.4.3 其他二进制分析平台 178
5.5 总结与展望 181
参考文献 182
第6章 基于执行轨迹的协议格式逆向分析 185
6.1 概述 185
6.2 典型指令序列分析方法 186
6.2.1 Polyglot 186
6.2.2 AutoFormat 188
6.2.3 Tupni 191
6.2.4 Prospex 193
6.2.5 ReFormat 194
6.2.6 Dispatcher 196
6.3 基于混合符号执行的协议格式提取方法 197
6.3.1 概述 197
6.3.2 基本思想 199
6.3.3 基于中间语言的混合符号执行技术 201
6.3.4 语义解析层次的协议格式提取技术 205
6.3.5 原型实现及应用 217
6.4 总结与展望 225
参考文献 226
第7章 协议状态机推断技术 229
7.1 概述 229
7.2 基本定义 230
7.3 状态机推断技术研究现状 231
7.3.1 基于指令序列的状态机推断研究 231
7.3.2 基于报文序列的状态机推断研究 232
7.3.3 两类方法的比较 237
7.4 测试驱动状态融合的协议状态机推断方法 238
7.4.1 状态融合问题分析 238
7.4.2 方法概述 241
7.4.3 初始状态机构造 243
7.4.4 状态匹配与融合 245
7.4.5 状态融合验证 248
7.4.6 实例分析 249
7.5 基于域知识的协议状态机主动推断算法 256
7.5.1 概述 256
7.5.2 L+ N算法 258
7.5.3 基于强顺序约束关系的output query过滤机制 259
7.5.4 基于EPTT的output query预响应机制 261
7.5.5 基于正例样本变异的equivalence query近似判定算法 262
7.5.6 实例分析 263
7.6 总结与展望 268
参考文献 269
第8章 协议逆向分析的应用 273
8.1 概述 273
8.2 Fuzzing测试技术 273
8.3 基于模型的Fuzzing技术面临的问题 279
8.3.1 数据格式的描述 279
8.3.2 测试用例的生成 281
8.4 文法驱动的Fuzzing测试技术 284
8.4.1 文法分析树的构造 286
8.4.2 测试节点的选择 290
8.4.3 基于语义的测试用例生成 291
8.5 应用实例 295
8.6 总结与展望 301
参考文献 302
附录 缩略语 304