基于应用安装包文件的代码转换方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种基于应用安装包文件的代码转换方法及装置。
背景技术
目前,移动应用的种类和功能越来越繁多,随着科技的发展,编写的代码、数据以及应用等越来越容易被黑客恶意攻破,因此,保证用户所使用的应用安全成为使用应用时面临的最大问题。现有技术中,在不破坏应用的情况下,往往针对打包好的应用安装包文件进行加固保护,能够在一定的程度上防止编写完成的代码被反编译分析,保障源码的安全,进而保障应用的安全。
但是,现有技术存在如下不足:现有的移动应用大多数采用Java语言进行编译,采用上述现有技术在对移动应用进行加固保护时,往往在待保护应用的Java层进行加密保护,但是反编译工具很容易对Java层的语言进行反编译,从而不能有效地保障应用的安全。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于应用安装包文件的代码转换方法及装置。
根据本发明的一个方面,提供了一种基于应用安装包文件的代码转换方法,包括:
对应用安装包文件进行反编译,得到抽象语法树;
按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
将转换代码写入预设指定文件中;
根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,将转换代码写入预设指定文件中进一步包括:
对转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中;
则根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
根据写入经过混淆处理的转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块;
根据写入转换代码的预设指定文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码的步骤具体包括:
针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,按照预设的转换规则对抽象语法树的节点中的内容进行处理的步骤之前,方法进一步包括:
根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,根据待保护代码的类型将抽象语法树划分为多个节点进一步包括:
基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;
或者,当待保护代码的类型为多维数组类型时,根据待保护代码的类型将抽象语法树划分为多个节点进一步包括:
根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,预设指定文件具体为可执行文件。
可选地,抽象语法树为Jimple形式的抽象语法树。
可选地,对应用安装包文件进行反编译,得到抽象语法树进一步包括:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
根据本发明的另一方面,提供了一种基于应用安装包文件的代码转换装置,包括:
反编译模块,适于对应用安装包文件进行反编译,得到抽象语法树;
代码转换模块,适于按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
替换处理模块,适于针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
生成模块,适于根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块进一步适于:
将转换代码写入预设指定文件中;
根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块进一步适于:
对转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中;
根据写入经过混淆处理的转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块进一步适于:
在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块;
根据写入转换代码的预设指定文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,替换处理模块进一步适于:
针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,代码转换模块进一步适于:
根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,代码转换模块进一步适于:
基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;
或者,当待保护代码的类型为多维数组类型时,代码转换模块进一步适于:
根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,预设指定文件具体为可执行文件。
可选地,抽象语法树为Jimple形式的抽象语法树。
可选地,反编译模块进一步适于:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
根据本发明的另一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上述基于应用安装包文件的代码转换方法对应的操作。
根据本发明的另一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述基于应用安装包文件的代码转换方法对应的操作。
根据本发明提供的基于应用安装包文件的代码转换方法及装置,其中,方法包括:对应用安装包文件进行反编译,得到抽象语法树;按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。该方式通过将应用安装包文件中待保护代码进行转换,得到的转换代码的反编译难度高于待保护代码的反编译难度,增加了反编译的难度以及复杂度,能够有效对待保护代码进行保护,基于转换之后的待保护代码生成新的应用安装包文件,从而提高了应用的安全性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的基于应用安装包文件的代码转换方法的方法流程图;
图2示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的方法流程图;
图3示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的功能模块图;
图4示出了根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的基于应用安装包文件的代码转换方法的方法流程图,本实施例中以待保护代码为Java代码为例进行说明,由于反编译软件很容易对Java层的语言进行反编译,本实施例中将应用中的待保护代码转换为难以被反编译的语言代码,例如转换为C代码。当然,本发明的应用场景并不以此为限。如图1所示,该方法包括:
步骤S101,对应用安装包文件进行反编译,得到抽象语法树。
其中,抽象语法树(abstract syntax tree)是源代码的抽象语法结构的树状表现形式,是基于寄存器的带类型的三地址码,具有语句和表达式两种形式,抽象语法树中的每个节点都表示源代码中的一种结构。对应用安装包文件进行反编译处理,得到该应用安装包文件的抽象语法树,可以采用Jimple形式的抽象语法树,或者根据实际需要采用其他形式的抽象语法树,本发明对此不作限定。
步骤S102,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码。
该步骤也即将待保护代码进行转换,具体地,获取上述抽象语法树中的节点,按照预设的转换规则对节点中的内容进行处理,得到与待保护代码相对应的转换代码,其中,得到的转换代码在应用安装包文件中实现的功能与待保护代码在应用安装包文件中实现的功能一致,并且对转换代码进行反编译的复杂度高于对待保护代码进行反编译的复杂度。本实施例中,将待保护Java代码转换为相应的C代码。
本实施例中,对应用安装包文件反编译,得到的抽象语法树的节点中包含待保护代码对应的节点,还有可能包含不需要保护的代码的节点。因此,具体实施时,可以首先确定抽象语法树中与待保护代码相对应的节点,然后按照预设的转换规则对与待保护代码相对应的节点中的内容进行处理,得到与待保护代码相对应的转换代码;或者,首先按照预设的转换规则对抽象语法树的各个节点中的内容进行处理,然后在得到的转换代码中提取出与待保护代码相对应的转换代码。当然,上述两种方式仅仅是本发明的具体实施方式,本发明的方案不限于此。
步骤S103,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码。
具体地,基于JNI(Java Native Interface)调用规则,针对待保护代码所对应的程序代码,将待保护代码转换为本地代码,得到替换后的程序代码。其中,JNI提供了若干的API(Application Programming Interface,应用程序编程接口)实现了Java和其他语言的通信,它允许Java代码和其他语言写的代码进行交互。
步骤S104,根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
将转换代码以及替换后的程序代码重新打包为新的应用安装包文件,该新的安装包文件即是经过代码转换的应用安装包文件。
根据本实施例所提供的基于应用安装包文件的代码转换方法,首先,对应用安装包文件进行反编译,得到抽象语法树;然后,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;然后,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;最后,根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,增加了反编译的难度以及复杂度,能够有效对待保护代码进行保护,基于转换之后的待保护代码生成新的应用安装包文件,从而提高了应用的安全性。
图2示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的方法流程图,如图2所示,该方法包括:
步骤S201,对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
本实施例中,预先对应用安装包文件进行过滤处理,对过滤后的应用安装包进行反编译处理直接得到与待保护代码相对应的抽象语法树。通俗地来讲,本步骤也即获取应用安装包文件中的待保护代码,例如,获取apk中待保护方法对应的Java代码。
步骤S202,根据待保护代码的类型将抽象语法树划分为多个节点。
检测待保护代码的类型,根据待保护代码的类型将上述抽象语法树划分为多个节点。
具体地,当待保护代码的类型为表达式类型时,基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点。其中,JNI接口可以调用原子表达式以及运算方式的数据接口,因此,当待保护代码为原子表达式或者运算方式时,可以分别将各个原子表达式以及相关运算关系翻译为与JIN接口相对应的形式,从而根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点。
当待保护代码的类型为多维数组类型时,根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。由于JNI接口中没有直接用于创建多维数组的接口,因此可以将多维数组进行多种变换,转换为能够翻译为与JNI接口相对应的形式,从而根据变换之后的多维数据将抽象语法树划分为多个节点。
步骤S203,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码。
该步骤也即将待保护代码进行转换,具体地,获取上述与待保护代码相对应的抽象语法树中的各个节点,按照预设的转换规则对各个节点中的内容进行处理,得到与待保护代码相对应的转换代码,其中,得到的转换代码在应用安装包文件中实现的功能与待保护代码在应用安装包文件中实现的功能一致,并且对转换代码进行反编译的复杂度高于对待保护代码进行反编译的复杂度。本实施例中,将待保护Java代码转换为相应的C代码。
步骤S204,针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
该步骤即针对待保护代码所对应的程序代码进行替换处理,以待保护代码为Java代码为例,当待保护代码为Java代码时,将Java代码转换为C代码,则程序代码中的该待保护Java代码修改为native(本地代码),并擦除该待保护Java代码的方法数据,得到替换后的程序代码,其中,本地代码(Native Method)就是Java调用非Java代码的接口,由其他非Java语言实现。
步骤S205,将转换代码写入预设指定文件中,在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块。
其中,步骤S205还可先于步骤S204先执行,本发明对步骤S204与步骤S205的执行顺序不做限定,
其中,预设指定文件可以为可执行文件,例如.so文件。在一种可选的方式中,根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
本实施例中,通过将待保护代码转换为反编译难度较高的代码,从而实现对待保护代码进行保护,保护是针对程序里面的函数为单位进行的,从技术上来讲,将待保护代码转移到了动态链接库(.so文件)中,因此,对于程序代码也需要进行相应的擦除工作,对应于上述步骤S204中对程序代码进行替换处理。
在实际应用中,为了进一步提升应用的安全性,可以将转换代码进行混淆处理之后写入预设指定文件中,具体地,对转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中。相应地,还可以根据写入经过混淆处理的转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
其中,将转换代码进行混淆处理的步骤具体可以包括:解析转换代码,生成与转换代码相对应的第一抽象语法树,其中,第一抽象语法树中包含条件跳转语句;通过真实内存、构建的虚假内存及语句选择器替换条件跳转语句,获得第二抽象语法树,其中,虚假内存及真实内存放置于语句选择器中,语句选择器用于将条件跳转语句中的分支语句赋值于真实内存和/或虚假内存;生成与第二抽象语法树相对应的混淆代码。当然,本发明转换代码混淆处理的方式并不做限定,本领域技术人员可根据实际需要进行设置。
进一步地,在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块。其中,静态代码块先于主方法执行,因此,当有些代码必须在项目启动的时候就执行的时候,可以使用静态代码块,通过添加静态代码块,在运行依据经过代码转换的应用安装包文件时,首先会执行该静态代码块,从而将上述预设指定文件中的内容加载至内存。
步骤S206,根据写入转换代码的预设指定文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
将写入了转换代码的预设指定文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。在运行该经过代码转换的应用安装包文件时,首先会执行静态代码块,从而将上述预设指定文件中的内容加载至内存中,之后当运行至待保护代码时,可以直接从内存中调用相应的内容。
此外,当预设指定文件中写入的是经过混淆处理之后的转换代码时,需要先对预设指定文件中的转换代码进行解密,并在解密之后的代码运行完毕之后再重新进行加密。因此,在运行该经过代码转换的应用安装包文件的过程中,内存中的备份文件系统在任何时刻都无法得到待保护代码的完整进行,从而达到保护代码的目的。
根据本实施例所提供的基于应用安装包文件的代码转换方法,该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,增加了反编译的难度以及复杂度,进一步地,将转换代码进行混淆处理,能够有效对待保护代码进行保护,基于转换之后的待保护代码生成新的应用安装包文件,从而提高了应用的安全性。
图3示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的功能模块图,如图3所示,该装置包括:反编译模块31,代码转换模块32,替换处理模块33,生成模块34。
其中,反编译模块31,适于对应用安装包文件进行反编译,得到抽象语法树;
代码转换模块32,适于按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
替换处理模块33,适于针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
生成模块34,适于根据转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块34进一步适于:
将转换代码写入预设指定文件中;
根据写入转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块34进一步适于:
对转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中;
根据写入经过混淆处理的转换代码的预设指定文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,生成模块34进一步适于:
在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块;
根据写入转换代码的预设指定文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,替换处理模块33进一步适于:
针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,代码转换模块32进一步适于:
根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,代码转换模块32进一步适于:
基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;
或者,当待保护代码的类型为多维数组类型时,代码转换模块32进一步适于:
根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,预设指定文件具体为可执行文件。
可选地,抽象语法树为Jimple形式的抽象语法树。
图4示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述基于应用安装包文件的代码转换方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行上述任意方法实施例中的基于应用安装包文件的代码转换方法。程序410中各步骤的具体实现可以参见上述基于应用安装包文件的代码转换方法实施例中的相应步骤和单元中对应的描述,在此不赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应该被理解和认定为覆盖了所有这些其他变型或修改。
本领域技术人员应当理解,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。此外,本发明也不针对任何特定编程语言,应当明白,可以利用各种编程语言实现本发明描述的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
需要注意的是,尽管在上面的说明中详细描述了基于应用安装包文件的代码转换装置的若干模块,但是这种划分仅仅是示例性的,并非是强制性的。本领域的技术人员可以理解,实际上,可以对实施例中的模块进行自适应性地改变,将实施例中的多个模块组合成一个模块,也可将一个模块划分成多个模块。
此外,尽管在附图中以特定顺序描述了本发明实施操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。可以省略某些步骤,将多个步骤合并为一个步骤执行,或者将一个步骤分成多个步骤执行。
以上对本发明的方法和具体实施方法进行了详细的介绍,并给出了相应的实施例。当然,除上述实施例外,本发明还可以有其它实施方式,凡采用等同替换或等效变换形成的技术方案,均落在本发明所要保护的范围之内。
本发明公开了:A1.一种基于应用安装包文件的代码转换方法,其特征在于,包括:
对应用安装包文件进行反编译,得到抽象语法树;
按照预设的转换规则对所述抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
针对所述待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
根据所述转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
A2.根据A1所述的方法,其特征在于,所述根据所述转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
将所述转换代码写入预设指定文件中;
根据写入所述转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
A3.根据A2所述的方法,其特征在于,所述将所述转换代码写入预设指定文件中进一步包括:
对所述转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中;
则根据写入所述转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
根据写入经过混淆处理的转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
A4.根据A2或A3所述的方法,其特征在于,所述根据写入所述转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
在所述抽象语法树中添加用于加载所述写入所述转换代码的预设指定文件的静态代码块;
根据所述写入所述转换代码的预设指定文件、添加了所述静态代码块的抽象语法树以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
A5.根据A1所述的方法,其特征在于,所述针对所述待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码的步骤具体包括:
针对所述待保护代码所对应的程序代码,将所述待保护代码替换为本地代码并擦除所述程序代码中所述待保护代码所对应的方法数据,得到替换后的程序代码。
A6.根据A1所述的方法,其特征在于,所述按照预设的转换规则对所述抽象语法树的节点中的内容进行处理的步骤之前,所述方法进一步包括:
根据所述待保护代码的类型将所述抽象语法树划分为多个节点。
A7.根据A6所述的方法,其特征在于,当所述待保护代码的类型为表达式类型时,所述根据所述待保护代码的类型将所述抽象语法树划分为多个节点进一步包括:
基于所述抽象语法树的类型,根据所述待保护代码中的表达式中的各个变量将所述抽象语法树划分为多个节点;
或者,当所述待保护代码的类型为多维数组类型时,所述根据所述待保护代码的类型将所述抽象语法树划分为多个节点进一步包括:
根据本地接口将多维数组进行变换,根据变换之后的多维数组将所述抽象语法树划分为多个节点。
A8.根据A2-A4中任一项所述的方法,其特征在于,所述预设指定文件具体为可执行文件。
A9.根据A1-A8中任一项所述的方法,其特征在于,所述抽象语法树为Jimple形式的抽象语法树。
A10.根据A1所述的方法,其特征在于,所述对应用安装包文件进行反编译,得到抽象语法树进一步包括:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
B11.一种基于应用安装包文件的代码转换装置,其特征在于,包括:
反编译模块,适于对应用安装包文件进行反编译,得到抽象语法树;
代码转换模块,适于按照预设的转换规则对所述抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
替换处理模块,适于针对所述待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
生成模块,适于根据所述转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
B12.根据B11所述的装置,其特征在于,所述生成模块进一步适于:
将所述转换代码写入预设指定文件中;
根据写入所述转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
B13.根据B12所述的装置,其特征在于,所述生成模块进一步适于:
对所述转换代码进行混淆处理,将经过混淆处理的转换代码写入预设指定文件中;
根据写入经过混淆处理的转换代码的预设指定文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
B14.根据B12或B13所述的装置,其特征在于,所述生成模块进一步适于:
在所述抽象语法树中添加用于加载所述写入所述转换代码的预设指定文件的静态代码块;
根据所述写入所述转换代码的预设指定文件、添加了所述静态代码块的抽象语法树以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
B15.根据B11所述的装置,其特征在于,所述替换处理模块进一步适于:
针对所述待保护代码所对应的程序代码,将所述待保护代码替换为本地代码,并擦除所述程序代码中所述待保护代码所对应的方法数据,得到替换后的程序代码。
B16.根据B11所述的装置,其特征在于,所述代码转换模块进一步适于:
根据所述待保护代码的类型将所述抽象语法树划分为多个节点。
B17.根据B16所述的装置,其特征在于,当所述待保护代码的类型为表达式类型时,所述代码转换模块进一步适于:
基于所述抽象语法树的类型,根据所述待保护代码中的表达式中的各个变量将所述抽象语法树划分为多个节点;
或者,当所述待保护代码的类型为多维数组类型时,所述代码转换模块进一步适于:
根据本地接口将多维数组进行变换,根据变换之后的多维数组将所述抽象语法树划分为多个节点。
B18.根据B12-B14中任一项所述的装置,其特征在于,所述预设指定文件具体为可执行文件。
B19.根据B11-B18中任一项所述的装置,其特征在于,所述抽象语法树为Jimple形式的抽象语法树。
B20.根据B11所述的装置,其特征在于,所述反编译模块进一步适于:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
C21.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A10任一项所述的基于应用安装包文件的代码转换方法对应的操作。
D22.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求A1-A10任一项所述的基于应用安装包文件的代码转换方法对应的操作。