摘要 | 第4-5页 |
abstract | 第5-6页 |
第一章 绪论 | 第10-16页 |
1.1 研究背景及意义 | 第10-12页 |
1.2 国内外研究现状 | 第12-13页 |
1.3 本文的主要贡献与创新 | 第13-14页 |
1.4 本论文的结构安排 | 第14-16页 |
第二章 Android系统及安全 | 第16-23页 |
2.1 Android系统介绍 | 第16-19页 |
2.1.1 Android体系结构 | 第16-17页 |
2.1.2 Dalvik虚拟机 | 第17-18页 |
2.1.3 APK文件结构 | 第18-19页 |
2.2 Android逆向工程 | 第19-22页 |
2.2.1 Android逆向工程简介 | 第19-20页 |
2.2.2 Smali基本语法 | 第20-21页 |
2.2.3 常用Android逆向工具 | 第21页 |
2.2.4 代码混淆技术 | 第21-22页 |
2.3 本章小结 | 第22-23页 |
第三章 多维度Dalvik字节码混淆方法研究 | 第23-48页 |
3.1 总体框架设计 | 第23-24页 |
3.2 基于Smali的信息提取方法设计 | 第24-30页 |
3.2.1 控制流图相关概念 | 第24-25页 |
3.2.2 Smali跳转指令分析 | 第25-28页 |
3.2.2.1 if条件分支跳转 | 第25-26页 |
3.2.2.2 无条件跳转 | 第26-27页 |
3.2.2.3 switch分支跳转 | 第27-28页 |
3.2.3 基于Smali指令的控制流提取 | 第28-30页 |
3.3 多维度混淆方法设计 | 第30-45页 |
3.3.1 结构识别的布局混淆 | 第30-33页 |
3.3.1.1 布局混淆限制 | 第30-31页 |
3.3.1.2 布局混淆基本方法设计 | 第31-33页 |
3.3.1.3 混淆限制解决方法 | 第33页 |
3.3.2 函数分割的控制流混淆 | 第33-44页 |
3.3.2.1 基于控制流图的函数分割算法设计 | 第34-37页 |
3.3.2.2 必经非循环结点计算 | 第37-39页 |
3.3.2.3 寄存器中间值传递 | 第39-42页 |
3.3.2.4 基于函数分割的控制流平坦化算法设计 | 第42-44页 |
3.3.3 字节存储的字符串混淆 | 第44-45页 |
3.3.3.1 字节存储字符串方法设计 | 第45页 |
3.3.3.2 基于反射的密钥修改 | 第45页 |
3.4 寄存器类型冲突及其解决 | 第45-47页 |
3.4.1 寄存器类型冲突产生原因 | 第45-46页 |
3.4.2 寄存器类型冲突解决方法 | 第46-47页 |
3.5 本章小结 | 第47-48页 |
第四章 混淆原型系统设计与实现 | 第48-62页 |
4.1 系统设计目标 | 第48页 |
4.2 系统架构设计 | 第48-50页 |
4.3 模块设计与实现 | 第50-61页 |
4.3.1 编译模块 | 第50页 |
4.3.2 指令解析模块 | 第50-51页 |
4.3.3 信息提取模块 | 第51-55页 |
4.3.4 混淆模块 | 第55-60页 |
4.3.4.1 布局混淆子模块 | 第55-56页 |
4.3.4.2 控制流混淆子模块 | 第56-59页 |
4.3.4.3 字符串混淆子模块 | 第59-60页 |
4.3.5 混淆修复模块 | 第60-61页 |
4.4 本章小结 | 第61-62页 |
第五章 系统实验与分析 | 第62-76页 |
5.1 实验环境 | 第62页 |
5.2 功能性测试 | 第62-63页 |
5.3 安全性分析 | 第63-70页 |
5.4 性能分析 | 第70-75页 |
5.4.1 代码体积 | 第70-71页 |
5.4.2 启动时间 | 第71-73页 |
5.4.3 时间复杂度 | 第73-75页 |
5.5 本章小结 | 第75-76页 |
第六章 总结与展望 | 第76-78页 |
6.1 论文工作总结 | 第76页 |
6.2 后续研究工作 | 第76-78页 |
致谢 | 第78-79页 |
参考文献 | 第79-82页 |
攻读硕士学位期间取得的成果 | 第82页 |