apk文件的加固方法、解密方法及相关装置与流程

文档序号:21817695发布日期:2020-08-11 21:30阅读:368来源:国知局
apk文件的加固方法、解密方法及相关装置与流程

本申请涉及android应用软件信息安全领域,尤其涉及apk文件的加固、解密方法及相关装置。



背景技术:

android平台恶意软件逐日增加,其高发率源于其开发的低成本。恶意软件中很大一部分为重打包(repackaging)程序。要实现重打包,攻击者必须先对原始apk(androidpackage)进行逆向分析,之后再向原始apk进行恶意代码注入等操作。

目前,原始apk逆向分析按照android程序是否被执行可分为静态分析方法与动态调试方法。随着android应用软件保护技术日益完善,静态分析技术在面对代码混淆,软件加壳,动态加载等保护措施时,常显力不从心。而动态调试技术在android逆向分析中,特别是对原生程序的分析中有着巨大的优势。

其中,动态调试技术可以使android应用软件的实现细节暴露无遗,即攻击者可以通过动态调试技术获取到android应用软件的实现细节,从而,使得android应用软件得不到保护。



技术实现要素:

本申请提供了apk文件加固方法、解密方法及相关装置,目的在于解决android应用软件的实现细节被动态调试技术获取的问题。

为了实现上述目的,本申请提供了以下技术方案:

本申请提供了一种apk文件的加固方法,包括:

对预置apk文件进行逆向工程编译,得到第一dex文件;

对待加固的原始apk文件进行异或,得到异或后的apk文件;

对所述异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件;

将所述处理后的apk文件、所述处理后的apk文件的大小,以及所述原始apk文件的加固标识写到所述第一dex文件的尾部,得到第二dex文件;

对所述第二dex文件进行修复,得到修复后的第二dex文件;

采用所述修复后的第二dex文件替换所述预置apk文件中的dex文件;

删除所述预置apk文件的签名文件;

对所述预置apk文件重新进行签名,得到加固apk文件;其中,对于下载同种加固apk文件的不同终端,下载的加固apk文件的生成过程中对原始apk文件中的dex文件进行加密所采用的密钥不同。

可选的,对于当前下载加固apk文件的任一终端,在生成该终端下载的加固apk文件过程中,所述对所述异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件,包括:

从所述android应用软件的服务端获取该终端的密钥;

利用cr4加密算法,对所述异或后的apk文件中的dex文件采用该终端的密钥进行加密,得到所述处理后的apk文件。

可选的,所述对所述第二dex文件进行修复,得到修复后的第二dex文件,包括:

对所述第二dex文件的文件大小、sha-1哈希值和adler32校验值进行修复,得到所述修复后的第二dex文件。

本申请还提供了一种加固apk文件的解密方法,包括:

启动反调试进程;

向android应用软件的服务端发送请求信息;所述请求信息包括:加固标识、imei和请求时间;所述请求信息指示获取对所述加固apk文件中的dex文件解密的密钥;

接收所述android应用软件的服务端发送的加密后的密钥;所述加密后的密钥是采用所述请求信息对所述加固apk文件的密钥加密得到;

根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥;其中,对于下载同种加固apk文件的不同终端,用于对下载的加固apk文件中的dex文件解密的密钥不同;

采用所述解密密钥对所述加固apk文件进行脱壳解密,得到原始apk文件;

加载执行所述原始apk文件。

可选的,所述向所述android应用软件的服务端发送请求信息,包括:

采用php作为媒介,向所述android应用软件的服务端发送请求信息。

可选的,在所述接收所述android应用软件的服务端发送的加密后的密钥之后,并且,在所述根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥之前,还包括:

检测所述加固apk文件是否被动态调试;

所述根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥,具体为:

在检测结果表示所述加固apk文件未被动态调试的情况下,根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥。

可选的,在所述检测所述加固apk文件是否被动态调试之后,还包括:

