应用程序运行方法、装置、设备和存储介质

文档序号:86335 发布日期:2021-10-08 浏览:24次 >En<

阅读说明:本技术 应用程序运行方法、装置、设备和存储介质 (Application program running method, device, equipment and storage medium ) 是由 秦光辉 李涛 于 2021-07-06 设计创作,主要内容包括:本说明书一个实施例提供了一种应用程序运行方法、装置、设备和存储介质,其中方法包括:从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件;重置字节码文件中记录有应用程序的敏感资源;重置字节码文件中的敏感资源被预先重置为预设值;敏感资源文件中记录有重置前的敏感资源;在应用程序的运行过程中,监听是否需要通过重置字节码文件调用敏感资源;若需要,则根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源;在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值。通过本实施例,能够防止黑客获取应用程序中的敏感资源,提高应用程序运行的安全性。(One embodiment of the present specification provides an application program running method, an apparatus, a device and a storage medium, wherein the method comprises: downloading a reset byte code file of the application program and a sensitive resource file of the application program from a background server of the application program; sensitive resources of the application program are recorded in the reset byte code file; sensitive resources in the reset byte code file are reset to preset values in advance; the sensitive resource file records the sensitive resource before resetting; monitoring whether sensitive resources need to be called by resetting byte code files or not in the running process of an application program; if so, modifying the sensitive resources recorded in the reset byte code file according to the sensitive resources recorded in the sensitive resource file before resetting; and after the sensitive resource is called, restoring the sensitive resource in the reset byte code file to the preset value again. By the method and the device, hackers can be prevented from acquiring sensitive resources in the application program, and the running safety of the application program is improved.)

应用程序运行方法、装置、设备和存储介质

技术领域

本文件涉及计算机

技术领域

,尤其涉及一种应用程序运行方法、装置、设备和存储介质。

背景技术

随着移动互联网技术的发展,android系统用户量越来越多,同时也面临了更多潜在的安全问题。应用程序的可执行文件apk作为android系统和用户交互的枢纽,是黑客攻击的重点。黑客可以对应用程序的可执行文件apk进行反汇编,修改可执行文件中的核心算法参数、或者注入广告代码、或者植入病毒、或者非法获取用户信息等,从而降低应用程序运行的安全性。因此,如何提高应用程序运行的安全性,称为急需解决的问题。

发明内容

本说明书一个实施例的目的是提供一种应用程序运行方法、装置、设备和存储介质,能够防止黑客获取应用程序中的敏感资源,提高应用程序运行的安全性。

为达到上述技术目的,本说明书一个实施例是这样实现的:

第一方面,本说明书一个实施例提供了一种应用程序运行方法,包括:

从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

第二方面,本说明书另一个实施例提供了一种应用程序运行装置,包括:

文件下载模块,用于从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

调用监听模块,用于在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

数据修改模块,用于若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

数据恢复模块,用于在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

第三方面,本说明书又一个实施例提供了一种应用程序运行设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器实现以下流程:

从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

第四方面,本说明书再一个实施例提供了一种存储介质,用于存储计算机可执行指令,所述计算机可执行指令在被处理器执行时实现以下流程:

从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

本说明书一实施例提供的应用程序运行方法、装置、设备和存储介质,首先获取应用程序的重置字节码文件和应用程序的敏感资源文件,重置字节码文件中记录有应用程序的敏感资源,重置字节码文件中的敏感资源被预先重置为预设值,敏感资源文件中记录有重置前的敏感资源。然后在应用程序运行过程中需要调用敏感资源时,根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源,在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值。由此可见,本实施例中应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。

附图说明

为了更清楚地说明本说明书一个或多个实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本说明书一实施例提供的应用程序运行方法的流程示意图;

图2为本说明书一实施例提供的重置字节码文件和敏感资源文件的生成示意图;

图3为本说明书一实施例提供的监听是否需要调用敏感资源的流程示意图;

图4为本说明书一实施例提供的应用程序运行过程的示意图;

图5为本说明书又一实施例提供的应用程序运行方法的流程示意图;

图6为本说明书一实施例提供的应用程序运行装置的结构示意图;

图7为本说明书一实施例提供的应用程序运行设备的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。

图1为本说明书一实施例提供的应用程序运行方法的流程示意图,该方法能够由安装该应用程序的终端设备执行,该终端设备包括但不限于用户的手机、电脑、平板电脑等设备。如图1所示,该方法包括:

