本发明涉及计算机领域,尤其涉及一种反编译方法、工具、可读存储介质及程序产品。
背景技术:
1、kotlin是一种基于java虚拟机的编程语言,它具有许多优秀的特性,例如:可空类型、扩展函数、数据类、高阶函数等。由于kotlin编译后的字节码与java编译后的字节码在组织方式上有所不同,因此kotlin程序的反编译比java程序更加困难。目前已有一些kotlin反编译工具,但它们的反编译效果并不理想,仅能够反编译为java代码,无法支持kotlin内的高级特性,在包含这些特性时,现有的反编译工具无法工作,无法得到正确的反编译结果。因此需要一种更加高效、完善的kotlin反编译工具。
技术实现思路
1、有鉴于此,本发明实施例提供了一种反编译方法、工具、可读存储介质及程序产品,用以解决传统kotlin反编译工具无法支持kotlin内的高级特性,以及反编译速度慢、准确性差的技术问题。
2、第一方面,本发明实施例提供一种反编译方法,包括以下步骤:
3、获取目标字节码文件;
4、将所述字节码文件解析为指令列表,并按照,并按照预设的方式识别和处理所述字节码文件的kotlin特性识别和处理所述字节码文件的kotlin特性;
5、根据所述指令列表构建抽象语法树;
6、将所述抽象语法树转换成kotlin源代码。
7、优选地,将所述字节码文件解析为指令列表包括以下步骤:
8、读取所述字节码文件;
9、将所述字节码文件解析成指令流;
10、将所述指令流中的每个指令封装成指令对象;
11、将所述指令对象整合成所述指令列表。
12、优选地,将所述字节码文件解析成指令流的过程中,根据kotlin语法规则对所述字节码文件进行处理,以正确地识别和处理kotlin特性。
13、优选地,根据所述指令列表构建抽象语法树包括以下步骤:
14、读取所述指令列表;
15、根据所述指令列表生成所述抽象语法树中的节点,并将所述节点连接以形成所述抽象语法树。
16、优选地,形成所述抽象语法树之后,还包括以下步骤:
17、通过合并相邻节点、优化变量声明顺序对所述抽象语法树进行优化。
18、优选地,将所述抽象语法树转换成kotlin源代码包括以下步骤:
19、判断所述抽象语法树是否可以直接生成kotlin源代码,若可以,则遍历所述抽象语法树,将所述抽象语法树转换为kotlin源代码,若不可以,则将所述抽象语法树生成java源代码,然后按照预设的分析逻辑对所述java源代码进行分析,再将所述java源代码转换为kotlin源代码。
20、第二方面,本发明实施例提供一种反编译工具,包括:
21、接收模块:用于获取目标字节码文件;
22、字节码解析模块:用于将所述字节码文件解析为指令列表;
23、抽象语法树构建模块:用于根据所述指令列表构建抽象语法树;
24、反编译模块:用于将所述抽象语法树转换成kotlin源代码。
25、优选地,还包括代码模块,所述代码模块用于将所述反编译模块生成的kotlin源代码输出到目标文件中。
26、第三方面,本发明实施例提供一种可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被执行时实现如上述方法的步骤。
27、第四方面,本发明实施例提供一种程序产品,其上包括计算机程序指令,所述计算机程序指令被执行时实现如上述方法的步骤。
28、与现有技术相比,本发明所提供的一种反编译方法,具有如下的有益效果:
29、本发明实施例提供反编译方法包括以下步骤:获取目标字节码文件;将所述字节码文件解析为指令列表,并按照,并按照预设的方式识别和处理所述字节码文件的kotlin特性识别和处理所述字节码文件的kotlin特性;根据所述指令列表构建抽象语法树;将所述抽象语法树转换成kotlin源代码。可以理解地,当前市场上已有的反编译工具虽然可以将kotlin程序反编译成java源代码,但反编译结果必定存在语法错误,并且无法识别kotlin的高级特性,对于需要研究相关代码的人员来说,极大影响了他们的工作效率,并且也无法得到正确的代码。此外目前的kotlin反编译工具,其反编译速度较慢,同时包含有在反编译过程中程序卡死或导致操作系统卡死的情况,进一步增加了相应的成本。而在本发明提供的反编译方法中,通过在对字节码的解析步骤添加kotlin特性识别的流程,使得反编译方法可好地支持更多的kotlin高级特性,例如:可空类型、扩展函数、数据类、高阶函数等,进而提高了反编译的效率和准确性。
1.一种反编译方法,用于对kotlin程序进行反编译,其特征在于:包括以下步骤:
2.如权利要求1所述的反编译方法,其特征在于:将所述字节码文件解析为指令列表包括以下步骤:
3.如权利要求2所述的反编译方法,其特征在于:将所述字节码文件解析成指令流的过程中,根据kotlin语法规则对所述字节码文件进行处理,以正确地识别和处理kotlin特性。
4.如权利要求1所述的反编译方法,其特征在于:根据所述指令列表构建抽象语法树包括以下步骤:
5.如权利要求4所述的反编译方法,其特征在于:形成所述抽象语法树之后,还包括以下步骤:
6.如权利要求1所述的反编译方法,其特征在于:将所述抽象语法树转换成kotlin源代码包括以下步骤:
7.一种反编译工具,用于实现如权利要求1-6任一项所述的反编译方法,其特征在于:包括:
8.如权利要求7所述的反编译工具,其特征在于:还包括代码模块,所述代码模块用于将所述反编译模块生成的kotlin源代码输出到目标文件中。
9.一种可读存储介质,其上存储有计算机程序指令,其特征在于:所述计算机程序指令被执行时实现如权利要求1-6所述方法的步骤。
10.一种程序产品,包括计算机程序指令,其特征在于:所述计算机程序指令被执行时实现如权利要求1-6所述方法的步骤。