摘要 | 第4-6页 |
Abstract | 第6-7页 |
第一章 引言 | 第13-18页 |
1.1 研究背景 | 第13-16页 |
1.2 研究内容 | 第16页 |
1.3 论文组织结构 | 第16-18页 |
第二章 相关工作 | 第18-31页 |
2.1 针对静态代码的攻防角逐 | 第18-26页 |
2.1.1 代码注入攻击与W(?)X机制 | 第18-19页 |
2.1.2 代码复用攻击及防御 | 第19-23页 |
2.1.3 JIT-ROP攻防 | 第23-26页 |
2.2 动态生成代码的攻防 | 第26-29页 |
2.2.1 JIT喷洒攻击 | 第26-28页 |
2.2.2 利用显式常量构建ROP攻击 | 第28-29页 |
2.3 隐式常量的滥用 | 第29-30页 |
2.3.1 条件跳转指令中的隐式常量 | 第29-30页 |
2.3.2 call指令中的隐式常量 | 第30页 |
2.4 本章小结 | 第30-31页 |
第三章 针对隐式常量攻击的防御方案分析 | 第31-35页 |
3.1 隐式常量ROP攻击的防御原理 | 第31-32页 |
3.2 可能的防御方案分析 | 第32-34页 |
3.2.1 插入NOP指令 | 第32-33页 |
3.2.2 隐藏隐式常数 | 第33页 |
3.2.3 保护函数指针 | 第33-34页 |
3.3 本章小结 | 第34-35页 |
第四章 寄存器随机化与代码改写 | 第35-46页 |
4.1 动态代码生成的过程 | 第35-37页 |
4.1.1 字节码 | 第35-36页 |
4.1.2 解释执行 | 第36页 |
4.1.3 即时编译器 | 第36-37页 |
4.2 防御方案原理 | 第37-38页 |
4.3 寄存器随机化 | 第38-43页 |
4.3.1 Linux x64平台上指令的格式 | 第38-40页 |
4.3.2 寄存器的使用 | 第40-41页 |
4.3.3 函数的调用约定 | 第41-43页 |
4.4 代码改写 | 第43-44页 |
4.4.1 代码改写的作用 | 第43页 |
4.4.2 代码改写的过程 | 第43-44页 |
4.5 可行性分析 | 第44-45页 |
4.6 本章小结 | 第45-46页 |
第五章 实现 | 第46-58页 |
5.1 SpiderMonkey简介 | 第46-48页 |
5.1.1 Baseline编译器 | 第46页 |
5.1.2 IonMonkey | 第46-48页 |
5.1.3 SpiderMonkey执行脚本代码过程 | 第48页 |
5.2 程序插桩 | 第48-49页 |
5.3 代码生成过程中实现寄存器随机化 | 第49-53页 |
5.3.1 置换规则的选取 | 第50-51页 |
5.3.2 遵循函数调用约定 | 第51-53页 |
5.3.3 寄存器随机化方案有效性分析 | 第53页 |
5.4 动态生成代码的改写 | 第53-56页 |
5.4.1 动态生成代码的存储 | 第53-54页 |
5.4.2 有害隐式常数的查找与收集 | 第54-55页 |
5.4.3 指令改写 | 第55-56页 |
5.5 整体工作过程图 | 第56-57页 |
5.6 本章小结 | 第57-58页 |
第六章 实验与评估 | 第58-63页 |
6.1 实验平台 | 第58-59页 |
6.2 即时编译过程正确性测试 | 第59-60页 |
6.3 性能与内存空间开销 | 第60-62页 |
6.4 有效性讨论 | 第62页 |
6.5 本章小结 | 第62-63页 |
第七章 总结与展望 | 第63-65页 |
7.1 总结 | 第63页 |
7.2 下一步工作的展望 | 第63-65页 |
参考文献 | 第65-68页 |
攻读硕士学位期间的研究成果 | 第68页 |
攻读硕士学位期间参加的项目 | 第68-69页 |
致谢 | 第69-70页 |