步骤S102,从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件;重置字节码文件中记录有应用程序的敏感资源;重置字节码文件中的敏感资源被预先重置为预设值;敏感资源文件中记录有重置前的敏感资源;

步骤S104,在应用程序的运行过程中,监听是否需要通过重置字节码文件调用敏感资源;

步骤S106,若需要,则根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源;

步骤S108,在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值。

本实施例中,首先获取应用程序的重置字节码文件和应用程序的敏感资源文件,重置字节码文件中记录有应用程序的敏感资源,重置字节码文件中的敏感资源被预先重置为预设值,敏感资源文件中记录有重置前的敏感资源。然后在应用程序运行过程中需要调用敏感资源时,根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源,在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值。由此可见,本实施例中应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。

本实施例中,终端设备在安装应用程序之后,每次启动应用程序时,都从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件,并在每次应用程序运行结束后,删除下载的重置字节码文件和应用程序的敏感资源文件。或者,终端设备在安装应用程序之后,只在首次启动时,从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件。

应用程序的重置字节码文件中记录有应用程序的敏感资源,该敏感资源被预先重置为预设值。应用程序的敏感资源文件中记录有重置前的敏感资源。在一个实施例中,应用程序的开发人员首先在应用程序的源代码中对敏感资源进行标注,比如在敏感资源旁写下“@mndata”的标签。然后,应用程序的后台服务器基于该标签,自动生成应用程序的重置字节码文件和应用程序的敏感资源文件,具体生成过程为:

(1)获取应用程序的源代码,对源代码进行编译得到原始字节码文件。该过程可以参考现有的源代码编译过程。

(2)根据敏感资源的标签,从原始字节码文件中提取得到原始字节码文件中的敏感资源。

(3)将原始字节码文件中的敏感资源记录下来,得到敏感资源文件。

(4)将原始字节码文件中的敏感资源设置为预设值比如重置为0,重置后的原始字节码文件即为重置字节码文件。

上述生成应用程序的重置字节码文件和应用程序的敏感资源文件的过程可以由应用程序的后台服务器执行,也可以由其他服务器执行,其他服务器生成应用程序的重置字节码文件和应用程序的敏感资源文件之后,将重置字节码文件和敏感资源文件发送至应用程序的后台服务器进行存储。当然,上述生成应用程序的重置字节码文件和应用程序的敏感资源文件的过程,在必要情况下,也可以由安装应用程序的终端设备执行。

在一个实施例中,应用程序的敏感资源包括应用程序的预定核心函数的指令数据,该预定核心函数由应用程序的开发人员预先在应用程序的源代码中进行标注,比如在预定核心函数旁写下“@mndata”的标签,该实施例中,安装应用程序的终端设备、应用程序的后台服务器或者其他服务器,可以通过以下方式生成敏感资源文件:

(1)获取对应用程序的源代码进行编译后得到的原始字节码文件;

(2)遍历原始字节码文件,得到应用程序的预定核心函数的指令数据;

(3)将预定核心函数的指令数据作为敏感资源;

(4)根据敏感资源,生成敏感资源文件。

首先,获取对应用程序的源代码进行编译后得到的原始字节码文件。该编译过程可以参考现有的源代码编译过程。然后,根据预定核心函数的标签,遍历原始字节码文件,得到应用程序的预定核心函数,从而提取预定核心函数的指令数据。接着,将提取出来的预定核心函数的指令数据作为应用程序的敏感数据。最后,将敏感资源记录下来,得到敏感资源文件。

动作(2)中,遍历原始字节码文件,得到应用程序的预定核心函数的指令数据,具体为:

(21)获取预定核心函数的函数名称和预定核心函数所属的类名称;

(22)根据预定核心函数的函数名称和预定核心函数所属的类名称,遍历原始字节码文件,得到应用程序的预定核心函数的指令数据。

一个实施例中,读取开发人员配置的记载有预定核心函数的函数名称和预定核心函数所属的类名称的文件,从而获取预定核心函数的函数名称和预定核心函数所属的类名称。然后,根据预定核心函数的函数名称和预定核心函数所属的类名称,遍历原始字节码文件,确定原始字节码文件中的预定核心函数,并得到应用程序的预定核心函数的指令数据。

