本书从二进制可执行程序转换为高级语言程序的实现过程出发,讨论了反编译技术所涉及的概念、理论、技术和方法。首先,对比编译技术,介绍反编译器的框架结构与反编译所面临的困难和问题;然后,介绍反编译前端的指令解码、语义分析、控制流图和中间代码生成;之后,介绍中间代码的优化和提升与高级控制结构恢复技术,包括库函数恢复和数据类型恢复;最后,介绍人工智能在反编译领域的应用。
样章试读
目录
- 目录
第1章 绪论 1
1.1 编译与反编译 1
1.2 反编译技术的发展历史 3
1.3 反编译所面临的问题 4
1.4 反编译器框架结构 7
1.5 反编译器实现及辅助工具 11
1.5.1 反编译器的模块结构 11
1.5.2 反编译辅助工具 12
1.6 反编译技术的分类 13
1.6.1 从反编译对象角度划分 13
1.6.2 从实现方式角度划分 16
1.7 反编译技术的应用 17
1.7.1 软件产品的开发、维护和升级 17
1.7.2 计算机安全领域 18
1.8 本章小结 19
第2章 反编译基础 20
2.1 二进制可执行文件格式 20
2.1.1 PE文件格式分析 20
2.1.2 ELF文件格式分析 25
2.2 二进制程序的存储组织结构 30
2.3 数据的存储 31
2.3.1 复杂数据类型 32
2.3.2 字节序 33
2.4 栈帧 34
2.4.1 栈和调用栈 34
2.4.2 栈帧相关寄存器 35
2.4.3 栈帧结构 35
2.4.4 程序的运行模式 36
2.5 反编译器的符号表 39
2.5.1 符号表的作用 39
2.5.2 符号表的组织 39
2.6 本章小结 41
第3章 反编译器前端技术 42
3.1 指令解码 42
3.1.1 指令识别 42
3.1.2 指令映射 51
3.2 语义分析 56
3.2.1 常用编译习语 57
3.2.2 基本数据的传播 60
3.3 反编译的中间表示 64
3.4 控制流图 72
3.4.1 图的相关概念 72
3.4.2 基本块 73
3.4.3 控制流图的定义 74
3.4.4 控制流图的生成 77
3.5 本章小结 79
第4章 中间代码优化和提升 80
4.1 基本方法 80
4.2 反编译所需的数据流信息 88
4.3 数据流分析的理论基础 89
4.3.1 数据流分析框架 89
4.3.2 数据流分析模型 91
4.3.3 基本数据流方程 91
4.3.4 数据流分析方法 93
4.4 反编译的数据流问题 98
4.4.1 到达寄存器/条件码 99
4.4.2 活跃寄存器/条件码 99
4.4.3 可用寄存器/条件码 99
4.4.4 忙寄存器/条件码 100
4.5 中间代码优化算法 100
4.5.1 无用寄存器清除 100
4.5.2 无用条件码清除 102
4.5.3 条件码的传播 103
4.5.4 确定寄存器参数 105
4.5.5 确定函数返回寄存器(组) 106
4.5.6 寄存器复制传播 108
4.5.7 确定函数实际参数 112
4.5.8 跨子程序调用的数据类型传播 112
4.5.9 扩展的寄存器复制传播算法 113
4.5.10 寄存器变量清除 116
4.6 本章小结 117
第5章 高级控制结构恢复 118
5.1 控制结构模式 118
5.1.1 控制结构分类 118
5.1.2 可归约性 122
5.2 控制流分析的基本方法 123
5.2.1 支配结点和支配树 124
5.2.2 流图的访问方法 127
5.3 高级控制结构分析与识别 129
5.3.1 支配树分析 130
5.3.2 区间分析 135
5.3.3 结构分析 152
第6章 库函数恢复 165
6.1 库函数恢复的重要性 165
6.2 库函数相关概念 166
6.3 库函数恢复的问题 167
6.4 特征匹配法 168
6.4.1 基本方法 168
6.4.2 特征选取 169
6.5 函数签名法 170
6.5.1 基本方法 170
6.5.2 签名冲突 170
6.5.3 IDA的FLIRT技术 171
6.5.4 IDA的库函数恢复过程 172
6.6 两种静态库函数识别恢复比较 175
6.7 动态库函数的识别 175
6.8 本章小结 176
第7章 类型恢复 177
7.1 数据类型分类 177
7.2 二进制代码中的数据类型信息 178
7.3 基本数据类型恢复方法 179
7.3.1 基于函数调用的类型信息提取 179
7.3.2 基于指令特征的类型信息提取 181
7.3.3 基于规则的类型推导 185
7.4 结构数据类型的恢复 188
7.4.1 结构数据类型 188
7.4.2 类型分析对象 189
7.4.3 结构类型恢复基本思路 190
7.4.4 结构类型重构算法 192
7.5 本章小结 197
第8章 人工智能在反编译技术中的应用 198
8.1 基于NMT的反编译 198
8.1.1 神经机器翻译 198
8.1.2 基于NMT的反编译的基本思路 200
8.1.3 方法实现 202
8.2 基于RNN的反编译 207
8.2.1 反编译模型 208
8.2.2 语料库创建 209
8.2.3 预处理 210
8.2.4 训练 211
8.2.5 评估 211
8.3 本章小结 211
参考文献 212