一种安卓应用的加固保护方法、服务器和系统的制作方法

文档序号:6637399阅读:246来源:国知局
一种安卓应用的加固保护方法、服务器和系统的制作方法
【专利摘要】本发明公开了一种安卓应用的加固保护方法、服务器和系统,该方法包括:获取安卓应用的原始安卓安装包APK;反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置文件;将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的APK中,编译生成所述安卓应用的加固APK。本发明提供的技术方案实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打包再次分发的可能。
【专利说明】一种安卓应用的加固保护方法、服务器和系统

【技术领域】
[0001] 本发明涉及数据安全领域,具体涉及一种安卓应用的加固保护方法、服务器和系 统。

【背景技术】
[0002] 安卓系统的快速发展以及设备的高速增长,产生了大量的第三方应用程序,与其 他操作系统相比,安卓系统的开源性为应用开发者提供了更多的功能接口,这些功能接口 在提高了系统的可扩展性的同时也为恶意软件提供了便利,非法拷贝、逆向工程、反编译、 调试、破解、二次打包、内存截取等手段不断威胁着安卓系统的安全,不仅危害了使用者,也 给正常应用开发者造成严重的损害。
[0003] 现有的安卓软件安装包的加固方案主要分为三种:第一种是对整个dex文件进行 完整的加密;第二种是运行时对dex文件做字节码变形,防止直接Dump完整的dex,现有方 式不能很好的自定义,该方案需要做字节码变形的函数;第三种是将前两种方案混合使用。 但由于上述方案在APK运行的某一时间内内存中存在完整的dex映像,受保护的dex可以 通过内存Dump的方式被完整的还原出来,导致现有方案始终无法完全解决安卓安装包面 临的安全问题,人们也一直在寻求更有效的解决方案。


【发明内容】

[0004] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的一种安卓应用的加固保护方法、服务器和系统。。
[0005] 依据本发明的一个方面,提供了一种安卓应用的加固保护方法,该方法包括:
[0006] 获取安卓应用的原始安卓安装包APK ;
[0007] 反编译所述原始APK,从中提取出受保护的方法代码,并将提取位置用nop填充;
[0008] 根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生成加固配置 文件;
[0009] 将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编译后的 APK中,编译生成所述安卓应用的加固APK ;
[0010] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操 作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加 解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法 的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。
[0011] 可选地,所述原始APK中通过注解来标识受保护的方法代码;
[0012] 所述反编译所述原始APK,从中提取出受保护的方法代码包括:反编译所述原始 APK,根据其中的方法注解从中提取出受保护的方法代码。
[0013] 可选地,所述指定加解密策略包括如下中的一种或多种:
[0014] 反调试策略;
[0015] 反 Dump 策略;
[0016] 反重打包策略;
[0017] 字符串加解密策略。
[0018] 可选地,将所述指定加解密策略、所述加固配置文件和加固保护程序添加到反编 译后的APK中包括:
[0019] 将所述指定加解密策略、所述加固配置文件和加固保护程序写入反编译后的APK 的Iib目录下的SO文件中。
[0020] 可选地,所述受保护的方法代码为所述安卓应用的原始APK中的dex文件中的核 心内容。
[0021] 可选地,所述获取安卓应用的原始安卓安装包APK包括:接收用户通过加固保护 客户端上传的安卓应用的原始APK ;
[0022] 该方法进一步包括:提供下载加固APK的接口,使得用户能够利用所述加固保护 客户端通过所述接口下载加固APK。
[0023] 可选地,该方法进一步包括:
[0024] 接收用户通过加固保护客户端上传的加解密策略选择指令、加密密码和解密密 码,并以此确定所述指定加解密策略。
[0025] 可选地,该方法进一步包括:
[0026] 接收用户通过加固保护客户端上传的身份标识,并利用该身份标识对所述加固 APK进行签名。
[0027] 可选地,该方法进一步包括:
[0028] 对加固APK进行自动安装测试。
[0029] 依据本发明的另一个方面,提供了一种安卓应用的加固保护服务器,该服务器包 括:
[0030] 获取单元,适于获取安卓应用的原始安卓安装包APK ;
[0031] 反编译提取单元,适于反编译所述原始APK,从中提取出受保护的方法代码,并将 提取位置用nop填充;
[0032] 加密单元,适于根据指定加解密策略对提取出的受保护的方法代码进行加密处 理,生成加固配置文件;
[0033] 添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序 添加到反编译后的APK中,编译生成所述安卓应用的加固APK ;
[0034] 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操 作:根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加 解密策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法 的调用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。
[0035] 可选地,所述获取单元获取的所述原始APK中通过注解来标识受保护的方法代 码;
[0036] 所述反编译提取单元,适于反编译所述原始APK,根据其中的方法注解从中提取出 受保护的方法代码。
[0037] 可选地,所述加密单元适于根据以下一种或多种策略对提取出的受护保的方法代 码进行加密处理:
[0038] 反调试策略;
[0039] 反 Dump 策略;
[0040] 反重打包策略;
[0041] 字符串加解密策略。
[0042] 可选地,所述添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加 固保护程序写入反编译后的APK的Iib目录下的SO文件中。
[0043] 可选地,所述反编译提取单元,适于反编译所述原始APK后提取其中的dex文件中 的核心内容。
[0044] 可选地,所述获取单元,适于接收用户通过加固保护客户端上传的安卓应用的原 始 APK。
[0045] 所述服务器进一步包括:下载单元,适于提供下载加固APK的接口,使得用户能够 利用所述加固保护客户端通过该接口下载加固APK。
[0046] 可选地,所述获取单元,进一步适于接收用户通过加固保护客户端上传的加解密 策略选择指令、加密密码和解密密码,并发送给加密单元;
[0047] 所述加密单元,适于根据所述加解密策略选择指令、加密密码和解密密码,确定所 述指定加解密策略。
[0048] 可选地,所述获取单元,进一步适于接收用户通过加固保护客户端上传的身份标 识;
[0049] 所述服务器进一步包括:签名单元,适于利用所述身份标识对所述加固APK进行 签名。
[0050] 可选地,该服务器进一步包括:
[0051] 测试单元,适于对加固APK进行自动安装测试。
[0052] 依据本发明的有一个方面,提供了一种安卓应用的加固保护系统,包括:加固保护 客户端和如上任一项所述的加固保护服务器。
[0053] 由上述可知,本发明提供的技术方案将加解密策略、加固保护程序以及受保护的 方法代码进行加密后得到的加固配置文件添加到反编译后的APK中,生成安卓应用的加固 APK,由于加固保护程序动态地在受保护方法被调用时对其进行解码,而在受保护方法调用 结束后对其进行加密,实现了对受保护方法的动态加解密,使内存中任意时刻都不存在完 整的dex映像,从而防止通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应 用被逆向分析,进而重打包再次分发的可能。
[0054] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的【具体实施方式】。