另一个实施例中,上述动作(21)中,获取预定核心函数的函数名称和预定核心函数所属的类名称,具体为:

(211)对应用程序的源代码进行遍历,将源代码中标注有关键信息标识的函数作为预定核心函数;

(212)从源代码中提取预定核心函数的函数名称和预定核心函数所属的类名称。

预定核心函数由应用程序的开发人员预先在应用程序的源代码中进行标注,比如在预定核心函数旁写下“@mndata”的标签,从而动作(211)中,对应用程序的源代码进行遍历,将源代码中标注有关键信息标识的函数作为预定核心函数。在确定预定核心函数后,动作(212)中,从源代码中提取预定核心函数的函数名称和预定核心函数所属的类名称。

该实施例中,安装应用程序的终端设备、应用程序的后台服务器或者其他服务器,可以通过以下方式生成重置字节码文件:

(1)在上述提及的原始字节码文件中,将预定核心函数的指令数据重置为预设值,比如重置为0;

(2)将重置后的原始字节码文件作为重置字节码文件。

图2为本说明书一实施例提供的重置字节码文件和敏感资源文件的生成示意图,该实施例中,在应用程序编译时通过指令数据清空装置将应用程序的含有预定核心函数的指令数据的原始字节码文件classes.dex,拆分为不包含预定核心函数的指令数据的可执行文件core.dex(即重置字节码文件),以及单独含有预定核心函数的指令数据的core.thumb文件(即敏感资源文件),具体实现步骤如下:

步骤1、在android应用程序开发阶段,通过android studio新建一个工程,用来写应用程序的核心业务逻辑,并对预定核心函数进行注解,比如添加标签。

步骤2、构建自定义的android plugin Transform任务,对核心业务逻辑中的预定核心函数的注解进行识别,将核心业务逻辑中的预定核心函数的函数名称和预定核心函数所属的类名称输出到空白文件中,空白文件命名为key.txt。

步骤3、在应用程序开发完成后,对应用程序的源代码进行编辑,得到原始字节码文件classes.dex文件。classes.dex文件为android可执行文件,可以在运行时加载到内存中,并通过反射调用的方式调用内部函数。

步骤4、新建一个java工程项目,根据dex文件的结构信息,对classes.dex文件进行解析,其中dex文件的结构是由协议约定的,可以根据协议进行解析dex文件。

步骤5、根据步骤2生成的key.txt文件,在步骤4的解析结果中查询预定核心函数的函数名称、预定核心函数所属的类名称、预定核心函数在原始字节码文件中的序号和预定核心函数的二进制的指令数据,将查找到的以上数据以结构体的形式写入空白文件,写好的文件命名为core.thumb文件,该文件即为敏感资源文件。

步骤6、将classes.dex文件中的预定核心函数的指令数据逐个置为0,将重置后的classes.dex重命名为core.dex,该文件即为重置字节码文件。

步骤7、分别将core.thumb文件和core.dex文件加密并上传到应用程序的后台服务器中。

以上介绍了应用程序的重置字节码文件和敏感资源文件的生成过程。应用程序的重置字节码文件和敏感资源文件在生成之后,被上传到应用程序的后台服务器中进行存储。上述步骤S102中,终端设备在启动应用程序后,从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件。

上述步骤S104中,终端设备在应用程序的运行过程中,监听是否需要通过重置字节码文件调用敏感资源。该步骤具体为:

在应用程序的运行过程中,监听调用libart.so的Invoke方法的对象是否包括敏感资源,若包含,则确定需要通过重置字节码文件调用敏感资源。

一个实施例中,在监听调用libart.so的Invoke方法的对象是否包括敏感资源之前,还能够:监听libart.so中的LoadMethod方法的参数信息是否包含敏感资源的标识;若包含,则将重置字节码文件中的敏感资源在内存中的存储地址记录下来,以用于修改内存中存储的重置字节码文件中的所述敏感资源。

一个实施例中,在监听libart.so中的LoadMethod方法的参数信息是否包含敏感资源的标识之前,还能够:监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含重置字节码文件的文件名称;若包含,则将MapFileAtAddress方法的port参数的属性设置为可写属性,以使内存中存储的重置字节码文件中的敏感资源能够被修改。

一个实施例中,在监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含重置字节码文件的文件名称之前,还能够:监听libart.so中的Exec方法的文件路径参数是否包含重置字节码文件的文件名称;若包含,则拒绝将重置字节码文件转换为oat文件,以使内存中修改后的重置字节码文件中的敏感资源有效。

