论文部分内容阅读
近年来,软件逆向分析由于其在软件领域的独特作用而受到日益广泛的重视,众所周知,Windows系统具有庞大的软件群和用户群,一方面Windows下系统和软件安全一直备受关注,另一方面由于现代软件开发离底层开发越走越远,如何进一步提高程序运行效率是亟待解决的问题,因此本文对Windows操作系统下C/C++逆向分析技术进行了研究,并取得了如下成果:1.针对Windows系统下的C/C++程序,基于后面提出的C/C++高级语言语法恢复方法,提出了一个较为系统的、通用的、可实践的逆向分析模型,并对该模型中每一个高级语言元素都做了原理上和操作方法上的阐述,最后以实例验证该模型的可用性。该模型可以在一定程序上简化逆向分析中的例行操作,将分析中最耗时间也较为通用的的工作简化,从而使逆向工作者的精力主要集中在对软件设计模式、数据结构、算法和功能等核心部分的逆向分析上,有效提高逆向工作效率。2.本文对常见数据类型、表达式、语句、函数结构等基本的C语言元素进行语法分析和底层实现分析;对函数栈结构的函数序言和函数结语结构进行剖析;根据内存变量使用情况提出了一种识别变量生命周期的方法;基于函数栈帧原理提出了一种切实可行的函数边界检测方法,该方法可以准确定位特定高级语言函数的机器码范围。3.本文介绍了C++区别于C语言的高级语言特性和实现原理,并提出了切实可行的恢复方法,其中包括对new和delete操作符的实现原理进行了分析;对一般类类型的对象内存布局原理进行总结;基于内存对象布局理论提出了一种恢复类结构(包括成员变量和成员函数)的方法,该方法可以用于重建类和识别程序中创建的对象;分析了SEH实现机制和32/64位Windows程序异常处理结构;基于SEH实现机制、C++异常处理底层实现原理和RTTI设计原理提出了Windows程序异常处理语句恢复方法,该方法支持32/64位Windows程序中异常处理语句的恢复。4.最后本文通过实例演示了如何利用文中提出的逆向分析模型,借助分析工具,对Windows下一般应用软件进行逆向分析的整个流程,输入二进制可执行代码,通过分析文件类型、查找程序入口、分析C/C++语言元素、分析函数功能、分析算法,输出软件设计流程、算法和文档,在这个过程中合理协调软件与人工分析共同完成软件逆向工作,例证了该模型的正确性和可用性。