欢迎来到天天文库
浏览记录
ID:33125850
大小:1.00 MB
页数:69页
时间:2019-02-20
《反编译器c-decompiler关键技术的研究和实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、上海交通大学硕士学位论文反编译器C-Decompiler关键技术的研究和实现姓名:陈耿标申请学位级别:硕士专业:软件工程指导教师:戚正伟20100220反编译器C-Decompiler关键技术的研究和实现反编译器C-Decompiler关键技术的研究与实现摘要作为逆向领域的关键部分,反编译技术在软件安全和维护方面扮演着非常重要的角色。反编译技术起源于上世纪60年代,只比编译技术晚10年。但反编译技术的成熟度远不如编译技术。反编译领域存在很多亟需解决的难点。数据流分析是其中最为困难的一点。在过去50年的发展过程中,出现了不少实验
2、性的反编译器。其中以Dcc,Boomerang和IDAPro的反编译插件Hex_rays最为著名。然而这些反编译器都存在着各种各样的缺陷。例如,Dcc只能识别最简单的数据类型,是这三个反编译器中反编译功能最弱的一个;Boomerang则无法识别复杂的数据结构,如C++的类和多维数组;Hex_rays只能产生可读性较低的C伪代码,同样无法识别复杂的数据结构。本文在前人的基础上,提出了3项新技术用于反编译领域。分别为:1)基于轻量级虚拟机的二进制解析器。该技术可以有效地识别出子程序的参数和局部变量,同时解决了通过栈空间进行数据传递
3、的问题。2)跨基本块寄存器传播技术。在已有的数据流分析方法中,寄存器的传播都是局限于基本块内部,这样导致基本块之间变量的关系不明显,寄存器传播不彻底。使用跨基本块寄存器传播技术可以方便地解决这问题。3)采用公有签名法进行C++STL(标准模版库:StandardTemplateLibrary)识别。通过公有签名最优匹配的方法,可以有效识别不同编译器、不同优化选项组合、不同版本的C++STL。在已公开的反编译器中,还没有任何一个能做到在没有符号信息的情况下识别C++STL。本文提出的采用公有签名法进行C++STL的识别可以在没有
4、符号信息的情况下识别出C++STL。另外,本文通过对MicrosoftVisualC++编译器对C++的编译行为的分析,得出一套有效识别C++类、类成员函数以及类之间关系的方法,这是进行C++后续反编译的基础。以上3项新技术和对C++类、类成员函数和类之间的关系的识别在一个名为C-Decompiler的C/C++反编译上得以实现。它运行于windows操作系统,读取输入的exe文件,生成对应功能的C/C++代码。反编译器C-Decompiler架构的创新之处在于加入了堆栈监视器(StackMonitor),它利用轻量级虚拟机技
5、术对反编译的前端进行全程监视,从而实现堆I反编译器C-Decompiler关键技术的研究和实现栈跟踪的目的。实验结果方面,提供了8个测试程序,分别从不同的方面反映C-Decompiler的反编译能力。在函数分析,变量分析、代码缩减率(reduction%)、代码膨胀率(expansion%)、误识别率和漏识别率等方面均优于其他两个有名的反编译器:IDAPro的Hex_rays和Boomerang。本文设计和实现的反编译器C-Decompiler于2009年10月获得“中科张江杯”青年技术创新大赛第一名。关键词反编译,逆向工程,
6、数据流分析,控制流分析II反编译器C-Decompiler关键技术的研究和实现THEKEYTECHNOLOGYRESEARCHANDIMPLEMENTIONOFDECOMPILERC-DECOMPILERABSTRACTAsakeypartofreverseengineering,decompiletechnologyplayaveryimportantroleinsoftwaresecurityandmaintenance.Decompiletechnologyoriginatedinthe60soflastcentury,
7、only10yearslaterthanthecompilertechnology.However,decompiletechnologyisfarfrommature.Therearemanytechnologyissuestobesolved.Dataflowanalysisisoneofthemostdifficultissues.Inthepast50years,therearemanyexperimentaldecompilers.Amongthem,Dcc、BoomerangandtheHex_raysarethe
8、mostfamous.However,thesedecompilershavedefectsindifferentaspects.Forexample,Dcccanonlyidentifythebasicdatatypes.Boomerangcannotrecognizeco
此文档下载收益归作者所有