图3为本说明书一实施例提供的监听是否需要调用敏感资源的流程示意图,如图3所示,该流程包括:

步骤S302,监听libart.so中的Exec方法的文件路径参数是否包含重置字节码文件的文件名称。

若包含,执行步骤S304,若不包含,执行步骤S318。

步骤S304,拒绝将重置字节码文件转换为oat文件,以使内存中修改后的重置字节码文件中的敏感资源有效。

步骤S306,监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含重置字节码文件的文件名称。

若包含,执行步骤S308,若不包含,执行步骤S318。

步骤S308,将MapFileAtAddress方法的port参数的属性设置为可写属性,以使内存中存储的重置字节码文件中的敏感资源能够被修改。

步骤S310,监听libart.so中的LoadMethod方法的参数信息是否包含敏感资源的标识。敏感资源的标识可以为敏感资源的名称。

若包含,执行步骤S312,若不包含,执行步骤S318。

步骤S312,将重置字节码文件中的敏感资源在内存中的存储地址记录下来,以用于修改内存中存储的重置字节码文件中的敏感资源。

步骤S314,监听调用libart.so的Invoke方法的对象是否包括敏感资源。

若包含,执行步骤S316,若不包含,执行步骤S318。

步骤S316,确定需要通过重置字节码文件调用敏感资源。

步骤S318,确定不需要通过重置字节码文件调用敏感资源。

在一个实施例中,上述步骤S104,终端设备在应用程序的运行过程中,监听是否需要通过重置字节码文件调用敏感资源,具体为:在应用程序的运行过程中,基于hook方式监听是否需要通过重置字节码文件调用敏感资源。

在需要调用的情况下,执行步骤S106,根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源,具体为:将重置字节码文件中记录的敏感资源,修改为敏感资源文件中记录的重置前的敏感资源。比如,敏感资源为预定核心函数的指令数据,将重置字节码文件中记录的指令数据,修改为敏感资源文件中记录的重置前的指令数据,达到还原重置字节码文件的效果。

在修改之后,执行步骤S108,在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值,具体为:在获取到敏感资源的调用结果之后,重新将重置字节码文件中的敏感资源恢复为预设值。比如,敏感资源为预定核心函数的指令数据,在获取到预定核心函数的调用结果之后,重新将重置字节码文件中的预定核心函数的指令数据重置为0,达到文件重置的效果。

图4为本说明书一实施例提供的应用程序运行过程的示意图,该实施例中,敏感资源为预定核心函数的指令数据。在应用程序运行时通过指令数据还原重置装置判断是否需要调用敏感资源,需要调用时将重置字节码文件中的敏感资源进行还原,并在调用结束后将重置字节码文件中的敏感资源进行重置,具体过程如下:

步骤1、从应用程序的后台服务器处下载core.thumb文件(敏感资源文件)和core.dex文件(重置字节码文件),core.thumb文件和core.dex文件为加密文件,对二者进行解密。应用程序实际运行时,core.dex文件能够被动态加载,实现通过反射的机制调用预定核心函数的目的。

步骤2、应用程序运行过程中,通过native hook技术监听虚拟机libart.so,从而判断是否需要调用预定核心函数,包括:

步骤2.1、监听libart.so中的Exec方法,若该方法的文件路径参数含有core.dex,直接返回fasle,目的是阻止art的dex文件转化位oat文件,因为转化为oat文件后。会导致core.thumb文件中的修改后的预定核心函数的指令数据无效。

步骤2.2、监听libart.so中的MapFileAtAddress方法,若该方法的文件路径参数含有“core.dex”,则对该函数port参数追加可写属性,如:prot|=PROT_WRITE,以使内存中存储的core.thumb文件中的预定核心函数的指令数据能够被修改。

步骤2.3、监听libart.so中的LoadMethod方法,判断LoadMethod函数的参数信息是否包括预定核心函数的函数标识,该标识可以为预定核心函数在原始字节码文件中的序号或者预定核心函数的函数名称。判断标准是将LoadMethod函数的参数信息转化为Method结构体,获取Method结构体中的id和core.thumb中的预定核心函数在原始字节码文件中的序号进行对比,若一致,则确定LoadMethod函数的参数信息包括预定核心函数的函数标识,并将Method结构体中的预定核心函数的指令数据的内存地址记录到全局变量map中,以用于修改内存中存储的重置字节码文件中的预定核心函数的指令数据。