【专利附图】

【附图说明】
[0055] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0056] 图1示出了根据本发明一个实施例的一种安卓应用的加固保护方法的流程图;
[0057] 图2示出了根据本发明另一个实施例的一种安卓应用的加固保护方法的流程图;
[0058] 图3示出了根据本发明一个实施例的一种安卓应用的加固保护服务器的示意图;
[0059] 图4示出了根据本发明另一个实施例的一种安卓应用的加固保护服务器的示意 图;
[0060] 图5示出了根据本发明又一个实施例的一种安卓应用的加固保护服务器的示意 图;
[0061] 图6示出了根据本发明再一个实施例的一种安卓应用的加固保护服务器的示意 图;
[0062] 图7A示出了根据本发明一个实施例的安卓安装包的开发过程的流程图;
[0063] 图7B示出了根据本发明一个实施例的安卓安装包的加固保护过程的流程图;
[0064] 图7C示出了根据本发明一个实施例的安卓安装包的运行过程的流程图。

【具体实施方式】
[0065] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
[0066] 图1示出了根据本发明一个实施例的一种安卓应用的加固保护方法的流程图。如 图1所示,该方法包括:
[0067] 步骤Sl 10,获取安卓应用的原始安卓安装包APK。
[0068] 在安卓系统上,一个可以安装、运行的应用,需要打包成安卓安装包,即 APK(Android application package file)文件格式,本步骤中的原始安卓安装包APK是由 开发者开发生成的。
[0069] 步骤S120,反编译原始APK,从中提取出受保护的方法代码,并将提取位置用nop 填充。
[0070] 本步骤中的nop填充是指:将nop指令填充到提取位置处。相当于在反编译后的 原始APK中,先将受保护方法代码抠出,然后用nop指令进行填充。
[0071] 步骤S130,根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生 成加固配置文件。
[0072] 本步骤中的加密处理可以是对称加或非对称加密。这里的加解密策略包括加密策 略和相应的解密策略。
[0073] 步骤S140,将指定加解密策略、加固配置文件和加固保护程序添加到反编译后的 APK中,编译生成安卓应用的加固APK。
[0074] 本步骤中的加固保护程序用于动态地对加固配置文件进行加解密,加固保护程序 在安卓应用的加固APK被安装并运行时执行如下操作:根据受保护的方法的调用情况,动 态申请空间,当受保护的方法被调用时,根据加解密策略对加固配置文件中的相应方法进 行解密获得受保护的方法代码;受保护的方法代码被调用运行;当受保护的方法的调用结 束后,根据加解密策略对解密获得的受保护的方法代码重新进行加密。
[0075] 图1所示的方法将受保护的方法代码进行加密后得到的加固配置文件、加解密策 略以及加固保护程序导入到APK中,生成安卓应用的加固APK ;由于加固保护程序动态地在 受保护的方法被调用时对其进行解码,并且在受保护的方法调用结束后对其进行加密,实 现了对受保护方法的动态加解密,使内存中任意时刻都不存在完整的dex映像,从而防止 通过内存Dump的方式获取完整的dex文件,从而大大降低安卓应用被逆向分析,进而重打 包再次分发的可能。
[0076] -般情况下,由于安卓安装包APK的开发者以及为APK提供保护服务的保护者是 不同方,因此开发者在开发原始APK的过程中,可以通过注解来标识出开发者希望得到保 护的方法,保护者进而根据注解来从原始APK的源代码中提取受保护的方法代码,此处的 "注解"是指JAVA从J2SE5开始提供名为annotation (注解)的功能,用于将任何信息或元 数据与程序元素(类、方法、成员变量等)进行关联,其本身不会对源代码或class等的执 行产生任何影响。
[0077] 在本发明的一个实施例中,图1所示的方法中,步骤SllO获取到的原始APK中通 过注解来标识受保护的方法代码;相对应地,步骤S120中的反编译原始APK,从中提取出受 保护的方法代码可以是:反编译原始APK,根据其中的方法注解从中提取出受保护的方法 代码。
[0078] 图7A示出了根据本发明一个实施例的安卓安装包的开发过程的流程图,在本实 施例中,对于开发者,安卓安装包的开发过程如图7A所示,步骤S710到步骤S750描述了以 下过程:开始开发安卓安装包APK,判断一个方法是否为受保护的方法,是则对受保护的方 法代码添加注解,否则不添加注解,生成原始安卓安装包APK。图7B示出了根据本发明一个 实施例的安卓安装包的加固保护过程的流程图,对于为APK提供保护服务的保护者,安卓 安装包的加固保护过程如7B所示,步骤S810到步骤S870描述了以下过程:获取到原始安 卓安装包APK后,反编译该原始APK,选择指定的加解密策略,然后根据开发者提供的注解 来对受保护的方法代码进行加密,生成加固配置文件,将加固配置文件、加解密策略以及加 固保护程序导入APK中,生成加固APK。图7B的步骤S880对加固APK进一步进行签名,关 于该步骤S880将会在下文中详细阐述。
[0079] 例如,开发者在开发一款即时通讯应用时,希望对其传输图片功能进行保护,因 此,开发者在开发过程中对传输图片功能的方法代码添加对应的注解,标识该方法为受保 护的方法,将受保护的方法、未受保护的方法和相关配置信息等文件打包生成原始APK。保 护者在加固保护的过程中获取原始APK,并反编译APK后,根据上述注解把传输图片功能的 方法代码提取出来,选择指定加解密策略进行加密处理,生成上文中所述的加固配置文件; 再将加固配置文件、加解密策略以及加固保护程序放入反编译后的APK中,编译得到该即 时通讯应用的加固APK。
[0080] 在本发明的一个实施例中,图1所示的加固保护过程中进行加解密处理用到的指 定加解密策略,可以包括如下中的一种或多种:反调试策略;反Dump策略;反重打包策略; 字符串加解密策略。其中,反调试策略可以防止动态调试;反Dump策略可以防止动态Dump 完整dex ;反重打包可以防止APK被二次打包;字符串加解密策略可以实现对dex中字符串 的加密,防止被静态分析直接看到明文程序。
[0081] 在本发明的一个实施例中,图1所示方法的步骤S140所述的将指定加解密策略、 加固配置文件和加固保护程序添加到反编译后的APK中包括:将指定加解密策略、加固配 置文件和加固保护程序写入反编译后的APK的Iib目录下的SO文件中。
[0082] 反编译后的APK的内部文件结构如表1所示:
[0083] 表 1
[0084]