在所述检测结果表示所述加固apk文件已被动态调试的情况下,将所述请求信息中的请求时间修改为当前时间,得到修改后的请求信息;

采用所述修改后的请求信息,对所述加密后的密钥进行解密,得到目标解密密钥;

采用所述目标解密密钥对所述加固apk文件进行脱壳解密。

本申请还提供了一种apk文件的加固装置,包括:

编译模块,用于对预置apk文件进行逆向工程编译,得到第一dex文件;

异或模块,用于对待加固的原始apk文件进行异或,得到异或后的apk文件;

加密模块,用于对所述异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件;

写入模块,用于将所述处理后的apk文件、所述处理后的apk文件的大小,以及所述原始apk文件的加固标识写到所述第一dex文件的尾部,得到第二dex文件;

修复模块,用于对所述第二dex文件进行修复,得到修复后的第二dex文件;

替换模块,用于采用所述修复后的第二dex文件替换所述预置apk文件中的dex文件;

删除模块,用于删除所述预置apk文件的签名文件;

签名模块,用于对所述预置apk文件重新进行签名,得到加固apk文件;其中,对于下载同种加固apk文件的不同终端,下载的加固apk文件的生成过程中对原始apk文件中的dex文件进行加密所采用的密钥不同。

可选的,对于当前下载加固apk文件的任一终端,在生成该终端下载的加固apk文件过程中,所述加密模块,用于对所述异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件,包括:

所述加密模块,具体用于从所述android应用软件的服务端获取该终端的密钥;利用cr4加密算法,对所述异或后的apk文件中的dex文件采用该终端的密钥进行加密,得到所述处理后的apk文件。

本申请还提供了一种加固apk文件的解密装置,包括:

反调试模块,用于启动反调试进程;

发送模块,用于向android应用软件的服务端发送请求信息;所述请求信息包括:加固标识、imei和请求时间;所述请求信息指示获取对所述加固apk文件中的dex文件解密的密钥;

接收模块,用于接收所述android应用软件的服务端发送的加密后的密钥;所述加密后的密钥是采用所述请求信息对所述加固apk文件的密钥加密得到;

第一解密模块,用于根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥;其中,对于下载同种加固apk文件的不同终端,用于对下载的加固apk文件中的dex文件解密的密钥不同;

第二解密模块,用于采用所述解密密钥对所述加固apk文件进行脱壳解密,得到原始apk文件;

加载模块,用于加载执行所述原始apk文件。

本申请所述的apk文件加固、解密方法及装置,对预置的apk文件进行逆向工程编译,得到第一dex文件;对原始apk文件进行异或,得到异或后的apk文件;对异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件;通过将处理后的apk文件、处理后的apk文件的大小,以及原apk文件的加固标识写到第一dex文件的尾部,得到第二dex文件,实现了对原始apk文件的加壳保护;对第二dex文件进行修复,得到修复后的第二dex文件;采用修复后的第二dex文件替换预置的apk文件中的dex文件;删除预置apk文件的签名文件;对预置apk文件重新进行签名,得到加固apk文件。即通过对原始apk文件中的dex文件进行加密、对原始apk文件进行异或,并将实现了对原始apk文件的加固。

其中,本申请中对于下载同种加固apk文件的不同终端,下载的加固apk文件的生成过程中对原始apk文件中的dex文件进行加密所采用的密钥不同,使得攻击者要想通过动态调试技术获取原始apk文件的实现细节,需要获取到加固apk文件的加密密钥,并且,不同终端下载的加固apk文件中dex文件的加密密钥是不同的,从而,增加了攻击者获取加密密钥的难度,从而,增加了攻击者通过动态调式技术获取到原始apk文件的实现细节的难度,从而,本申请可以提高对原始apk文件的保护力度。

附图说明

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

图1为本申请实施例公开的一种apk文件的加固方法的流程图;

图2为本申请实施例公开的一种加固apk文件的解密方法的流程图;

图3为本申请实施例公开的一种apk文件的加固装置的结构示意图;