步骤2.4、监听libart.so中Method的Invoke方法,若调用Invoke的Method的结构体id和和core.thumb中的预定核心函数在原始字节码文件中的序号一致,则确定调用libart.so的Invoke方法的对象是预定核心函数,从而确定需要通过重置字节码文件调用敏感资源。

步骤3、在确定需要调用后,将map中记录的地址中存储的指令数据,修改为core.thumb中的指令数据,从而达到将重置字节码文件中记录的敏感资源,修改为敏感资源文件中记录的重置前的敏感资源的效果。

步骤4、在获取到预定核心函数的调用结果之后,将map中记录的地址中存储的指令数据重置为0,从而达到指令数据重置的效果。

图5为本说明书又一实施例提供的应用程序运行方法的流程示意图,如图5所示,该方法包括:

步骤S502,从应用程序的后台服务器处下载应用程序的重置字节码文件和应用程序的敏感资源文件;

步骤S504,在应用程序的运行过程中,监听是否需要通过重置字节码文件调用敏感资源;

步骤S506,若需要,则根据敏感资源文件中记录的重置前的敏感资源,修改重置字节码文件中记录的敏感资源;

步骤S508,在敏感资源被调用之后,重新将重置字节码文件中的敏感资源恢复为预设值。

步骤S510,判断应用程序是否运行结束,若未结束,返回步骤S504,若结束,则结束流程。

综上,通过以上应用程序运行方法,应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。并且,巧妙运用运行通过hook技术,实现函数指令自动还原恢复和自动重置清空过程中无明显调用痕迹,加大破解逻辑难度。

对应于上述的应用程序运行方法,本说明书一实施例还提供了一种应用程序运行装置,用于实现上述的方法。图6为本说明书一实施例提供的应用程序运行装置的结构示意图,如图6所示,该装置包括:

文件下载模块61,用于从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

调用监听模块62,用于在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

数据修改模块63,用于若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

数据恢复模块64,用于在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

可选地,还包括第一文件生成模块,用于:获取对所述应用程序的源代码进行编译后得到的原始字节码文件;遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据;将所述预定核心函数的指令数据作为所述敏感资源;根据所述敏感资源,生成所述敏感资源文件。

可选地,还包括第二文件生成模块,用于:在所述原始字节码文件中,将所述预定核心函数的指令数据重置为所述预设值;将重置后的所述原始字节码文件作为所述重置字节码文件。

可选地,上述第一文件生成模块具体用于:获取所述预定核心函数的函数名称和所述预定核心函数所属的类名称;根据所述预定核心函数的函数名称和所述预定核心函数所属的类名称,遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据。

可选地,上述第一文件生成模块还具体用于:对所述应用程序的源代码进行遍历,将所述源代码中标注有关键信息标识的函数作为所述预定核心函数;从所述源代码中提取所述预定核心函数的函数名称和所述预定核心函数所属的类名称。

可选地,调用监听模块62具体包括:第一监听子模块,用于在所述应用程序的运行过程中,监听调用libart.so的Invoke方法的对象是否包括所述敏感资源;若包含,则确定需要通过所述重置字节码文件调用所述敏感资源。

可选地,还包括第二监听子模块,用于在监听调用libart.so的Invoke方法的对象是否包括所述敏感资源之前,监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识;若包含,则将所述重置字节码文件中的所述敏感资源在内存中的存储地址记录下来,以用于修改内存中存储的所述重置字节码文件中的所述敏感资源。

可选地,还包括第三监听子模块,用于在监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识之前,监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称;若包含,则将MapFileAtAddress方法的port参数的属性设置为可写属性,以使内存中存储的所述重置字节码文件中的所述敏感资源能够被修改。

可选地,还包括第四监听子模块,用于在监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称之前,监听libart.so中的Exec方法的文件路径参数是否包含所述重置字节码文件的文件名称;若包含,则拒绝将所述重置字节码文件转换为oat文件,以使内存中修改后的所述重置字节码文件中的所述敏感资源有效。

可选地,调用监听模块62具体用于:在所述应用程序的运行过程中,基于hook方式监听是否需要通过所述重置字节码文件调用所述敏感资源。

