摘要 | 第5-7页 |
ABSTRACT | 第7-8页 |
缩略语对照表 | 第11-15页 |
第一章 绪论 | 第15-19页 |
1.1 软件逆向工程的研究意义 | 第15-16页 |
1.2 国内外发展现状 | 第16-17页 |
1.3 论文内容及结构安排 | 第17-19页 |
第二章 软件逆向的基础 | 第19-29页 |
2.1 二进制可执行代码 | 第19-20页 |
2.1.1 分析二进制可执行代码的必要性 | 第19页 |
2.1.2 二进制对象文件格式 | 第19-20页 |
2.2 相关专业术语 | 第20-24页 |
2.2.1 反汇编 | 第20-21页 |
2.2.2 类布局和RTTI | 第21页 |
2.2.3 虚函数和虚表 | 第21-22页 |
2.2.4 API | 第22页 |
2.2.5 Windows消息机制 | 第22-23页 |
2.2.6 MSVC和GCC | 第23-24页 |
2.3 在软件逆向工程中使用工具 | 第24-29页 |
2.3.1 在逆向工程中使用分析工具的必要性 | 第24页 |
2.3.2 常见软件逆向工具简介 | 第24-25页 |
2.3.3 Intel指令结构 | 第25页 |
2.3.4 反汇编器工作原理 | 第25-27页 |
2.3.5 利用静态工具进行分析 | 第27-29页 |
第三章 静态逆向分析模型 | 第29-33页 |
3.1 使用IDA进行静态逆向分析的各个阶段 | 第29页 |
3.2 分析前处理 | 第29-33页 |
3.2.1 去除保护机制 | 第29-31页 |
3.2.2 分析程序中用到的函数 | 第31页 |
3.2.3 分析程序中的资源 | 第31页 |
3.2.4 分析入.函数 | 第31-32页 |
3.2.5 识别库函数 | 第32-33页 |
第四章 C语言元素分析 | 第33-43页 |
4.1 识别变量 | 第33-34页 |
4.1.1 识别栈变量 | 第33页 |
4.1.2 识别堆变量 | 第33页 |
4.1.3 寄存器变量和临时变量 | 第33-34页 |
4.1.4 识别全局变量和静态变量 | 第34页 |
4.2 识别特殊类型 | 第34-36页 |
4.2.1 识别字符串 | 第34-35页 |
4.2.2 识别结构体 | 第35-36页 |
4.3 识别语句 | 第36-39页 |
4.3.1 识别表达式 | 第36页 |
4.3.2 识别循环语句 | 第36-37页 |
4.3.3 识别分支语句 | 第37-39页 |
4.4 识别用户函数 | 第39-43页 |
4.4.1 函数序言(prolog)和函数结语(epilog) | 第39-40页 |
4.4.2 识别函数参数栈 | 第40-41页 |
4.4.3 识别函数栈变量 | 第41页 |
4.4.4 识别函数返回值类型 | 第41-42页 |
4.4.5 判定函数边界 | 第42-43页 |
第五章 分析程序中的C++语言元素 | 第43-59页 |
5.1 识别new和delete操作符 | 第43页 |
5.2 识别类 | 第43-51页 |
5.2.1 编译器对类及类实例的处理行为 | 第43-46页 |
5.2.2 识别RTTI信息 | 第46-47页 |
5.2.3 识别不同类型的对象 | 第47-48页 |
5.2.4 识别类构造函数和析构函数 | 第48-49页 |
5.2.5 识别创建对象实例行为 | 第49-50页 |
5.2.6 识别类成员函数 | 第50页 |
5.2.7 重建类 | 第50-51页 |
5.3 识别异常处理 | 第51-59页 |
5.3.1 C++异常处理 | 第51-52页 |
5.3.2 32位程序SEH结构化异常处理 | 第52-55页 |
5.3.3 64位程序SEH结构化异常处理 | 第55-59页 |
第六章 逆向模型的测试 | 第59-67页 |
6.1 使用代码分析工具辅助分析 | 第59-60页 |
6.2 使用该模型分析C++程序实例 | 第60-67页 |
6.2.1 实施逆向模型操作流程 | 第60-65页 |
6.2.2 重建开发文档 | 第65-67页 |
第七章 总结与展望 | 第67-69页 |
7.1 主要工作和结论 | 第67页 |
7.2 未来工作展望 | 第67-69页 |
参考文献 | 第69-73页 |
致谢 | 第73-75页 |
作者简介 | 第75-77页 |
1.基本情况 | 第75页 |
2.教育背景 | 第75页 |
3.在学期间的研究成果 | 第75-77页 |