图4为本申请实施例公开的一种加固apk文件的解密装置的结构示意图。

具体实施方式

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

本申请实施例提供的apk文件的加固和解密方法,适用于运行于android系统中的任一应用软件,以下以任一应用软件为例进行介绍。其中,对于任一应用软件,将程序员编写完成且未安装在终端的apk文件,称为该应用软件的原始apk文件。

在本申请实施例中,apk文件的加固方法开始执行的触发条件可以是:接收到终端对该应用软件的原始apk文件的下载指令,当然,在实际中,触发条件还可以为其他内容,本申请实施例不对触发条件的具体内容作限定。

本申请实施例以任一终端为例,介绍对原始apk文件的加固过程和对加固apk文件的解密过程。

图1为本申请实施例提供的一种apk文件的加固方法,包括以下步骤:

s101、对预置apk文件进行逆向工程编译,得到第一dex文件。

在本步骤中,对预置apk文件进行逆向工程编译,为了描述方便,将编译得到的dex文件成为第一dex文件。

需要说明的是,本步骤得到的第一dex文件由于缺乏有效载荷尚不可执行。

s102、对待加固的原始apk文件进行异或,得到异或后的apk文件。

在本步骤中,对待加固的原始apk文件进行异或,为了描述方便,将异或得到的结果称为异或后的apk文件。

s103、对异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件。

在本实施例中,待加固的原始apk文件包括dex文件,并且,该dex文件是待加固的原始apk文件的核心,因此,在本步骤中,对异或后的apk文件中的dex文件采用密钥进行加密,为了描述方便,将本步骤的执行结果称为处理后的apk文件。

具体的,本实施例中,对原始apk文件进行异或,以及对异或后的apk文件中的dex文件进行加密,可以采用加固工具(shelltools)实现,具体的,加固工具对原始apk文件进行异或以及对异或后的apk文件中的dex文件进行加密的实现方式为现有技术,这里不再赘述。

具体的,在本步骤中,对异或后的apk文件中的dex文件进行加密的过程可以包括步骤a1~步骤a2:

a1、从android应用软件的服务端获取该终端的密钥。

在本实施例中,以任一终端为例介绍对该终端下载的原始apk文件的加固过程。

本申请实施例中,对于下载该原始apk文件的不同终端,下载的加固apk文件的生成过程中对原始apk文件中的dex文件进行加密的密钥不同。本实施例不对密钥的生成方式作限定,只要不同终端分别对应的密钥不同即可。

在本步骤中,从android应用软件的服务端获取该终端的密钥。

a2、利用cr4加密算法,对异或后的apk文件中的dex文件采用该终端的密钥进行加密,得到处理后的apk文件。

具体的,在本步骤中,可以采用cr4加密算法,使得cr4算法采用该终端的密钥对异或后的apk文件中的dex文件进行加密,为了描述方便,本步骤的执行结果称为处理后的apk文件。

s104、将处理后的apk文件、处理后的apk文件的大小,以及原始apk文件的加固标识写到第一dex文件的尾部,得到第二dex文件。

在本实施例中,任一终端下载的apk文件的加固标识是根据该终端的相关信息和用于标识该终端下载加固apk文件的信息生成,本实施例不对加固标识的具体生成方式作限定。其中,任一终端下载的apk文件的加固标识可以保存在android应用软件的数据库中。

在本步骤中,将处理后的apk文件、处理后的apk文件的大小,以及原始apk文件的加固标识,写入到第一dex文件的尾部,为了描述方便,将写入第一dex文件尾部后得到的dex文件,称为第二dex文件。

s105、对第二dex文件进行修复,得到修复后的第二dex文件。

在本实施例中,为了避免报[install_failed_dexopt]错误,在本步骤中,对第二dex文件进行修复。

具体的,对第二dex文件进行文件大小、sha-1哈希值和adler32校验值进行修复,其中,具体的修复实现方式为现有技术,这里不再赘述。

在本实施中,为了描述方便,将修复得到的dex文件称为修复后的第二dex文件。

