一种APK加固方法及装置与流程

文档序号:11407928阅读:273来源:国知局
一种APK加固方法及装置与流程

本申请涉及安全技术领域,尤其涉及一种apk加固方法及装置。



背景技术:

随着安卓操作系统(android)的快速发展,在安卓电子设备上的第三方应用(application,app)也越来越多,比如安卓手机上的app数量逐年增加。但是由于安卓操作系统自身开源的特点,也产生了众多的软件逆向工具,通过这些软件逆向工具能够对app的安装文件,即apk(androidpackage,安卓压缩包)进行逆向分析,从而对app的开发者和使用者造成危害。因此,如何对apk进行加固从而防止逆向分析,是本申请实施例所需要解决的技术问题。



技术实现要素:

本申请实施例提供一种apk加固方法及装置,能够用于加固apk。

本申请实施例提供了一种apk加固方法,该方法包括:

将apk中的so文件加载至内存,其中所述so文件中包括目标函数的代码;

对所述目标函数的执行状态进行监控;

当监控到所述目标函数执行结束时,将所述目标函数的代码从内存中清除。

优选地,在将apk中的so文件加载至内存之前,所述方法还包括:

将所述so文件中的目标函数的代码通过对称加密算法进行加密;

将apk中的so文件加载至内存,具体包括:

将包含所述目标函数加密后的代码的so文件加载至内存,以便能够通过所述对称加密算法的逆算法对内存中所述加密后的代码进行解密并获取所述目标函数加密前的代码,用于执行所述目标函数。

优选地,在将所述so文件中的目标函数的代码通过对称加密算法进行加密之后,所述方法还包括:将解密密钥保存在所述so文件datasection数据段中;

通过所述对称加密算法的逆算法对内存中所述加密后的代码进行解密,具体包括:

通过从所述so文件datasection数据段中提取解密密钥以及所述对称加密算法的逆算法对加密后的代码进行解密。

优选地,所述对称加密算法选自如下任意一种:

des加密算法;3des加密算法;rc2加密算法;rc4加密算法;rc5加密算法;blowfish加密算法。

优选地,将所述目标函数的代码从内存中清除,具体为:

将所述代码所加载的内存地址进行初始化;和/或,

清除所述代码所加载的内存地址的偏移地址信息。

本申请实施例还提供了一种apk加固装置,该装置包括:加载单元、监控单元以及清除单元,其中:

所述加载单元,用于将apk中的so文件加载至内存,其中所述so文件中包括目标函数的代码;

所述监控单元,用于对所述目标函数的执行状态进行监控;

所述清除单元,用于当监控到所述目标函数执行结束时,将所述目标函数的代码从内存中清除。

优选地,在所述加载单元之前,所述装置还包括加密单元,用于将所述so文件中的目标函数的代码通过对称加密算法进行加密;

所述加载单元,用于将包含所述目标函数加密后的代码的so文件加载至内存,以便能够通过所述对称加密算法的逆算法对内存中所述加密后的代码进行解密并获取所述目标函数加密前的代码,用于执行所述目标函数。

优选地,在所述加密单元和所述加载单元之间,所述装置还包括保存单元,用于将解密密钥保存在所述so文件datasection数据段中;

所述加载单元,用于将包含所述目标函数加密后的代码的so文件加载至内存,以便能够通过从所述so文件datasection数据段中提取解密密钥以及所述对称加密算法的逆算法对加密后的代码进行解密并获取所述目标函数加密前的代码,用于执行所述目标函数。

优选地,所述对称加密算法选自如下任意一种:

des加密算法;3des加密算法;rc2加密算法;rc4加密算法;rc5加密算法;blowfish加密算法。

优选地,将所述目标函数的代码从内存中清除,具体为:

将所述代码所加载的内存地址进行初始化;和/或,

清除所述代码所加载的内存地址的偏移地址信息。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

采用本申请实施例所提供的apk加固方法,将apk中包括目标函数的代码的so文件加载至内存,然后通过对目标函数的执行状态进行监控,当监控到目标函数执行结束时,将所述目标函数的代码从内存中清除。由于能够将apk部分核心代码中的函数作为目标函数,当监控到目标函数执行结束之后,可以通过将该目标函数的代码从内存中清除来防止非法逆向分析者通过内存dump来进行逆向分析,实现了apk的加固,解决了现有技术中的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的一种apk加固方法的具体实现流程示意图;

