本发明涉及计算机,尤其涉及一种逆向工程还原源代码的实现方法、装置和电子设备。
背景技术:
1、逆向工程是指通过逆向分析一个软件系统的二进制代码来了解其内部运行机制和设计原理。在实际应用中,逆向工程常常用于软件调试、软件安全分析和软件版权保护等领域。逆向分析的过程中,通常需要使用反汇编器将二进制代码转换成汇编代码,再通过手工或工具分析汇编代码,最终还原出软件的源代码。
2、然而,在实际逆向分析过程中,由于汇编代码的复杂性和人工分析的限制,通常只能还原出部分源代码,而且还原出来的代码质量往往无法满足开发人员的需求。因此,如何提高逆向代码还原的质量和效率,成为了当前逆向工程领域的亟待解决的问题。
技术实现思路
1、有鉴于此,有必要提供一种逆向工程还原源代码的实现方法、装置和电子设备,用以实现提高逆向代码还原的质量和效率的目的。
2、为了实现上述目的,本发明提供一种逆向工程还原源代码的实现方法,包括:
3、获取目标程序的二进制文件,并提取所述二进制文件中的信息;
4、对所述二进制文件进行结构分析得到所述目标程序的结构信息,对所述二进制文件进行控制流分析得到所述目标程序的控制流信息,对所述二进制文件进行变量分析得到所述目标程序函数变量的类型和作用域信息;
5、对所述二进制文件进行内存分析得到所述目标程序的内存分布信息,对所述二进制文件进行寄存器分析得到所述目标程序在寄存器上的操作信息,对所述二进制文件进行系统调用分析得到所述目标程序与操作系的交互信息;
6、基于所述二进制文件中的信息、所述结构信息、所述控制流信息、所述目标程序函数变量的类型以及作用于信息、所述内存分布信息、所述寄存器上的操作信息和所述交互信息对所述二进制文件进行反汇编得到所述二进制文件的汇编语言代码;
7、将所述汇编语言代码转化为高级语言代码,并对所述高级语言代码进行结构优化和语法修正,得到所述目标程序的源代码。
8、在一些可能的实现方式中,所述获取目标程序的二进制文件,并提取所述二进制文件中的信息,包括:
9、通过二进制文件分析工具获取所述目标程序的二进制文件;
10、通过反汇编工具提取所述二进制文件的汇编指令序列;
11、根据所述二进制文件的汇编指令序列得到所述二进制文件中的信息,所述二进制文件中的信息包括目标程序的入口点和函数地址。
12、在一些可能的实现方式中,所述对所述二进制文件进行结构分析得到所述目标程序的结构信息,包括:
13、将所述二进制文件划分为若干个基本块;
14、对所述若干个基本块进行指令解析,得到所述基本块指令的类型、操作数和操作类型;
15、根据所述基本块指令的类型、操作数和操作类型将所述若干个基本块件排序,得到所述目标程序的结构信息。
16、在一些可能的实现方式中,所述对所述二进制文件进行控制流分析得到所述目标程序的控制流信息,包括:
17、对所述二进制文件进行控制流分析得到所述二进制文件中函数的调用关系、条件跳转关系和循环分支关系;
18、将所述二进制文件中函数的调用关系、条件跳转关系和循环分支关系添加到控制流程图中;
19、基于所述控制流程图得到所述目标程序的控制流信息。
20、在一些可能的实现方式中,所述对所述二进制文件进行内存分析得到所述目标程序的内存分布信息,对所述二进制文件进行寄存器分析得到所述目标程序在寄存器上的操作信息,对所述二进制文件进行系统调用分析得到所述目标程序与操作系的交互信息,包括:
21、通过内存监视工具获取所述目标程序内存分布信息;
22、通过调试器监控所述目标程序在寄存器上的访问行为,获取目标程序在寄存器上的操作信息;
23、通过程序调试工具获取所述目标程序与操作系统的交互信息。
24、在一些可能的实现方式中,所述基于所述二进制文件中的信息、所述结构信息、所述控制流信息、所述目标程序函数变量的类型以及作用于信息、所述内存分布信息、所述寄存器上的操作信息和所述交互信息对所述二进制文件进行反汇编得到所述二进制文件的汇编语言代码,包括:
25、根据所述目标程序的入口点和函数地址确定代码重构的起点;
26、基于所述结构信息、所述控制流信息、所述目标程序函数变量的类型以及作用于信息、所述内存分布信息、所述寄存器上的操作信息和所述交互信息进行代码重构得到汇编指令;
27、对所述二进制文件中的伪指令进行恢复;
28、基于所述重构的起点、所述汇编指令和所述伪指令,得到所述二进制文件中的函数的入口、出口和内部执行顺序;
29、根据所述二进制文件中的函数的入口、出口和内部执行顺序确定所述二进制文件的汇编语言代码。
30、在一些可能的实现方式中,还包括通过自动化测试工具对所述目标程序的源代码进行测试,以使所述目标程序的源代码和目标程序的功能一致。
31、另一方面,本发明还提供了一种逆向工程还原源代码的实现装置,包括:
32、二进制文件信息获取单元,用于获取目标程序的二进制文件,并提取所述二进制文件中的信息;
33、二进制文件静态分析单元,用于对所述二进制文件进行结构分析得到所述目标程序的结构信息,对所述二进制文件进行控制流分析得到所述目标程序的控制流信息,对所述二进制文件进行变量分析得到所述目标程序函数变量的类型和作用域信息;
34、二进制文件动态分析单元,用于对所述二进制文件进行内存分析得到所述目标程序的内存分布信息,对所述二进制文件进行寄存器分析得到所述目标程序在寄存器上的操作信息,对所述二进制文件进行系统调用分析得到所述目标程序与操作系的交互信息;
35、汇编语言代码获取单元,用于基于所述二进制文件中的信息、所述结构信息、所述控制流信息、所述目标程序函数变量的类型以及作用于信息、所述内存分布信息、所述寄存器上的操作信息和所述交互信息对所述二进制文件进行反汇编得到所述二进制文件的汇编语言代码;
36、源代码获取单元,用于将所述汇编语言代码转化为高级语言代码,并对所述高级语言代码进行结构优化和语法修正,得到所述目标程序的源代码。
37、另一方面,本发明还提供了一种电子设备,包括存储器和处理器,其中,
38、所述存储器,用于存储程序;
39、所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以实现上述任意一种实现方式中所述的一种逆向工程还原源代码的实现方法中的步骤。
40、另一方面,本发明还提供了一种计算机可读存储介质,用于存储计算机可读取的程序或指令,所述程序或指令被处理器执行时能够实现上述任意一种实现方式中所述的一种逆向工程还原源代码的实现方法中的步骤。
41、采用上述实施例的有益效果是:本发明提供的一种逆向工程还原源代码的实现方法,首先获取目标程序的二进制文件并提取二进制文件中的信息,然后对二进制文件静态分析得到结构信息、控制流信息、目标程序函数变量的类型以及作用于信息,进一步对二进制文件动态分析得到内存分布信息、寄存器上的操作信息和交互信息,最后基于二进制文件中的信息、静态分析的数据和动态分析的数据对二进制文件进行反汇编得到所二进制文件的汇编语言代码,最后将汇编语言代码转化为高级语言代码并进行结构优化和语法修正,得到目标程序的源代码。本发明对目标程序进行文件分析、静态分析、动态分析、汇编语言还原和语义还原,能高效准确地还原出原始源代码。