可选地,数据修改模块63具体用于:将所述重置字节码文件中记录的所述敏感资源,修改为所述敏感资源文件中记录的重置前的所述敏感资源。

可选地,数据恢复模块64具体用于:在获取到所述敏感资源的调用结果之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

本实施例中应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。

本实施例中的应用程序运行装置能够实现前述的应用程序运行方法实施例的各个过程,并达到相同的功能和效果,这里不再重复。

本说明书一个实施例还提供了一种应用程序运行设备,图7为本说明书一实施例提供的应用程序运行设备的结构示意图,如图7所示,该设备包括:存储器701、处理器702、总线703和通信接口704。存储器701、处理器702和通信接口704通过总线703进行通信,通信接口704可以包括输入输出接口,输入输出接口包括但不限于键盘、鼠标、显示器、麦克风、扩音器等。

在一个实施例中,应用程序运行设备包括:处理器;以及

被安排成存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器实现以下流程:

从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

可选地,所述计算机可执行指令在被执行时,所述敏感资源文件通过以下方式获得:

获取对所述应用程序的源代码进行编译后得到的原始字节码文件;

遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据;

将所述预定核心函数的指令数据作为所述敏感资源;

根据所述敏感资源,生成所述敏感资源文件。

可选地,所述计算机可执行指令在被执行时,所述重置字节码文件通过以下方式获得:

在所述原始字节码文件中,将所述预定核心函数的指令数据重置为所述预设值;

将重置后的所述原始字节码文件作为所述重置字节码文件。

可选地,所述计算机可执行指令在被执行时,遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据,包括:

获取所述预定核心函数的函数名称和所述预定核心函数所属的类名称;

根据所述预定核心函数的函数名称和所述预定核心函数所属的类名称,遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据。

可选地,所述计算机可执行指令在被执行时,获取所述预定核心函数的函数名称和所述预定核心函数所属的类名称,包括:

对所述应用程序的源代码进行遍历,将所述源代码中标注有关键信息标识的函数作为所述预定核心函数;

从所述源代码中提取所述预定核心函数的函数名称和所述预定核心函数所属的类名称。

可选地,所述计算机可执行指令在被执行时,在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源,包括:

在所述应用程序的运行过程中,监听调用libart.so的Invoke方法的对象是否包括所述敏感资源;

若包含,则确定需要通过所述重置字节码文件调用所述敏感资源。

可选地,所述计算机可执行指令在被执行时,在监听调用libart.so的Invoke方法的对象是否包括所述敏感资源之前,还包括:

监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识;

若包含,则将所述重置字节码文件中的所述敏感资源在内存中的存储地址记录下来,以用于修改内存中存储的所述重置字节码文件中的所述敏感资源。

可选地,所述计算机可执行指令在被执行时,在监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识之前,还包括:

监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称;

若包含,则将MapFileAtAddress方法的port参数的属性设置为可写属性,以使内存中存储的所述重置字节码文件中的所述敏感资源能够被修改。

可选地,所述计算机可执行指令在被执行时,在监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称之前,还包括:

监听libart.so中的Exec方法的文件路径参数是否包含所述重置字节码文件的文件名称;

若包含,则拒绝将所述重置字节码文件转换为oat文件,以使内存中修改后的所述重置字节码文件中的所述敏感资源有效。

可选地,所述计算机可执行指令在被执行时,在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源,包括:

在所述应用程序的运行过程中,基于hook方式监听是否需要通过所述重置字节码文件调用所述敏感资源。

可选地,所述计算机可执行指令在被执行时,根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源,包括:

将所述重置字节码文件中记录的所述敏感资源,修改为所述敏感资源文件中记录的重置前的所述敏感资源。

可选地,所述计算机可执行指令在被执行时,在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值,包括:

在获取到所述敏感资源的调用结果之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

本实施例中应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。

本实施例中的应用程序运行设备能够实现前述的应用程序运行方法实施例的各个过程,并达到相同的功能和效果,这里不再重复。

本说明书另一个实施例还提供了一种存储介质,用于存储计算机可执行指令,所述计算机可执行指令在被处理器执行时实现以下流程:

从应用程序的后台服务器处下载所述应用程序的重置字节码文件和所述应用程序的敏感资源文件;所述重置字节码文件中记录有所述应用程序的敏感资源;所述重置字节码文件中的所述敏感资源被预先重置为预设值;所述敏感资源文件中记录有重置前的所述敏感资源;