【权利要求】
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. -种安卓应用的加固保护服务器,其中,该服务器包括; 获取单元,适于获取安卓应用的原始安卓安装包APK ; 反编译提取单元,适于反编译所述原始APK,从中提取出受保护的方法代码,并将提取 位置用nop填充; 加密单元,适于根据指定加解密策略对提取出的受保护的方法代码进行加密处理,生 成加固配置文件; 添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序添加 到反编译后的APK中,编译生成所述安卓应用的加固APK ; 其中,所述加固保护程序在所述安卓应用的加固APK被安装并运行时执行如下操作: 根据受保护的方法的调用情况,动态申请空间,当受保护的方法被调用时,根据所述加解密 策略对加固配置文件中的相应方法进行解密获得受保护的方法代码;当受保护的方法的调 用结束后,根据所述加解密策略对解密获得的受保护的方法代码重新进行加密。
7. 如权利要求6所述的服务器,其中, 所述获取单元获取的所述原始APK中通过注解来标识受保护的方法代码; 所述反编译提取单元,适于反编译所述原始APK,根据其中的方法注解从中提取出受保 护的方法代码。
8. 如权利要求6所述的方法,其中, 所述加密单元适于根据W下一种或多种策略对提取出的受护保的方法代码进行加密 处理: 反调试策略; 反Dump策略; 反重打包策略; 字符串加解密策略。
9. 如权利要求6所述的服务器,其中, 所述添加编译单元,适于将所述指定加解密策略、所述加固配置文件和加固保护程序 写入反编译后的APK的lib目录下的SO文件中。
10. -种安卓应用的加固保护系统,包括:加固保护客户端和如权利要求6-9中任一项 所述的加固保护服务器。
【文档编号】G06F21/55GK104462959SQ201410734372
【公开日】2015年3月25日 申请日期:2014年12月4日 优先权日:2014年12月4日
【发明者】李伟, 董清 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1