图2为本申请实施例提供的一种apk加固装置的具体结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施例提供的技术方案。

在apk中通常会包括so(shareobject,共享对象)文件,由于so文件采用二进制,没有额外的解释编译过程,在运行时速度更快。因此在app开发过程中,通常会将apk中的部分核心代码放到so文件中,从而加快apk的安装速度。本申请通过apk中的so文件来对该apk进行加固。

本申请实施例提供了一种apk加固方法。该方法的具体流程示意图如图1所示,包括下述步骤:

步骤s11:将apk中的so文件加载至内存。

这里的so文件位于所加固的apk中。apk中通常会包括classes.dex、so文件、androidmanifest.xml等,其中so文件采用c++/c语言编辑。在该so文件中包括目标函数的代码,这里的目标函数通常是需要进行保护的函数,比如正常运行该apk所需要的资源函数,或者apk核心功能模块的函数等;在实际应用中目标函数可以是一个或多个需要进行保护的函数。

在手机、平板电脑等电子设备上安装第三方应用时,用户可以通过触控对应的apk,使得电子设备的安卓操作系统接收到安装请求,运行安装该apk从而实现第三方应用的安装。在运行安装apk时,需要将apk中的classes.dex、so文件等至内存中。

在实际应用中,将包括目标函数的代码的so文件加载至内存,在apk的安装过程中,可以用于执行该目标函数。

步骤s12:对目标函数的执行状态进行监控。

通常目标函数的执行状态可以包括未执行、执行中以及执行结束等。

安卓操作系统能够提供相应的api(applicationprogramminginterface,应用程序编程接口),可以编辑相应的监控程序,通过这些api对某个函数或者某些函数的执行状态进行监控。因此,可以编辑针对目标函数的监控程序,通过安卓操作系统提供的api来实现对目标函数执行状态的监控。

另外,对目标函数的执行状态进行监控,可以是实时监控目标函数的执行状态,也可以是每隔一个时间周期(比如1分钟,也可以为其它)获取目标函数的执行状态,也可以是其它的监控方式。对于实时监控的方式通常能够及时获知目标函数的执行状态,但所消耗的计算资源较大;对于周期性获取目标函数的执行状态的监控方式,所消耗的计算资源相对较少,但实时性较差;因此在应用过程中,可以根据电子设备cpu的运算能力、对实时性的需求等选择具体的监控方式,这里就不再一一赘述。

步骤s13:当监控到目标函数执行结束时,将目标函数的代码从内存中清除,从而对apk进行加固。

在用户触控apk的文件进行apk安装的过程中,安卓操作系统通常会先将apk中的classes.dex拷贝至系统文件夹/data/dalvik-cache的目录之下,然后在系统文件夹/data/data/的目录下创建app文件夹(可以以apk的名称命名该文件夹),并在该文件夹中存放从apk中解压出的相关数据,如数据库、xml文件、cache以及so文件等。在解压过程中,会先将so文件加载到内存,然后将内存中的so文件进行拷贝至app文件夹。但是在实际应用中,对于非法进行逆向分析者,也可以从内存中拷贝该so文件(称之为内存dump)的代码,从而进行逆向分析。

因此,通过本申请所提供的apk加固方法,可以将apk部分核心代码中的函数分别作为目标函数,通过对目标函数执行状态进行监控,当目标函数执行结束之后,将该目标函数的代码从内存中清除,这样可以有效防止非法逆向分析者从内存中拷贝该目标函数的代码。特别是当需要保护的函数数量较多时,可以分别将这些函数作为目标函数,并在这些函数先后执行的过程中,依次从内存中将函数的代码进行清除,从而使得非法逆向分析者更加难以从内存中获取完整的so文件的代码,从而难以对apk进行逆向分析,实现了对apk的加固。

在实际应用中,将目标函数的代码从内存中清除的方式有多种,可以将目标函数的代码所加载的内存地址进行初始化,比如,将该代码所加载的内存地址的数据全部置零等;将目标函数的代码从内存中清除的方式,还可以是清除目标函数的代码所加载的内存地址的偏移地址信息,清除内存地址的偏移地址信息之后,非法逆向分析者难以获取到目标函数的代码的实际内存地址,因此难以进行代码的拷贝。