在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源;

若需要,则根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源;

在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

可选地,所述计算机可执行指令在被处理器执行时,所述敏感资源文件通过以下方式获得:

获取对所述应用程序的源代码进行编译后得到的原始字节码文件;

遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据;

将所述预定核心函数的指令数据作为所述敏感资源;

根据所述敏感资源,生成所述敏感资源文件。

可选地,所述计算机可执行指令在被处理器执行时,所述重置字节码文件通过以下方式获得:

在所述原始字节码文件中,将所述预定核心函数的指令数据重置为所述预设值;

将重置后的所述原始字节码文件作为所述重置字节码文件。

可选地,所述计算机可执行指令在被处理器执行时,遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据,包括:

获取所述预定核心函数的函数名称和所述预定核心函数所属的类名称;

根据所述预定核心函数的函数名称和所述预定核心函数所属的类名称,遍历所述原始字节码文件,得到所述应用程序的预定核心函数的指令数据。

可选地,所述计算机可执行指令在被处理器执行时,获取所述预定核心函数的函数名称和所述预定核心函数所属的类名称,包括:

对所述应用程序的源代码进行遍历,将所述源代码中标注有关键信息标识的函数作为所述预定核心函数;

从所述源代码中提取所述预定核心函数的函数名称和所述预定核心函数所属的类名称。

可选地,所述计算机可执行指令在被处理器执行时,在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源,包括:

在所述应用程序的运行过程中,监听调用libart.so的Invoke方法的对象是否包括所述敏感资源;

若包含,则确定需要通过所述重置字节码文件调用所述敏感资源。

可选地,所述计算机可执行指令在被处理器执行时,在监听调用libart.so的Invoke方法的对象是否包括所述敏感资源之前,还包括:

监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识;

若包含,则将所述重置字节码文件中的所述敏感资源在内存中的存储地址记录下来,以用于修改内存中存储的所述重置字节码文件中的所述敏感资源。

可选地,所述计算机可执行指令在被处理器执行时,在监听libart.so中的LoadMethod方法的参数信息是否包含所述敏感资源的标识之前,还包括:

监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称;

若包含,则将MapFileAtAddress方法的port参数的属性设置为可写属性,以使内存中存储的所述重置字节码文件中的所述敏感资源能够被修改。

可选地,所述计算机可执行指令在被处理器执行时,在监听libart.so中的MapFileAtAddress方法的文件路径参数是否包含所述重置字节码文件的文件名称之前,还包括:

监听libart.so中的Exec方法的文件路径参数是否包含所述重置字节码文件的文件名称;

若包含,则拒绝将所述重置字节码文件转换为oat文件,以使内存中修改后的所述重置字节码文件中的所述敏感资源有效。

可选地,所述计算机可执行指令在被处理器执行时,在所述应用程序的运行过程中,监听是否需要通过所述重置字节码文件调用所述敏感资源,包括:

在所述应用程序的运行过程中,基于hook方式监听是否需要通过所述重置字节码文件调用所述敏感资源。

可选地,所述计算机可执行指令在被处理器执行时,根据所述敏感资源文件中记录的重置前的所述敏感资源,修改所述重置字节码文件中记录的所述敏感资源,包括:

将所述重置字节码文件中记录的所述敏感资源,修改为所述敏感资源文件中记录的重置前的所述敏感资源。

可选地,所述计算机可执行指令在被处理器执行时,在所述敏感资源被调用之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值,包括:

在获取到所述敏感资源的调用结果之后,重新将所述重置字节码文件中的所述敏感资源恢复为所述预设值。

本实施例中应用程序的敏感资源不记录在重置字节码文件中,而是记录在敏感资源文件中,只有在敏感资源被调用时,重置字节码文件中的敏感资源才会被恢复,调用结束后即重置,因此黑客在攻击应用程序时,即使获取到内存中的可执行文件,也无法从重置字节码文件中获取到应用程序的敏感资源,加大了黑客的程序破解难度,提高了应用程序运行的安全性。

本实施例中的存储介质存储的计算机可执行指令在被处理器执行时能够实现前述的应用程序运行方法实施例的各个过程,并达到相同的功能和效果,这里不再重复。

其中,所述的存储介质包括只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:API调用请求处理方法、装置、电子设备及可读存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类