s106、采用修复后的第二dex文件替换预置apk文件中的dex文件。

在本步骤中,将修复后的第二dex文件替换预置apk文件中的dex文件,其中,替换的具体实现方式为现有技术,这里不再赘述。

s107、删除预置apk文件的签名文件。

在本实施例中,由于预置apk文件中的dex文件已经被替换,因此,预置apk文件的签名文件已经不适用,因此,在本步骤中,删除预置apk文件的签名文件。

s108、对预置apk文件重新进行签名,得到加固apk文件。

在删除预置apk文件的签名文件后,在本步骤中,对预置apk文件重新进行签名,其中,签名的具体实现方式为现有技术,这里不再赘述。

在对预置apk文件重新签名后,得到了加固apk文件。

在本实施例中,由于对于下载同种加固apk文件的不同终端,下载的加固apk文件生成过程中对原始apk文件中的dex文件进行加密所采用的密钥不同,使得对于不同终端的加固apk文件中dex文件的加密密钥不同,从而,攻击者要想通过动态调试方法获取到原始apk文件的实现细节,需要获取到加固apk文件中dex文件的加密密钥,并且,不同终端对应的加密密钥不同,因此,增大了攻击者通过动态调试获取原始apk文件运行细节的难度,从而,实现对原始apk文件的保护力度。

在本申请实施例中,在该终端下载到加固apk文件后,该加固apk文件中的脱壳apk在该终端运行,即终端运行加固apk文件中的脱壳apk(s101中的第一dex文件),实现对加固apk文件的脱壳解密,得到原始apk文件,并对原始apk文件进行加载。在本申请实施例中,将加固apk文件执行脱壳解密和加载的过程,统称为加固apk文件的解密过程。

图2为本申请实施例提供的一种加固apk文件的解密方法,包括以下步骤:

s201、终端启动反调试进程。

为了阻止攻击者通过动态调试技术获取原始apk文件的实现细节,因此,在本步骤中,终端启动反调试进程。在本实施例中提到的终端指加固apk文件运行在的终端。

其中,反调试进程的具体实现流程为现有技术,这里不再赘述。

s202、终端向android应用软件的服务端发送请求信息。

在本步骤中,终端向android应用软件的服务端发送的请求信息,用于指示服务端反馈于对加固apk文件中的dex文件解密的密钥。其中,请求信息可以包括:加固标识、国际移动设备识别码(internationalmobileequipmentidentity,imei),通常称作手机序列号和请求时间。

其中,对于任一终端来说,本步骤的加固标识与s104中的加固标识相同,imei是为了绑定该终端的信息,请求时间为终端发送请求信息的时间。

在本实施例中,android应用软件的服务端为了避免数据库中保存的用户名和密码暴露的问题,android应用软件的服务端采用了wampserver。因此,相应的,在本步骤中,终端可以采用php作为媒介,向android应用软件的服务端发送请求信息,来获取用于对加固apk文件中的dex文件进行解密的密钥。

s203、android应用软件的服务端检测请求信息中的imei是否为预设值,如果是,则执行s204,如果否,则执行s205。

其中,预设值可以为终端(例如手机)的串号,是一段数字,其中,每一个终端的串号都是唯一的,即不同终端的串号是不同的。

具体的,在本步骤中,预设值可以为“000000000000000”。

s204、android应用软件的服务端修改请求信息中imei的值。

在本实施例中,在请求信息中的imei是预设值的情况下,执行本步骤。

具体的,修改请求信息中imei的值。例如,可以修改为“000000000000001”。

执行完本步骤后,执行s205。

s205、android应用软件的服务端依据接收到的请求信息,对该终端的密钥进行加密,得到加密后的密钥。

在本实施例中,在请求信息中的imei不是预设值的情况下,执行本步骤的操作。

在本实施例中,android应用软件的服务端根据接收到的请求信息中的加固标识,从数据库中加固标识与密钥间的对应关系中,查找接收到的请求信息中的加固标识指示的密钥。