以上是对本申请实施例所提供的apk加固方法的说明,在实际应用中,为难了进一步加固apk,在步骤s11将apk中的so文件加载至内存之前,该方法还可以进一步的包括,将该so文件中的目标函数的代码通过对称加密算法进行加密得到加密后的代码;相应的步骤s11可以是,将包含该目标函数加密后的代码的so文件加载至内存,从而使得在需要执行该目标函数时,能够通过该对称加密算法的逆算法,对已加载在内存中的目标函数加密后的代码进行解密,从而获取目标函数加密前的代码,通过该加密前的代码来执行目标函数。这种先对目标函数的代码进行加密,并在需要执行该目标函数时,才从内存进行解密获取加密前的代码的方式,能够进一步防止非法逆向分析者的逆向分析,从而进一步加固apk。

另外,上述的对称加密算法可以是如下任意一种或多种对称加密算法:des(dataencryptionstandard)加密算法、3des(tripledes)加密算法、rc2加密算法、rc4加密算法、rc5加密算法或blowfish加密算法,当然,也可以是其它的对称加密算法。

需要进一步说明的是,在将so文件中的目标函数的代码通过对称加密算法进行加密得到加密后的代码之后,为了便于对该目标函数的执行,可以将用于对加密后的代码进行解密的解密密钥保存在apk中,比如可以将该解密密钥保存在so文件datasection数据段中,从而使得在通过对称加密算法的逆算法对内存中目标函数加密后的代码进行解密时,能够从该so文件的datasection数据段中提取该解密密钥,并通过提取得到的解密密钥以及对称加密算法的逆算法对加密后的代码进行解密;当然也可以将该解密密钥保存在apk的dex文件等其他文件中。

相对于将解密密钥保存在apk的dex文件等,将解密密钥保存在so文件的datasection数据段,由于so文件采用c++/c语言编辑,在反编译过程通常较难,更加不利于非法逆向分析者进行逆向分析,从而能够进一步的对apk进行加固。

基于与本申请实施所提供的apk加固方法相同的发明构思,本申请实施例提供了一种apk加固装置,能够用于解决现有技术中的问题。如图2所示,该装置20包括:加载单元201、监控单元202以及清除单元203,其中:

所述加载单元201,用于将apk中的so文件加载至内存,其中所述so文件中包括目标函数的代码;

所述监控单元202,用于对所述目标函数的执行状态进行监控;

所述清除单元203,用于当监控到所述目标函数执行结束时,将所述目标函数的代码从内存中清除。

由于该装置20采用与本申请实施例所提供的apk加固方法相同的发明构思,因此也能够解决现有技术中的问题,这里就不再赘述。

在实际应用中,在该装置20的加载单元201之前,所述装置20还可以包括加密单元204;该加密单元204可以用于将所述so文件中的目标函数的代码通过对称加密算法进行加密;

相应的,连接在加密单元204之后的加载单元201,能够用于将包含所述目标函数加密后的代码的so文件加载至内存,以便能够通过所述对称加密算法的逆算法对内存中所述加密后的代码进行解密并获取所述目标函数加密前的代码,用于执行所述目标函数。

通过加密单元204先对目标函数的代码进行加密,然后再通过加载单元201将加密后的代码加载至内存,这样即使非法进行逆向分析者进行内存dump成功,也不能直接进行逆向分析,因此能够进一步加固apk。

在所述加密单元204和所述加载单元201之间,所述装置20还可以包括保存单元,用于将解密密钥保存在所述so文件datasection数据段中;

所述加载单元,用于将包含所述目标函数加密后的代码的so文件加载至内存,以便能够通过从所述so文件datasection数据段中提取解密密钥以及所述对称加密算法的逆算法对加密后的代码进行解密并获取所述目标函数加密前的代码,用于执行所述目标函数。

其中上述的对称加密算法选自如下任意一种或多种对称加密算法:

des加密算法;3des加密算法;rc2加密算法;rc4加密算法;rc5加密算法;blowfish加密算法。

所述清除单元203,将所述目标函数的代码从内存中清除,可以是将所述代码所加载的内存地址进行初始化,也可以是清除所述代码所加载的内存地址的偏移地址信息。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1