著录项信息
专利名称 | 一种安卓应用的加固保护方法、服务器和系统 |
申请号 | CN201410734372.7 | 申请日期 | 2014-12-04 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2015-03-25 | 公开/公告号 | CN104462959A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/55 | IPC分类号 | G;0;6;F;2;1;/;5;5;;;G;0;6;F;9;/;4;5查看分类表>
|
申请人 | 北京奇虎科技有限公司;奇智软件(北京)有限公司 | 申请人地址 | 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司 | 当前权利人 | 北京奇虎科技有限公司 |
发明人 | 李伟;董清 |
代理机构 | 北京市隆安律师事务所 | 代理人 | 权鲜枝;何立春 |
摘要
本发明公开了一种安卓应用的加固保护方法、服务器和系统,该方法包括获取安卓应用的原始安卓安装包APK;反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK。本发明提供的技术方案实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。
1.一种安卓应用的加固保护方法,其中,该方法包括:
获取安卓应用的原始安卓安装包APK;
反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;
根据选择的指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;
将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;
其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。
2.如权利要求1所述的方法,其中,
所述原始APK中通过注解来标识受保护的方法代码;
所述反编译所述原始APK,从中提取出受保护的方法代码包括:反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。
3.如权利要求1所述的方法,其中,所述指定加解密策略包括如下中的一种或多种:
反调试策略;
反Dump策略;
反重打包策略;
字符串加解密策略。
4.如权利要求1所述的方法,其中,将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中包括:
将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。
5.如权利要求1所述的方法,其中,
所述受保护的方法代码为所述安卓应用的原始APK中的dex文件中的核心内容。
6.如权利要求1-5中任一项所述的方法,其中,
所述获取安卓应用的原始安卓安装包APK包括:接收用户通过加固保护客户端上传的安卓应用的原始APK;
该方法进一步包括:提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过所述接口下载加固APK。
7.如权利要求6所述的方法,其中,该方法进一步包括:
接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并以此确定所述指定加解密策略。
8.如权利要求6所述的方法,其中,该方法进一步包括:
接收用户通过加固保护客户端上传的身份标识,并利用该身份标识对所述加固APK进行签名。
9.如权利要求6所述的方法,其中,该方法进一步包括:
对加固APK进行自动安装测试。
10.一种安卓应用的加固保护服务器,其中,该服务器包括:
获取单元,适于获取安卓应用的原始安卓安装包APK;
反编译提取单元,适于反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;
加密单元,适于根据选择的指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;
添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;
其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。
11.如权利要求10所述的安卓应用的加固保护服务器,其中,
所述获取单元获取的所述原始APK中通过注解来标识受保护的方法代码;
所述反编译提取单元,适于反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。
12.如权利要求10所述的安卓应用的加固保护服务器,其中,
所述加密单元适于根据以下一种或多种策略对提取出的受护保的方法代码进行加密处理:
反调试策略;
反Dump策略;
反重打包策略;
字符串加解密策略。
13.如权利要求10所述的安卓应用的加固保护服务器,其中,
所述添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。
14.如权利要求10所述的安卓应用的加固保护服务器,其中,
所述反编译提取单元,适于反编译所述原始APK后提取其中的dex文件中的核心内容。
15.如权利要求10-14中任一项所述的安卓应用的加固保护服务器,其中,所述获取单元,适于接收用户通过加固保护客户端上传的安卓应用的原始APK;
所述服务器进一步包括:下载单元,适于提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过该接口下载加固APK。
16.如权利要求15所述的安卓应用的加固保护服务器,其中,
所述获取单元,进一步适于接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并发送给加密单元;
所述加密单元,适于根据所述加解密策略选择指令、加密密码和解密密码,确定所述指定加解密策略。
17.如权利要求15所述的安卓应用的加固保护服务器,其中,
所述获取单元,进一步适于接收用户通过加固保护客户端上传的身份标识;
所述服务器进一步包括:签名单元,适于利用所述身份标识对所述加固APK进行签名。
18.如权利要求15所述的安卓应用的加固保护服务器,其中,该服务器进一步包括:
测试单元,适于对加固APK进行自动安装测试。
19.一种安卓应用的加固保护系统,包括:加固保护客户端和如权利要求10-18中任一项所述的安卓应用的加固保护服务器。
一种安卓应用的加固保护方法、服务器和系统\n技术领域\n[0001] 本发明涉及数据安全领域,具体涉及一种安卓应用的加固保护方法、服务器和系统。\n背景技术\n[0002] 安卓系统的快速发展以及设备的高速增长,产生了大量的第三方应用程序,与其他操作系统相比,安卓系统的开源性为应用开发者提供了更多的功能接口,这些功能接口在提高了系统的可扩展性的同时也为恶意软件提供了便利,非法拷贝、逆向工程、反编译、调试、破解、二次打包、内存截取等手段不断威胁着安卓系统的安全,不仅危害了使用者,也给正常应用开发者造成严重的损害。\n[0003] 现有的安卓软件安装包的加固方案主要分为三种:第一种是对整个dex文件进行完整的加密;第二种是运行时对dex文件做字节码变形,防止直接Dump完整的dex,现有方式不能很好的自定义,该方案需要做字节码变形的函数;第三种是将前两种方案混合使用。但由于上述方案在APK运行的某一时间内内存中存在完整的dex映像,受保护的dex可以通过内存Dump的方式被完整的还原出来,导致现有方案始终无法完全解决安卓安装包面临的安全问题,人们也一直在寻求更有效的解决方案。\n发明内容\n[0004] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种安卓应用的加固保护方法、服务器和系统。。\n[0005] 依据本发明的一个方面,提供了一种安卓应用的加固保护方法,该方法包括:\n[0006] 获取安卓应用的原始安卓安装包APK;\n[0007] 反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;\n[0008] 根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;\n[0009] 将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;\n[0010] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0011] 可选地,所述原始APK中通过注解来标识受保护的方法代码;\n[0012] 所述反编译所述原始APK,从中提取出受保护的方法代码包括:反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0013] 可选地,所述指定加解密策略包括如下中的一种或多种:\n[0014] 反调试策略;\n[0015] 反Dump策略;\n[0016] 反重打包策略;\n[0017] 字符串加解密策略。\n[0018] 可选地,将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中包括:\n[0019] 将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。\n[0020] 可选地,所述受保护的方法代码为所述安卓应用的原始APK中的dex文件中的核心内容。\n[0021] 可选地,所述获取安卓应用的原始安卓安装包APK包括:接收用户通过加固保护客户端上传的安卓应用的原始APK;\n[0022] 该方法进一步包括:提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过所述接口下载加固APK。\n[0023] 可选地,该方法进一步包括:\n[0024] 接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并以此确定所述指定加解密策略。\n[0025] 可选地,该方法进一步包括:\n[0026] 接收用户通过加固保护客户端上传的身份标识,并利用该身份标识对所述加固APK进行签名。\n[0027] 可选地,该方法进一步包括:\n[0028] 对加固APK进行自动安装测试。\n[0029] 依据本发明的另一个方面,提供了一种安卓应用的加固保护服务器,该服务器包括:\n[0030] 获取单元,适于获取安卓应用的原始安卓安装包APK;\n[0031] 反编译提取单元,适于反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;\n[0032] 加密单元,适于根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;\n[0033] 添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;\n[0034] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0035] 可选地,所述获取单元获取的所述原始APK中通过注解来标识受保护的方法代码;\n[0036] 所述反编译提取单元,适于反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0037] 可选地,所述加密单元适于根据以下一种或多种策略对提取出的受护保的方法代码进行加密处理:\n[0038] 反调试策略;\n[0039] 反Dump策略;\n[0040] 反重打包策略;\n[0041] 字符串加解密策略。\n[0042] 可选地,所述添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。\n[0043] 可选地,所述反编译提取单元,适于反编译所述原始APK后提取其中的dex文件中的核心内容。\n[0044] 可选地,所述获取单元,适于接收用户通过加固保护客户端上传的安卓应用的原始APK。\n[0045] 所述服务器进一步包括:下载单元,适于提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过该接口下载加固APK。\n[0046] 可选地,所述获取单元,进一步适于接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并发送给加密单元;\n[0047] 所述加密单元,适于根据所述加解密策略选择指令、加密密码和解密密码,确定所述指定加解密策略。\n[0048] 可选地,所述获取单元,进一步适于接收用户通过加固保护客户端上传的身份标识;\n[0049] 所述服务器进一步包括:签名单元,适于利用所述身份标识对所述加固APK进行签名。\n[0050] 可选地,该服务器进一步包括:\n[0051] 测试单元,适于对加固APK进行自动安装测试。\n[0052] 依据本发明的有一个方面,提供了一种安卓应用的加固保护系统,包括:加固保护客户端和如上任一项所述的加固保护服务器。\n[0053] 由上述可知,本发明提供的技术方案将加解密策略、加固保护程序以及受保护的方法代码进行加密后得到的加固配置文件添加到反编译后的APK中,生成安卓应用的加固APK,由于加固保护程序动态地在受保护方法被调用时对其进行解码,而在受保护方法调用结束后对其进行加密,实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。\n[0054] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。\n附图说明\n[0055] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:\n[0056] 图1示出了根据本发明一个实施例的一种安卓应用的加固保护方法的流程图;\n[0057] 图2示出了根据本发明另一个实施例的一种安卓应用的加固保护方法的流程图;\n[0058] 图3示出了根据本发明一个实施例的一种安卓应用的加固保护服务器的示意图;\n[0059] 图4示出了根据本发明另一个实施例的一种安卓应用的加固保护服务器的示意图;\n[0060] 图5示出了根据本发明又一个实施例的一种安卓应用的加固保护服务器的示意图;\n[0061] 图6示出了根据本发明再一个实施例的一种安卓应用的加固保护服务器的示意图;\n[0062] 图7A示出了根据本发明一个实施例的安卓安装包的开发过程的流程图;\n[0063] 图7B示出了根据本发明一个实施例的安卓安装包的加固保护过程的流程图;\n[0064] 图7C示出了根据本发明一个实施例的安卓安装包的运行过程的流程图。\n具体实施方式\n[0065] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。\n[0066] 图1示出了根据本发明一个实施例的一种安卓应用的加固保护方法的流程图。如图1所示,该方法包括:\n[0067] 步骤S110,获取安卓应用的原始安卓安装包APK。\n[0068] 在安卓系统上,一个可以安装、运行的应用,需要打包成安卓安装包,即APK(Android application package file)文件格式,本步骤中的原始安卓安装包APK是由开发者开发生成的。\n[0069] 步骤S120,反编译原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充。\n[0070] 本步骤中的nop填充是指:将nop指令填充到提取位置处。相当于在反编译后的原始APK中,先将受保护方法代码抠出,然后用nop指令进行填充。\n[0071] 步骤S130,根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件。\n[0072] 本步骤中的加密处理可以是对称加或非对称加密。这里的加解密策略包括加密策略和相应的解密策略。\n[0073] 步骤S140,将指定加解密策略、加固配置文件和加固保护程序添加到反编译后的APK中,编译生成安卓应用的加固APK。\n[0074] 本步骤中的加固保护程序用于动态地对加固配置文件进行加解密,加固保护程序在安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;受保护的方法代码被调用运行;当受保护的方法的调用结束后,根据加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0075] 图1所示的方法将受保护的方法代码进行加密后得到的加固配置文件、加解密策略以及加固保护程序导入到APK中,生成安卓应用的加固APK;由于加固保护程序动态地在受保护的方法被调用时对其进行解码,并且在受保护的方法调用结束后对其进行加密,实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。\n[0076] 一般情况下,由于安卓安装包APK的开发者以及为APK提供保护服务的保护者是不同方,因此开发者在开发原始APK的过程中,可以通过注解来标识出开发者希望得到保护的方法,保护者进而根据注解来从原始APK的源代码中提取受保护的方法代码,此处的“注解”是指JAVA从J2SE5开始提供名为annotation(注解)的功能,用于将任何信息或元数据与程序元素(类、方法、成员变量等)进行关联,其本身不会对源代码或class等的执行产生任何影响。\n[0077] 在本发明的一个实施例中,图1所示的方法中,步骤S110获取到的原始APK中通过注解来标识受保护的方法代码;相对应地,步骤S120中的反编译原始APK,从中提取出受保护的方法代码可以是:反编译原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0078] 图7A示出了根据本发明一个实施例的安卓安装包的开发过程的流程图,在本实施例中,对于开发者,安卓安装包的开发过程如图7A所示,步骤S710到步骤S750描述了以下过程:开始开发安卓安装包APK,判断一个方法是否为受保护的方法,是则对受保护的方法代码添加注解,否则不添加注解,生成原始安卓安装包APK。图7B示出了根据本发明一个实施例的安卓安装包的加固保护过程的流程图,对于为APK提供保护服务的保护者,安卓安装包的加固保护过程如7B所示,步骤S810到步骤S870描述了以下过程:获取到原始安卓安装包APK后,反编译该原始APK,选择指定的加解密策略,然后根据开发者提供的注解来对受保护的方法代码进行加密,生成加固配置文件,将加固配置文件、加解密策略以及加固保护程序导入APK中,生成加固APK。图7B的步骤S880对加固APK进一步进行签名,关于该步骤S880将会在下文中详细阐述。\n[0079] 例如,开发者在开发一款即时通讯应用时,希望对其传输图片功能进行保护,因此,开发者在开发过程中对传输图片功能的方法代码添加对应的注解,标识该方法为受保护的方法,将受保护的方法、未受保护的方法和相关配置信息等文件打包生成原始APK。保护者在加固保护的过程中获取原始APK,并反编译APK后,根据上述注解把传输图片功能的方法代码提取出来,选择指定加解密策略进行加密处理,生成上文中所述的加固配置文件;\n再将加固配置文件、加解密策略以及加固保护程序放入反编译后的APK中,编译得到该即时通讯应用的加固APK。\n[0080] 在本发明的一个实施例中,图1所示的加固保护过程中进行加解密处理用到的指定加解密策略,可以包括如下中的一种或多种:反调试策略;反Dump策略;反重打包策略;字符串加解密策略。其中,反调试策略可以防止动态调试;反Dump策略可以防止动态Dump完整dex;反重打包可以防止APK被二次打包;字符串加解密策略可以实现对dex中字符串的加密,防止被静态分析直接看到明文程序。\n[0081] 在本发明的一个实施例中,图1所示方法的步骤S140所述的将指定加解密策略、加固配置文件和加固保护程序添加到反编译后的APK中包括:将指定加解密策略、加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。\n[0082] 反编译后的APK的内部文件结构如表1所示:\n[0083] 表1\n[0084]\n文件名 说明\nMETA-INF\ 证书文件\nres\ 资源文件\nassets\ 额外资源文件\nresources.arsc 二进制资源文件\nclasses.dex .源码资源文件\nAndroidManifest.xml 全局配置文件\nlib\ 附加组件\n[0085] 其中,META-INF目录下一般有MANIFEST.MF和以.RSA、.SF结尾的文件,记录了其它目录文件的证书签名,安卓系统在安装APK时会逐个检查APK内部各文件是否与本目录记录的证书签名一致,如果不一致,则认为文件已被篡改,拒绝该APK的安装和运行。\n[0086] res目录存放的是图片资源和界面布局等文件。\n[0087] assets目录下存放的是额外资源和配置文件,如TXT或HTML说明文档、字体文件和图片资源等。\n[0088] resources.arsc文件是经过编译后的二进制资源文件。\n[0089] class.dex文件是Java源码编译后生成的Java字节码文件,.dex是Dalvik Executable(Dalvik虚拟机可执行文件)的缩写。\n[0090] AndroidManifest.xml文件是安卓安装包的全局描述文件,该文件记录了应用的包名、版本号、权限、引用的库文件、模块入口、类等信息。\n[0091] lib目录是JNI(Java Native Interface)库文件,一般在armeabi子文件夹中存放一些SO文件。SO文件是linux下的库文件,是ELF格式的动态链接库文件,该类文件在程序运行需要的时候才动态加载到程序中,后缀为.so。本实施例中,即是将指定加解密策略、加固配置文件和加固保护程序写入APK的该lib目录下的SO文件中。当运行加固APK调用受保护的方法时,以SO文件的形式进行动态加载。\n[0092] 在本发明的一个实施例中,图1所示的方法中的受保护的方法代码为安卓应用的原始APK中的dex文件中的核心内容。\n[0093] 图2示出了根据本发明另一个实施例的一种安卓应用的加固保护方法的流程图。\n如图2所示,该方法包括:\n[0094] 步骤S210,接收用户通过加固保护客户端上传的安卓应用的原始APK。本步骤中,接收到用户(即开发者)上传的原始APK,该原始APK的开发过程如图7A所示,在此不再赘述。\n[0095] 步骤S220,反编译原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充。\n[0096] 步骤S230,根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件。\n[0097] 步骤S240,将指定加解密策略、加固配置文件和加固保护程序添加到反编译后的APK中,编译生成安卓应用的加固APK。\n[0098] 上述步骤S220、步骤S230、步骤S240和图1所示方法的步骤S120、步骤S130、步骤S140对应相同,描述了对原始APK进行加固保护的过程,图7B也从保护者的角度对该过程进行了展示,在此不再赘述。\n[0099] 步骤S250,提供下载加固APK的接口,使得用户能够利用加固保护客户端通过接口下载加固APK。\n[0100] 由上述可知,图2所示的方案为开发者提供了一个用于对安卓应用进行加固保护的平台,接收到开发者上传的未保护的原始APK,经加固保护处理后,给开发者提供下载加固APK的接口。\n[0101] 在本发明的一个实施例中,图1和图2所示方法中的指定加解密策略,可以通过用户(即开发者)提供的加解密相关信息来确定,即用户自主制定加解密策略和加解密密码。\n该方法进一步包括:接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并以此确定指定加解密策略。其中,用户提供的加解密信息也可以标注在受保护的方法的注解中。该方案为开发者提供了极大的便利,使得开发者在应用的开发阶段实现保护函数的方便可配置性。\n[0102] 每个发布的APK都有一个唯一ID来标识应用的合法性,这个ID就是APK的签名,使用相同签名的APK可以实现覆盖安装,因此,为了防止黑客对APK的非法篡改和盗用,要对加固APK进行签名,如图7B所示的步骤S880的对加固APK进行签名的过程。在本发明的一个实施例中,图2所示的方法进一步包括:接收用户通过加固保护客户端上传的身份标识,并利用该身份标识对所述加固APK进行签名。\n[0103] 为了保证APK加固的有效性,避免由于失误而造成的APK不可安装、APK加密失败等现象,可以在给用户提供下载加固APK之前,进一步对其进行测试。在本发明的一个实施例中,图2所示的方法进一步包括:对加固APK进行自动安装测试。\n[0104] 图3示出了根据本发明一个实施例的一种安卓应用的加固保护服务器的示意图。\n如图3所示,该安卓应用的加固保护服务器300包括:\n[0105] 获取单元310,适于获取安卓应用的原始安卓安装包APK。\n[0106] 在安卓系统上,一个可以安装、运行的应用,需要打包成安卓安装包,即APK(Android application package file)文件格式,本单元获取的原始安卓安装包APK是由开发者开发生成的。\n[0107] 反编译提取单元320,适于反编译原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充。\n[0108] 此处的nop填充是指:将nop指令填充到提取位置处,使填充后的代码与源代码对齐。\n[0109] 加密单元330,适于根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件。\n[0110] 添加编译单元340,适于将指定加解密策略、加固配置文件和加固保护程序添加到反编译后的APK中,编译生成安卓应用的加固APK。\n[0111] 其中,加固保护程序在安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0112] 可见,图3所示的加固保护服务器300将加解密策略、加固保护程序以及受保护的方法代码进行加密后得到的加固配置文件导入到APK中,生成安卓应用的加固APK;由于加固保护程序动态地在受保护的方法被调用时对其进行解码,并在受保护的方法调用结束后对其进行加密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。\n[0113] 依据上文所述的开发者通过注解使得保护者根据该注解提取出开发者希望受保护的方法代码,并对其进行加固保护的例子,在本发明的一个实施例中,图3所示服务器的获取单元310获取到的原始APK中通过注解来标识了受保护的方法代码;反编译提取单元\n320,适于反编译原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0114] 在本发明的一个实施例中,图3所示服务器的加密单元330,适于根据以下一种或多种策略对提取出的受保护的方法代码进行加密处理:反调试策略;反Dump策略;反重打包策略;字符串加解密策略。其中,反调试策略可以防止动态调试;反Dump策略可以防止动态Dump完整dex;反重打包可以防止APK被二次打包;字符串加解密策略可以实现对dex中字符串的加密,防止被静态分析直接看到明文程序。\n[0115] 在本发明的一个实施例中,图3所示服务器的添加编译单元340,适于将指定加解密策略、加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。本实施例中,即是将指定加解密策略、加固配置文件和加固保护程序写入表1所示的APK的lib目录下的SO文件中。\n[0116] 在本发明的一个实施例中,图3所示服务器的反编译提取单元320,适于反编译原始APK后提取其中的dex文件中的核心内容。\n[0117] 图4示出了根据本发明另一个实施例的一种安卓应用的加固保护服务器的示意图。如图4所示,该安卓应用的加固保护服务器400包括:获取单元410、反编译提取单元420、加密单元430、添加编译单元440和下载单元450。\n[0118] 其中,反编译提取单元420、加密单元430、添加编译单元440分别与图3所示服务器的反编译提取单元320、加密单元330、添加编译单元340对应相同,执行了对原始APK进行加固保护的过程,并且图7B也从保护者的角度对该过程进行了展示,在此不再赘述。\n[0119] 获取单元410,适于接收用户通过加固保护客户端上传的安卓应用的原始APK。\n[0120] 本单元适于接收用户(即开发者)上传的原始APK,该原始APK的开发过程如图7A所示,在此不再赘述。\n[0121] 下载单元450,适于提供下载加固APK的接口,使得用户能够利用加固保护客户端通过该接口下载加固APK。\n[0122] 由上述可知,图4所示的服务器为开发者提供了一个用于对安卓应用进行加固保护的平台,获取单元410接收到开发者上传的未保护的原始APK,经反编译提取单元420、加密单元430和添加编译单元440的加固保护处理后,再由下载单元450给开发者提供下载加固APK的接口。\n[0123] 在本发明的一个实施例中,图3和图4所示服务器的加密单元中指定加解密策略,可以通过用户(即开发者)提供的加解密相关信息来确定,即用户自主制定加解密策略和加解密密码。图4所示服务器的获取单元410,进一步适于接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并发送给加密单元430;加密单元430,适于根据加解密策略选择指令、加密密码和解密密码,确定指定加解密策略。其中,用户提供的加解密信息也可以标注在受保护的方法的注解中,该方案为开发者提供了极大的便利,使得开发者在应用的开发阶段实现保护函数的方便可配置性。\n[0124] 图5示出了根据本发明又一个实施例的一种安卓应用的加固保护服务器的示意图。如图5所示,该安卓应用的加固保护服务器500包括:获取单元510、反编译提取单元520、加密单元530、添加编译单元540、下载单元550和签名单元560。\n[0125] 在本实施例中,加固保护服务器500为了防止黑客对APK的非法篡改和盗用,要对加固APK进行签名,因此,与图3、4所示的服务器相比,本服务器增添了签名单元560。其中,获取单元510、反编译提取单元520、加密单元530、添加编译单元540、下载单元550分别与图\n4所示服务器的获取单元410、反编译提取单元420、加密单元430、添加编译单元440、下载单元450对应相同,在此不再赘述。\n[0126] 获取单元510,进一步适于接收用户通过加固保护客户端上传的身份标识。\n[0127] 签名单元560,适于利用所述身份标识对加固APK进行签名。\n[0128] 图6示出了根据本发明再一个实施例的一种安卓应用的加固保护服务器的示意图。如图6所示,该安卓应用的加固保护服务器600包括:获取单元610、反编译提取单元620、加密单元630、添加编译单元640、下载单元650、签名单元660和测试单元670。\n[0129] 在本实施例中,加固保护服务器600为了保证APK加固的有效性,避免由于失误而造成的APK不可安装、APK加密失败等现象,可以在给用户提供下载加固APK之前,进一步对其进行测试,因此,与上文所述的服务器相比,本服务器增添了测试单元670。其中,获取单元610、反编译提取单元620、加密单元630、添加编译单元640、下载单元650、签名单元660分别与图5所示服务器的获取单元510、反编译提取单元520、加密单元530、添加编译单元540、下载单元550、签名单元560对应相同,在此不再赘述。\n[0130] 测试单元670,适于对加固APK进行自动安装测试。\n[0131] 基于上述各实施例,开发者将加固保护完成的加固APK发布到安卓应用市场后,用户将下载并运行该加固APK。图7C示出了根据本发明一个实施例的安卓安装包的运行过程的流程图,从用户的角度来看,安卓安装包APK的运行过程如图7C所示,步骤S902到步骤S920描述了以下过程:运行该APK,首先通过读取密钥获得运行权限,接着读取APK的配置文件,然后调用APK中的方法,判断当前调用的方法是否为受保护的方法,如果当前调用的方法是受保护的方法,则对该受保护的方法代码进行动态解密,调用解密后的受保护的方法,调用结束后,重新对该受保护的方法代码进行动态解密,继续运行该APK;如果当前调用的方法不是受保护的方法,则直接正常调动,调用结束后继续运行该APK;以此机制运行APK,直至完成整个APK的运行过程。\n[0132] 本发明的一个实施例中还公开了一种安卓应用的加固保护系统,其包括加固保护客户端和如上述任一实施例中所述的加固保护服务器。\n[0133] 综上所述,本发明提供了一种安卓应用的加固保护方案,将加解密策略、加固保护程序以及受保护的方法代码进行加密后得到的加固配置文件添加到反编译后的APK中,生成安卓应用的加固APK,由于加固保护程序动态地在受保护方法被调用时对其进行解码,而在受保护方法调用结束后对其进行加密,实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。\n[0134] 需要说明的是:\n[0135] 在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。\n各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。\n[0136] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。\n[0137] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。\n[0138] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。\n[0139] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。\n[0140] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种安卓应用的加固保护服务器和系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。\n[0141] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。\n[0142] 本发明公开了一种A1、一种安卓应用的加固保护方法,其中,该方法包括:\n[0143] 获取安卓应用的原始安卓安装包APK;\n[0144] 反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;\n[0145] 根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;\n[0146] 将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;\n[0147] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0148] A2、如A1所述的方法,其中,\n[0149] 所述原始APK中通过注解来标识受保护的方法代码;\n[0150] 所述反编译所述原始APK,从中提取出受保护的方法代码包括:反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0151] A3、如A1所述的方法,其中,所述指定加解密策略包括如下中的一种或多种:\n[0152] 反调试策略;\n[0153] 反Dump策略;\n[0154] 反重打包策略;\n[0155] 字符串加解密策略。\n[0156] A4、如A1所述的方法,其中,将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中包括:\n[0157] 将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。\n[0158] A5、如A1所述的方法,其中,\n[0159] 所述受保护的方法代码为所述安卓应用的原始APK中的dex文件中的核心内容。\n[0160] A6、如A1-A5中任一项所述的方法,其中,\n[0161] 所述获取安卓应用的原始安卓安装包APK包括:接收用户通过加固保护客户端上传的安卓应用的原始APK;\n[0162] 该方法进一步包括:提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过所述接口下载加固APK。\n[0163] A7、如A6所述的方法,其中,该方法进一步包括:\n[0164] 接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并以此确定所述指定加解密策略。\n[0165] A8、如A 6所述的方法,其中,该方法进一步包括:\n[0166] 接收用户通过加固保护客户端上传的身份标识,并利用该身份标识对所述加固APK进行签名。\n[0167] A 9、如A 6所述的方法,其中,该方法进一步包括:\n[0168] 对加固APK进行自动安装测试。\n[0169] 本发明公开还一种B10、一种安卓应用的加固保护服务器,其中,该服务器包括:\n[0170] 获取单元,适于获取安卓应用的原始安卓安装包APK;\n[0171] 反编译提取单元,适于反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;\n[0172] 加密单元,适于根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;\n[0173] 添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK;\n[0174] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。\n[0175] B11、如B10所述的服务器,其中,\n[0176] 所述获取单元获取的所述原始APK中通过注解来标识受保护的方法代码;\n[0177] 所述反编译提取单元,适于反编译所述原始APK,根据其中的方法注解从中提取出受保护的方法代码。\n[0178] B12、如B10所述的方法,其中,\n[0179] 所述加密单元适于根据以下一种或多种策略对提取出的受护保的方法代码进行加密处理:\n[0180] 反调试策略;\n[0181] 反Dump策略;\n[0182] 反重打包策略;\n[0183] 字符串加解密策略。\n[0184] B13、如B10所述的服务器,其中,\n[0185] 所述添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK的lib目录下的SO文件中。\n[0186] B14、如B10所述的服务器,其中,\n[0187] 所述反编译提取单元,适于反编译所述原始APK后提取其中的dex文件中的核心内容。\n[0188] B15、如B10-B14中任一项所述的服务器,其中,\n[0189] 所述获取单元,适于接收用户通过加固保护客户端上传的安卓应用的原始APK。\n[0190] 所述服务器进一步包括:下载单元,适于提供下载加固APK的接口,使得用户能够利用所述加固保护客户端通过该接口下载加固APK。\n[0191] B16、如B15所述的服务器,其中,\n[0192] 所述获取单元,进一步适于接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密码,并发送给加密单元;\n[0193] 所述加密单元,适于根据所述加解密策略选择指令、加密密码和解密密码,确定所述指定加解密策略。\n[0194] B17、如B15所述的服务器,其中,\n[0195] 所述获取单元,进一步适于接收用户通过加固保护客户端上传的身份标识;\n[0196] 所述服务器进一步包括:签名单元,适于利用所述身份标识对所述加固APK进行签名。\n[0197] B18、如B15所述的服务器,其中,该服务器进一步包括:\n[0198] 测试单元,适于对加固APK进行自动安装测试。\n[0199] 本发明还公开了C19、一种安卓应用的加固保护系统,包括:加固保护客户端和如权利要求B10-B18中任一项所述的加固保护服务器。
法律信息
- 2022-08-05
专利权的转移
登记生效日: 2022.07.25
专利权人由北京奇虎科技有限公司变更为北京奇虎科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
专利权人由奇智软件(北京)有限公司 变更为空
- 2017-09-01
- 2015-04-22
实质审查的生效
IPC(主分类): G06F 21/55
专利申请号: 201410734372.7
申请日: 2014.12.04
- 2015-03-25
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2014-09-03
|
2014-06-17
| | |
2
| |
2013-11-27
|
2013-08-27
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |