著录项信息
专利名称 | 应用程序防止逆向的方法及装置、运行方法及终端 |
申请号 | CN201410521806.5 | 申请日期 | 2014-09-30 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-12-24 | 公开/公告号 | CN104239757A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/14 | IPC分类号 | G;0;6;F;2;1;/;1;4查看分类表>
|
申请人 | 北京奇虎科技有限公司;奇智软件(北京)有限公司 | 申请人地址 | 北京市西城区新街口外大街28号D座112室(德胜园区)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 | 当前权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 |
发明人 | 张立春 |
代理机构 | 北京路浩知识产权代理有限公司 | 代理人 | 李相雨 |
摘要
本发明提供一种应用程序防止逆向的方法及装置、运行方法及终端,其中,应用程序防止逆向的方法包括:从应用程序中获取包括可执行代码的文件;压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。本发明能够减少现有技术中应用程序由加固过程产生的加固增量,同时防止应用程序中的可执行代码被逆向查找。
1.一种应用程序防止逆向的方法,其特征在于,包括:
从应用程序中获取包括可执行代码的文件;
压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据;
根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
2.根据权利要求1所述的方法,其特征在于,所述从应用程序中获取包括可执行代码的文件之前,所述方法还包括:
接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,所述从应用程序中获取包括可执行代码的文件,包括:
根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。
3.一种应用程序的运行方法,其特征在于,包括:
获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的;
根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
4.一种应用程序防止逆向的装置,其特征在于,所述装置包括:
获取单元,用于从应用程序中获取包括可执行代码的文件;
压缩单元,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据;
替换文件生成单元,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
5.根据权利要求4所述的装置,其特征在于,该装置还包括:
接口单元,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;
相应地,获取单元具体用于:
根据所述接口单元接收的加固请求,从所述应用程序中获取包括可执行代码的文件。
6.一种应用程序的运行终端,其特征在于,包括:
获取单元,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的;
解压缩单元,用于根据所述获取单元获取的所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码;
所述附加数据包括:
用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码的可执行文件,和,
用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。
应用程序防止逆向的方法及装置、运行方法及终端\n技术领域\n[0001] 本发明涉及安全技术,尤其涉及一种应用程序防止逆向的方法及装置、运行方法及终端。\n背景技术\n[0002] 随着移动终端平台的日益发展,第三方应用程序大量涌现,对第三方应用的盗版和重打包现象日益严重。其原因主要在于,目前市面上存在多种对应用文件进行解压缩的通用软件,在利用这些软件对应用文件进行解压缩之后,应用源代码中的明文字符串、库函数调用、核心功能函数等都显露无遗,使得非法开发者对第三方应用程序的盗版或者核心功能的逆向工程都变得简单易行。\n[0003] 为防止应用被反编译、恶意篡改,可以通过加固的方法来并保护应用数据信息不被窃取。所谓应用程序的加固一般指采用加壳、隐蔽、混淆等手段对源程序代码进行加密,同时不影响应用文件的正常运行。\n[0004] 然而,采用现有的加固方法通常会使应用文件在加固后以一定比例增大(一般最低为8%到9%)、占用更多的存储空间(或称为“加固增量”),因而会对应用文件的运行、存储和传输的效率造成影响,不利于应用的使用和推广。\n发明内容\n[0005] 针对现有技术中的缺陷,本发明提供一种应用程序防止逆向的方法及装置、应用程序的运行方法及终端,能够减少现有技术中应用程序由加固过程产生的加固增量,同时防止应用程序中的可执行代码被逆向查找。\n[0006] 第一方面,本发明提供了一种应用程序防止逆向的方法,其特征在于,包括:\n[0007] 从应用程序中获取包括可执行代码的文件;\n[0008] 压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;\n[0009] 根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。\n[0010] 可选地,所述附加数据包括:\n[0011] 用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,\n[0012] 用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。\n[0013] 可选地,该方法还包括:将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。\n[0014] 可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。\n[0015] 可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。\n[0016] 可选地,所述从应用程序中获取包括可执行代码的文件之前,所述方法还包括:\n[0017] 接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;\n[0018] 相应地,所述从应用程序中获取包括可执行代码的文件,包括:\n[0019] 根据所述加固请求,从所述应用程序中获取包括可执行代码的文件。\n[0020] 第二方面,本发明还提供了一种应用程序的运行方法,包括:\n[0021] 获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;\n[0022] 根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。\n[0023] 可选地,所述附加数据包括:\n[0024] 用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,\n[0025] 用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。\n[0026] 可选地,所述根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码的步骤,包括:\n[0027] 利用所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。\n[0028] 可选地,所述应用程序的可执行代码为:所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。\n[0029] 第三方面,本发明还提供了一种应用程序防止逆向的装置,该装置包括:\n[0030] 获取单元,用于从应用程序中获取包括可执行代码的文件;\n[0031] 压缩单元,用于压缩所述获取单元获取的所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找;\n[0032] 替换文件生成单元,用于根据所述压缩单元生成的所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。\n[0033] 可选地,所述附加数据包括:\n[0034] 用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,\n[0035] 用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。\n[0036] 可选地,该装置还包括:变更单元,用于将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。\n[0037] 可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。\n[0038] 可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。\n[0039] 可选地,该装置还包括:\n[0040] 接口单元,用于接收应用程序的加固请求,所述加固请求包括:所述应用程序的安装包,和所述应用程序的渠道信息;所述安装包包括:包括可执行代码的文件和资源文件,所述资源文件中配置有与所述渠道信息对应的信息;\n[0041] 相应地,获取单元具体用于:\n[0042] 根据所述接口单元接收的加固请求,从所述应用程序中获取包括可执行代码的文件。\n[0043] 第四方面,本发明还提供了一种终端,包括:\n[0044] 获取单元,用于获取应用程序中压缩后的包括可执行代码的文件和附加数据,所述附加数据为压缩所述包括可执行代码的文件的过程中生成的,用于在运行该应用程序的系统的内存中还原并运行所述可执行代码、防止所述可执行代码被逆向查找的数据;\n[0045] 解压缩单元,用于根据所述附加数据,对压缩后的包括可执行代码的文件进行解压缩处理,且在运行该应用程序的系统的内存中还原并运行解压缩后的可执行代码。\n[0046] 可选地,所述附加数据包括:\n[0047] 用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,\n[0048] 用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。\n[0049] 可选地,所述解压缩单元,具体用于利用所述获取单元获取的所述附加数据中的可执行文件调用所述动态链接库对所述压缩后的包括可执行代码的文件进行解压缩处理,在运行该应用程序的系统的内存中还原解压缩后的可执行代码,并使所述应用程序的运行指令起始点指向还原后的可执行代码。\n[0050] 可选地,所述运行所述应用程序的系统为Android系统;所述应用程序中包括可执行代码的文件为Android安装包APK文件中的classes.dex文件。\n[0051] 由上述技术方案可知,本发明主要根据应用程序中包括可执行代码的文件得到压缩处理后的文件和附加数据两个部分,其中附加数据用于还原、运行所述可执行代码,并起到防止可执行代码被逆向查找的作用。由此,本发明对于占有主要存储空间的可执行代码进行了压缩,并在运行时使用附加数据对应地进行解压缩,可以在不影响应用程序正常运行的情况下有效地减小加固增量。\n附图说明\n[0052] 图1为本发明一实施例提供的应用程序防止逆向的方法的流程示意图;\n[0053] 图2为本发明一实施例提供的应用程序的运行方法的流程示意图;\n[0054] 图3为本发明一实施例提供的Android系统下的APK文件的加固方法的流程示意图;\n[0055] 图4为本发明一实施例提供的应用程序防止逆向的装置的结构示意图;\n[0056] 图5为本发明一实施例提供的终端的结构示意图。\n具体实施方式\n[0057] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。\n[0058] 现有技术中出现了多种安卓应用的安全加固方法,通过对安卓应用进行加密、防反编译、防代码混淆等加固措施,然而由于加固方法所采用的方案不同,加固的效果也不同,有些加固后并不能达到防止暴力破解的效果,例如现有的一种加固方法首先加密原程序包的可执行文件dex,然后在提取四大组件信息生成代理的dex文件,程序执行时动态解密原程序dex,然而这样的加密方式,加密包和原包分离,原包仅为加密文件,可以轻易地通过内存转存实现程序的破解,加固效果有限。\n[0059] 当前,在Android系统上,一个可以安装、运行的应用,需要打包成Android系统的APK文件格式。APK是Android application package file的缩写,简称APK文件,即Android安装包,也可以理解为Android终端上安装的应用软件。APK文件其实是ZIP文件格式,但后缀名被修改为APK,通过工具解压等方式可以看到其内部的文件结构,如表1所示:\n[0060] 表1 APK文件内部的文件结构\n[0061]\n[0062] Android安装包(APK文件)一般通过Android应用市场下载、安装到手机上,也可以通过USB数据线等数据线接口或无线数据传输的方式从PC安装。Android上的病毒、木马和其他恶意软件想要进入用户的手机,也必须打包成APK的形式。反过来说,如果不是一个合法的APK文件,它就无法安装到用户手机上,也就不会对用户产生危害。基于这一点,杀毒引擎就可以把查杀的目标集中到对APK文件的扫描上,从而大大提高扫描的效率。\n[0063] 那么,Android安装包(APK文件)中的哪些信息可以作为扫描的重点,针对此问题本申请进行了分析,具体如下:\n[0064] 1)包名\n[0065] Android操作系统通过APK的包名(package name)对各个安装的APK进行管理。“包名”是与应用相互对应的一种标识,具有固定的命名风格。例如某个Android安装包的包名是com.qihoo360.mobilesafe。Android系统要求每个应用都声明一个唯一的包名。如果要安装的APK的包名和当前手机上某个已有的应用的包名重复了,那么Android系统会拒绝安装。Android平台下的恶意软件也需要声明一个包名,因此,包名就可以作为识别恶意软件的一个重要特征。\n[0066] 2)数字签名\n[0067] 出于安全性的目的,Android系统要求每个APK都要包含数字签名(digital signature)。Android系统在安装APK文件的时候会检查APK内部各文件的数字签名是否与其预先设定的数字签名一致,如果不一致,或者没有数字签名,则认为文件已被篡改,拒绝该APK的安装和运行。Android平台下的恶意软件也不例外,所以APK文件的数字签名也可以作为识别恶意软件的一个重要特征。\n[0068] 3)AndroidManifest.xml中列出的各模块的入口信息\n[0069] AndroidManifest.xml是每个APK文件所必需的全局描述文件,里面列出了Android安装包中应用的每个模块的入口信息。在Android系统中,只有在\nAndroidManifest.xml中列出了的模块,才能够被系统调用。Android平台下的木马,往往会伪装成正常的应用或游戏来诱骗用户安装,其中有很多木马就是寄生在一个正常的应用或游戏中,用户运行它的时候,看上去是原来的软件或游戏,但寄生在其中的木马模块在合适的时机就被激活,从而感染用户的手机。而因为Android系统要求所有的模块都要在AndroidManifest.xml中列出,这就为寻找寄生的木马提高了重要线索。因此,AndroidManifest.xml中列出的各模块的信息,也是识别恶意软件的重要特征。\n[0070] 4)dex文件和ELF文件\n[0071] Android应用通常是用Java语言开发的,它用Android开发工具编译之后变成了二进制的字节码(byte code),这些字节码被打包成classes.dex文件,由Android平台的Dalvik虚拟机来解释执行。为了能够调用Android系统功能,Android系统提供了一套运行环境(Android Framework),Android应用调用系统各功能都是通过调用Android Framework的库来实现的。\n[0072] 另一方面,Android系统也支持应用程序通过JNI(Java Native Interface,JAVA本地调用)或者二进制可执行程序(native executable)直接运行。此时应用执行的是直接在CPU上运行的二进制机器码,不需要经过虚拟机解释,可以直接调用Android库如libc、WebKit、SQLite、OpenGL/ES(函数库的名称)等来调用系统各功能。如果Android应用要通过JNI或者native executable运行,就需要将要执行的代码编译成ELF文件格式。ELF是Executable and Linkable Format的缩写,是Android/Linux操作系统中可执行程序、共享库的文件格式。\n[0073] 每一个安卓软件安装包(APKAPK)都包含一个清单(Manifest)文件,也就是AndroidManifest.xml,它存储在项目层次中的最底层。清单可以定义应用程序及其组件的结构和元数据。AndroidManifest.xml包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用目的过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。它还提供了各种属性来详细地说明应用程序的元数据(图标或者主题)以及额外的可用来进行安全设置和单元测试顶级节点。\n[0074] 清单(Manifest)文件中的标签包含了一些节点(node),它们定义了应用程序组件、安全设置和组成应用程序的测试类。下面列出了一些常用的清单(Manifest)文件中的节点标签:\n[0075] 应用节点标签(application),清单内一般只包含一个application节点。\napplication节点使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。\napplication节点还可以作为一个包含了活动、服务、内容提供器和广播接收器标签的容器,用来指定应用程序组件。\n[0076] 活动节点标签(activity),应用程序显示的每一个活动(Activity)都要求有一个activity标签。\n[0077] 服务节点标签(service),service标签和activity标签一样,应用程序中使用的每一个服务类(Service)都要创建一个新的service标签。\n[0078] 内容提供者标签(provider),provider标签用来说明应用程序中的每一个内容提供器。\n[0079] 接收器标签(receiver),通过添加receiver标签,可以注册一个广播接收器(Broadcast Receiver),而不用事先启动应用程序。广播接收器就像全局事件监听器一样,通过在声明中注册一个广播接收器,可以使这个进程实现完全自动化。如果一个匹配的数据传输被广播了,则应用程序就会自动启动,并且注册的广播接收器也会开始运行。\n[0080] 用户权限标签(uses-permission),作为安全模型的一部分,uses-permission标签声明了那些由用户定义的权限,而这些权限是应用程序正常执行所必需的。\n[0081] 许可标签(permission),许可标签在可以限制访问某个应用程序组件之前,需要在清单中定义一个permission标签。可以使用permission标签来创建这些权限定义。\n[0082] 检测类(instrumentation),instrumentation类提供一个框架,用来在应用程序运行时在活动或者服务上运行测试。它们提供了一些方法来监控应用程序及其与系统资源的交互。\n[0083] 在本发明的一种优选实施例应用于Android系统中时,可执行文件包括dex文件,dex文件主要是APK中的classes.dex文件,即Dalvik Executable(Dalvik虚拟机可执行文件)。公知的是,Dalvik是用于Android平台的Java虚拟机。Dalvik虚拟机(Dalvik VM)是Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。虚拟机的线程机制,内存分配和管理,等等都是依赖底层操作系统而实现的,一般包含在APK文件里的dex文件会在运行时被优化,优化后的文件将被保存在缓存中。\n[0084] 可执行文件还可以包括扩展名为.jar的文件。Android安装包中的JAR文件其实就是dex文件,只不过其扩展名为.jar。\n[0085] 根据以上对安卓程序安装包的分析,AndroidManifest.xml描述了应用的名字、版本、权限、引用的库文件等信息,因此,安卓系统在运行程序时首先需要解压APK文件,然后获取编译后的androidmanifest.xml文件中配置信息,执行dex程序。APK文件在打包过程中,把所有的字节码文件转成dex文件(classes.dex)然后使用安卓打包工具将dex文件,资源文件以及AndroidManifest.xml文件组合成一个应用程序包(APK)。\n[0086] 图1示出了本发明一实施例提供的应用程序防止逆向的方法的流程示意图,本实施例的应用程序防止逆向的方法如下所述。\n[0087] 101、从应用程序中获取包括可执行代码的文件。\n[0088] 举例来说,本实施例中的应用程序,指的是适用于某种特定的操作系统下的可执行程序,应用程序包括作为程序源代码的可执行代码部分。举例来说,应用程序可为运行在Windows系统、Linux系统、Android系统或者其他操作系统下的软件、应用、软件安装包、应用安装包等等。应用程序中,需要被保护的可执行代码位于至少一个文件当中,而步骤101中所要获取的就是这些包括了可执行代码的文件。\n[0089] 应说明的是,这里的应用程序应为未经过如加固、加壳、压缩、加密等手段处理过的、可以直接正常运行的应用程序。\n[0090] 在具体应用中,上述应用程序可包括如Android安装包APK(Android Package)文件中的classes.dex文件,而classes.dex文件中包括APK文件中需要被保护的可执行代码,此时包括了可执行代码的文件即classes.dex文件。\n[0091] 102、压缩所述包括可执行代码的文件,生成压缩后的文件和附加数据,所述附加数据用于在运行该应用程序的系统的内存中还原并运行所述压缩后的文件中的可执行代码,所述附加数据还用于防止所述可执行代码被逆向查找。\n[0092] 举例来说,附加数据可包括:用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的可执行文件,和,用于防止所述可执行代码被逆向查找的动态链接库,所述动态链接库包括用于在运行该应用程序的系统的内存中还原并运行所述可执行代码的部分数据。这里的可执行文件中并不包含完整的可执行代码,因而不可能通过对其进行简单的逆向操作得到可执行代码。另一方面,动态链接库中存储的数据具有不易被逆向的特点,因而起到对可执行代码的隐蔽作用。\n[0093] 当然,本实施例中的附加数据还可包括其他数据或文件,本实施例不对附加数据包括的内容进行限制。\n[0094] 步骤103、根据所述压缩后的文件和所述附加数据,生成一替换文件,将所述替换文件作为所述应用程序中的包括可执行代码的文件。\n[0095] 通常,在运行应用程序时,根据应用程序的指令起始点运行应用程序的可执行代码。然而在本实施例中,由于对应用程序中的可执行代码进行了压缩处理,为此在运行经过上述防止逆向处理后的应用程序时,无法直接以原来的指令起始点来运行应用程序的可执行代码。因此,本实施例中在生成替换文件之后,将所述应用程序的运行指令起始点变更为所述替换文件的运行指令起始点。\n[0096] 进而,在运行经过上述步骤处理后的应用程序时,首先运行包括附加数据的上述替换文件,进而还原并运行应用程序的可执行代码。\n[0097] 本实施例的方案主要是对应用程序的安装包中的代码文件执行加固操作,所述加固操作能够提高应用程序的安全性,有效防止应用程序被反编译、恶意篡改、保护应用程序的数据信息不会被黑客窃取,降低应用程序被病毒植入、广告加入、支付渠道篡改、钓鱼、信息劫持等风险。\n[0098] 可选地,所述替换文件与所述应用程序中包括可执行代码的文件具有相同的文件名。基于该特征,经过上述步骤处理后的应用程序可以不改变包括可执行代码的文件与应用程序中其他文件之间的调用关系。\n[0099] 在本实施例中,为了保护应用程序中的可执行代码部分不被反编译、且不被恶意篡改、保护应用程序的数据信息不被黑客窃取,对应用程序的包括可执行代码的文件进行压缩处理,得到压缩后的文件和附加数据,进而可实现有效保护应用程序的可执行代码。\n[0100] 在本实施例中,对应用程序中包括可执行代码的文件的处理可理解为对该文件进行了一种变换,这种变换按照特定的方式保留原文件的全部信息,但变换后的可执行代码对外部呈现不可见的状态。举例来说,这样的变换可以是加密、加壳、压缩等手段或者上述手段的组合,当然变换的形式也不仅限于此。\n[0101] 同时,为了使变换不对应用程序的运行造成影响,需要同时生成一些附加数据,用于在系统(即上述安装应用程序的操作系统)中运行上述压缩后的文件。举例来说,附加数据在运行时对应变换会进行一系列相反的操作,使得可执行代码在系统内存中展开,变为可以运行的状态,然后调整程序的运行或调用,使可执行代码可以在内存中正常运行。\n[0102] 在本实施例中,对应用程序的可执行代码进行压缩得到上述压缩后的文件和附加数据,可理解为对应用程序的加固处理。本实施例中的压缩可为采用当前公知的压缩算法对应用程序的可执行代码进行压缩处理。\n[0103] 举例来说,本实施例中,加固处理后的可执行代码和所述附加数据的大小为n kB,所述待加固的应用程序的可执行代码的大小为mkB,0
法律信息
- 2022-07-22
专利权的转移
登记生效日: 2022.07.11
专利权人由北京奇虎科技有限公司变更为北京奇虎科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
专利权人由奇智软件(北京)有限公司 变更为空
- 2017-04-19
- 2015-01-14
实质审查的生效
IPC(主分类): G06F 21/14
专利申请号: 201410521806.5
申请日: 2014.09.30
- 2014-12-24
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2014-09-03
|
2014-06-17
| | |
2
| |
2013-11-27
|
2013-07-10
| | |
3
| |
2014-04-23
|
2013-12-02
| | |
4
| |
2014-07-09
|
2013-01-07
| | |
5
| |
2013-12-25
|
2013-09-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |