摘要 | 第5-7页 |
ABSTRACT | 第7-8页 |
1 绪论 | 第12-15页 |
1.1 研究背景 | 第12页 |
1.2 研究目的和意义 | 第12-13页 |
1.3 研究目标和内容 | 第13页 |
1.3.1 研究目标 | 第13页 |
1.3.2 研究内容 | 第13页 |
1.4 论文结构 | 第13-15页 |
2 国内外研究现状及分析 | 第15-18页 |
2.1 现状分析 | 第15-16页 |
2.2 研究方法 | 第16-17页 |
2.3 本章小结 | 第17-18页 |
3 反编译概述 | 第18-27页 |
3.1 编译与反编译 | 第18-21页 |
3.1.1 编译器简介 | 第18-19页 |
3.1.2 编译与反编译的相同点 | 第19-21页 |
3.2 软件逆向工程与反编译 | 第21-23页 |
3.2.1 软件逆向工程简介 | 第21页 |
3.2.2 常用软件逆向工具 | 第21-23页 |
3.3 字节码反编译和机器码反编译 | 第23页 |
3.4 反编译的合法性 | 第23-24页 |
3.5 反编译技术简介 | 第24-26页 |
3.5.1 关键技术和概念介绍 | 第24-25页 |
3.5.2 实施数据流分析的方法 | 第25-26页 |
3.6 本章小结 | 第26-27页 |
4 反编译器C-Decompiler 的关键技术 | 第27-60页 |
4.1 当前反编译器存在的一些问题 | 第27-30页 |
4.1.1 存在的问题 | 第27-29页 |
4.1.2 相关研究工作 | 第29-30页 |
4.1.3 C-Decompiler 的解决方案 | 第30页 |
4.2 基于轻量级虚拟机的二进制解析器 | 第30-36页 |
4.2.1 常规算法识别局部变量和函数参数 | 第30-31页 |
4.2.2 常规算法识别存在的问题 | 第31-32页 |
4.2.3 轻量级虚拟机工作原理 | 第32-34页 |
4.2.4 轻量级虚拟机技术识别参数和局部变量算法演示 | 第34-35页 |
4.2.5 算法补充 | 第35-36页 |
4.2.6 算法总结 | 第36页 |
4.3 跨基本块寄存器传播 | 第36-43页 |
4.3.1 寄存器传播介绍 | 第36-37页 |
4.3.2 当前寄存器传播基本算法 | 第37-38页 |
4.3.3 跨基本块寄存器传播技术难点 | 第38-39页 |
4.3.4 跨基本块寄存器传播算法 | 第39-40页 |
4.3.5 当前寄存器传播算法与跨基本块寄存器传播算法结果比较 | 第40-42页 |
4.3.6 跨基本块寄存器传播算法总结 | 第42-43页 |
4.4 采用公有签名法进行C++ STL 识别 | 第43-47页 |
4.4.1 C++ STL 识别应用和技术难点 | 第43页 |
4.4.2 公有签名法概述 | 第43-44页 |
4.4.3 公有签名法实现方案 | 第44页 |
4.4.4 签名冲突 | 第44-45页 |
4.4.5 签名冲突解决方法 | 第45-46页 |
4.4.6 特殊的签名冲突 | 第46-47页 |
4.4.7 公有签名法总结 | 第47页 |
4.5 C++类的反编译 | 第47-57页 |
4.5.1 C++类介绍 | 第48-49页 |
4.5.2 C++类的识别 | 第49-52页 |
4.5.3 C++类的特殊成员函数的识别 | 第52-54页 |
4.5.4 C++类与类之间的继承关系识别 | 第54-56页 |
4.5.5 C++类识别总结 | 第56-57页 |
4.6 反编译器C-Decompiler 的总体结构 | 第57-58页 |
4.6.1 二进制解析器 | 第57-58页 |
4.6.2 基于中间代码的子系统 | 第58页 |
4.7 本章小结 | 第58-60页 |
5 反编译器C-Decompiler 的实验结果 | 第60-68页 |
5.1 整体测试 | 第60-64页 |
5.1.1 函数分析 | 第61-63页 |
5.1.2 变量分析 | 第63-64页 |
5.2 全方面的反编译结果 | 第64-66页 |
5.2.1 基本计算测试 | 第64-65页 |
5.2.2 字符串操作 | 第65页 |
5.2.3 函数调用 | 第65页 |
5.2.4 综合测试 | 第65-66页 |
5.3 实验结果总结 | 第66-67页 |
5.4 本章小结 | 第67-68页 |
6 总结和展望 | 第68-70页 |
6.1 总结 | 第68-69页 |
6.2 展望 | 第69-70页 |
参考文献 | 第70-72页 |
致谢 | 第72-73页 |
攻读学位期间发表的学术论文 | 第73-75页 |