反编译器C-Decompiler关键技术的研究和实现

反编译器C-Decompiler关键技术的研究和实现

论文摘要

作为逆向领域的关键部分,反编译技术在软件安全和维护方面扮演着非常重要的角色。反编译技术起源于上世纪60年代,只比编译技术晚10年。但反编译技术的成熟度远不如编译技术。反编译领域存在很多亟需解决的难点。数据流分析是其中最为困难的一点。在过去50年的发展过程中,出现了不少实验性的反编译器。其中以Dcc,Boomerang和IDA Pro的反编译插件Hexrays最为著名。然而这些反编译器都存在着各种各样的缺陷。例如,Dcc只能识别最简单的数据类型,是这三个反编译器中反编译功能最弱的一个;Boomerang则无法识别复杂的数据结构,如C++的类和多维数组;Hexrays只能产生可读性较低的C伪代码,同样无法识别复杂的数据结构。本文在前人的基础上,提出了3项新技术用于反编译领域。分别为:1)基于轻量级虚拟机的二进制解析器。该技术可以有效地识别出子程序的参数和局部变量,同时解决了通过栈空间进行数据传递的问题。2)跨基本块寄存器传播技术。在已有的数据流分析方法中,寄存器的传播都是局限于基本块内部,这样导致基本块之间变量的关系不明显,寄存器传播不彻底。使用跨基本块寄存器传播技术可以方便地解决这问题。3)采用公有签名法进行C++ STL(标准模版库: Standard Template Library)识别。通过公有签名最优匹配的方法,可以有效识别不同编译器、不同优化选项组合、不同版本的C++ STL。在已公开的反编译器中,还没有任何一个能做到在没有符号信息的情况下识别C++ STL。本文提出的采用公有签名法进行C++ STL的识别可以在没有符号信息的情况下识别出C++ STL。另外,本文通过对Microsoft Visual C++编译器对C++的编译行为的分析,得出一套有效识别C++类、类成员函数以及类之间关系的方法,这是进行C++后续反编译的基础。以上3项新技术和对C++类、类成员函数和类之间的关系的识别在一个名为C-Decompiler的C/C++反编译上得以实现。它运行于windows操作系统,读取输入的exe文件,生成对应功能的C/C++代码。反编译器C-Decompiler架构的创新之处在于加入了堆栈监视器(Stack Monitor),它利用轻量级虚拟机技术对反编译的前端进行全程监视,从而实现堆栈跟踪的目的。实验结果方面,提供了8个测试程序,分别从不同的方面反映C-Decompiler的反编译能力。在函数分析,变量分析、代码缩减率(reduction%)、代码膨胀率(expansion%)、误识别率和漏识别率等方面均优于其他两个有名的反编译器:IDA Pro的Hexrays和Boomerang。本文设计和实现的反编译器C-Decompiler于2009年10月获得“中科张江杯”青年技术创新大赛第一名。

论文目录

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

    • [1].方舟编译器初探[J]. 科技与创新 2019(23)
    • [2].一种适用于可信编译器的源语言转换与检查框架[J]. 中国科技论文 2017(14)
    • [3].华为方舟编译器开源官网正式上线:源代码已开放下载[J]. 电脑知识与技术(经验技巧) 2019(10)
    • [4].快速掌握编译器设计方法[J]. 软件 2018(05)
    • [5].一种新的大容量SRAM编译器设计[J]. 微电子学 2015(04)
    • [6].可信编译器构造的翻译确认方法简述[J]. 计算机科学 2014(S1)
    • [7].计算智能技术在分布式多编译器中的应用分析[J]. 节水灌溉 2011(05)
    • [8].优化编译器的设计[J]. 群文天地 2011(14)
    • [9].关于C编译器对——运算编译的研究[J]. 电脑知识与技术 2010(18)
    • [10].基于编译器优化的嵌入式软件缺陷分析方法[J]. 航天控制 2016(05)
    • [11].一种农业设备嵌入式数据库预编译器设计与实现[J]. 农业网络信息 2012(03)
    • [12].编译器无关性编码在微控制器中的优势[J]. 单片机与嵌入式系统应用 2010(02)
    • [13].可信编译器关键技术研究[J]. 计算机工程与科学 2010(08)
    • [14].可视编译器的设计与实现[J]. 计算机与现代化 2010(10)
    • [15].类高级语言编译器的设计与实现[J]. 内蒙古科技与经济 2009(16)
    • [16].超强通用编译器优化工具 准确率是传统方法的5倍[J]. 计算机与网络 2020(02)
    • [17].一种静态的编译器重复缺陷报告识别方法[J]. 中国科学:信息科学 2019(10)
    • [18].魂芯DSP上复数类型的支持和优化[J]. 计算机系统应用 2017(09)
    • [19].软件/开发工具[J]. 今日电子 2014(02)
    • [20].出具证明编译器中代码优化与程序规范转换[J]. 小型微型计算机系统 2011(07)
    • [21].NI LabVIEW2010优化编译器,加速代码执行[J]. 电子测量技术 2010(08)
    • [22].运行速度大突破 华为《方舟编译器》详解[J]. 计算机与网络 2019(09)
    • [23].典型编译器自动向量化效果评估与分析[J]. 计算机科学 2013(04)
    • [24].一种支持软件演化过程描述语言的编译器的设计分析[J]. 绵阳师范学院学报 2013(02)
    • [25].基于C语言编译器的词法分析浅析[J]. 电脑知识与技术 2013(24)
    • [26].C-编译器的扫描程序与分析程序设计[J]. 信息与电脑(理论版) 2012(14)
    • [27].FANUC宏编译器的应用[J]. 精密制造与自动化 2008(04)
    • [28].高速SRAM编译器时序算法[J]. 电子与封装 2016(07)
    • [29].出具证明编译器中线性整数命题证明的自动生成[J]. 小型微型计算机系统 2011(06)
    • [30].即时编译器辅助的垃圾收集中的插桩算法研究[J]. 小型微型计算机系统 2010(04)

    标签:;  ;  ;  ;  

    反编译器C-Decompiler关键技术的研究和实现
    下载Doc文档

    猜你喜欢