在本步骤中,android应用软件的服务端采用请求信息的md5值对请求信息中的加固标识指示的密钥进行加密,为了描述方便,称为加密后的密钥。

s206、android应用软件的服务端向终端发送加密后的密钥。

在本步骤中,android应用软件的服务端向终端发送加密后的密钥。

s207、终端检测加固apk文件是否被动态调试,如果否,则执行s208,如果是,则执行s211。

在本实施例中,为了防止攻击者获取到加固apk文件中dex文件的解密密钥,因此,在终端接收到加密后的密钥之后,且对加密后的密钥进行解密之前,执行本步骤的操作,即检测加固apk文件是否被动态调试,如果否,则执行s208,如果是,则执行s211。

s208、终端根据请求信息对接收到的加密后的密钥进行解密,得到用于对该加固apk文件中的dex文件进行解密的解密密钥。

在本实施例中,在检测结果表示加固apk文件未被动态调试的情况下,执行本步骤,即终端根据发送的请求信息,对接收到的加密后的密钥进行解密,得到用于对加固apk文件中的dex文件进行解密的解密密钥。

需要说明的是,对于下载同种加固apk文件的不同终端,由于用于对不同终端的加固apk文件中的dex文件进行加密的密钥不同,因此,在本实施例中,用于对不同终端的加固apk文件中的dex文件进行解密的解密密钥不同。

s209、终端采用解密密钥对该加固apk文件进行脱壳解密,得到原始apk文件。

在本步骤中,终端采用解密密钥对该加固apk文件进行脱壳以及解密,其中,脱壳和解密的具体实现方式为现有技术,这里不再赘述,得到原始apk文件。

s210、终端加载执行原始apk文件。

在本步骤中,终端可以通过反射机制置换系统默认类加载器为自定义类加载器,实现对解密后的dex文件的加载执行。

s211、终端将请求信息中的请求时间修改为当前时间,得到修改后的请求信息。

在检测结果表示加固apk文件被动态调试的情况下,执行本步骤的操作。具体的,在本步骤中,终端将请求信息中的请求时间修改为当前时间,得到修改后的请求信息,此时,修改后的请求信息与s202中发送的请求信息不同。

s212、终端采用修改后的请求信息,对加密后的密钥进行解密,得到目标解密密钥。

由于加密后的密钥是采用s202中的请求信息的md5值加密得到的,因此,本步骤采用修改后的请求信息对加密后的密钥进行解密,为了描述方便,将解密得到的密钥称为目标解密密钥,该目标解密密钥并不是加固apk文件中dex文件的解密密钥。

s213、终端采用目标解密密钥对该加固apk文件进行脱壳解密。

由于目标解密密钥并不是加固apk文件中原始apk文件中的dex文件的解密密钥,因此,在本步骤中,采用目标解密密钥对该加固apk文件进行脱壳解密不会成功。从而,即使攻击者通过动态调试技术获取到该终端的解密密钥,攻击者利用获取的解密密钥对加固apk文件进行脱壳解密,也得不到原始apk文件,从而,防止了攻击者获取到对加固apk文件中的dex文件的解密密钥,防止了攻击者获取到原始apk文件的实现细节。

需要说明的是,在实际中,s207检测加固apk文件是否被动态调试是可选的步骤,即执行s206后,直接执行s208~s210。

本实施例的有益效果包括:

在本实施例中,有两处反调试设计,第一处为s201启动反调试进程,第二处为s207中检测加固apk文件的是否被动态调试,如果检测结果表示加固apk文件被动态调试的情况下,通过修改请求信息的内容,即修改解密参数,而不再主动kill掉自身,使攻击者无法对加固apk文件中dex文件进行正确解密,从而得不到正常的原始apk文件,进而,攻击者动态加载失败,即攻击者未能获取原始apk文件的执行细节。

图3为本申请实施例提供的一种apk文件的加固装置,包括:编译模块301、异或模块302、加密模块303、写入模块304、修复模块305、替换模块306、删除模块307和签名模块308,其中,

编译模块301,用于对预置apk文件进行逆向工程编译,得到第一dex文件;异或模块302,用于对待加固的原始apk文件进行异或,得到异或后的apk文件;加密模块303,用于对所述异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件;写入模块304,用于将所述处理后的apk文件、所述处理后的apk文件的大小,以及所述原始apk文件的加固标识写到所述第一dex文件的尾部,得到第二dex文件;修复模块305,用于对所述第二dex文件进行修复,得到修复后的第二dex文件;替换模块306,用于采用所述修复后的第二dex文件替换所述预置apk文件中的dex文件;删除模块307,用于删除所述预置apk文件的签名文件;签名模块308,用于对所述预置apk文件重新进行签名,得到加固apk文件;其中,对于下载同种加固apk文件的不同终端,下载的加固apk文件的生成过程中对原始apk文件中的dex文件进行加密所采用的密钥不同。

可选的,对于当前下载加固apk文件的任一终端,在生成该终端下载的加固apk文件过程中,加密模块303,用于对异或后的apk文件中的dex文件采用密钥进行加密,得到处理后的apk文件,包括:加密模块303,具体用于从android应用软件的服务端获取该终端的密钥;利用cr4加密算法,对异或后的apk文件中的dex文件采用该终端的密钥进行加密,得到处理后的apk文件。

可选的,修复模块305对第二dex文件进行修复,得到修复后的第二dex文件,包括:修复模块305具体用于对第二dex文件的文件大小、sha-1哈希值和adler32校验值进行修复,得到修复后的第二dex文件。

图4为本申请实施例提供的一种加固apk文件的解密装置,包括:反调试模块401、发送模块402、接收模块403、第一解密模块404、第二解密模块405和加载模块406,其中,

反调试模块401,用于启动反调试进程;发送模块402,用于向android应用软件的服务端发送请求信息;请求信息包括:加固标识、imei和请求时间;请求信息指示获取对加固apk文件中的dex文件解密的密钥;接收模块403,用于接收android应用软件的服务端发送的加密后的密钥;加密后的密钥是采用请求信息对加固apk文件的密钥加密得到;第一解密模块404,用于根据请求信息对加密后的密钥进行解密,得到用于对加固apk文件中的dex文件进行解密的解密密钥;其中,对于下载同种加固apk文件的不同终端,用于对下载的加固apk文件中的dex文件解密的密钥不同;第二解密模块405,用于采用解密密钥对所述加固apk文件进行脱壳解密,得到原始apk文件;加载模块406,用于加载执行原始apk文件。

可选的,发送模块402,用于向android应用软件的服务端发送请求信息,包括:发送模块402,具体用于采用php作为媒介,向android应用软件的服务端发送请求信息。

可选的,本实施例还可以包括:检测模块,用于在接收模块接收android应用软件的服务端发送的加密后的密钥之后,并且,在第一解密模块404根据所述请求信息对所述加密后的密钥进行解密,得到用于对加固apk文件中的dex文件进行解密的解密密钥之前,检测加固apk文件是否被动态调试;

其中,第一解密模块404,用于根据所述请求信息对所述加密后的密钥进行解密,得到用于对所述加固apk文件中的dex文件进行解密的解密密钥,具体为:第一解密模块404,具体用于在检测结果表示加固apk文件未被动态调试的情况下,根据请求信息对加密后的密钥进行解密,得到用于对加固apk文件中的dex文件进行解密的解密密钥。

可选的,本实施例还可以包括执行模块,用于在检测模块检测加固apk文件是否被动态调试之后,在检测结果表示加固apk文件已被动态调试的情况下,将请求信息中的请求时间修改为当前时间,得到修改后的请求信息;采用修改后的请求信息,对加密后的密钥进行解密,得到目标解密密钥;采用目标解密密钥对加固apk文件进行脱壳解密。

本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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