一种JAR包加固方法及系统.pdf

上传人:小** 文档编号:1301367 上传时间:2018-04-14 格式:PDF 页数:14 大小:700.09KB
返回 下载 相关 举报
摘要
申请专利号:

CN201611221340.2

申请日:

2016.12.26

公开号:

CN106845169A

公开日:

2017.06.13

当前法律状态:

公开

有效性:

审中

法律详情:

公开

IPC分类号:

G06F21/14(2013.01)I

主分类号:

G06F21/14

申请人:

北京握奇智能科技有限公司

发明人:

宫亚明

地址:

100102 北京市朝阳区望京利泽中园101号启明国际大厦西侧八层

优先权:

专利代理机构:

北京天悦专利代理事务所(普通合伙) 11311

代理人:

田明;文永明

PDF下载: PDF下载
内容摘要

本发明涉及一种Jar包加固方法及系统,所述方法包括如下步骤:加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库;Android项目使用解密动态库解密Jar包文件;Android项目调用解密后的Jar包文件;Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。本发明在Jar包文件提供给Android项目使用之前,需要先对其进行加密。把加密后的Jar包文件和用于解密的动态库提供给Android项目使用。由于本发明包括密钥提取、Jar包加密、Native动态库解密以及解密完成后清除文件,因此提高了Jar包逆向的难度,保护Android中Jar包文件,增强其安全性,降低了Jar包源代码被逆向获取的风险。

权利要求书

1.一种Jar包加固方法,所述方法包括如下步骤:
加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库;
Android项目使用解密动态库解密Jar包文件;
Android项目调用解密后的Jar包文件;
Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。
2.如权利要求1所述的Jar包加固方法,其特征在于,所述Jar包加密分为以下三个步
骤:
(1)、复制原始Jar包文件的前N字节,作为新Jar包文件的头部;
(2)、使用密钥提取算法从N字节的Jar包文件头部里提取对称加密算法的密钥;
(3)、对原始Jar包文件的除前N字节之外的部分使用所述对称加密算法和所述密钥进
行加密,然后把加密后的部分与新Jar包文件的头部组合为新Jar包文件。
3.如权利要求2所述的Jar包加固方法,其特征在于,所述密钥提取算法为如下三种中
的一种或多种组合:第一种,从N字节的Jar包文件头部里随机选择若干字节作为密钥或密
钥的一部分;第二种,先从N字节的Jar包文件头部里随机选择若干字节,然后将这些字节进
行逻辑与、逻辑或、和/或哈希计算,选择处理后的若干字节作为密钥或密钥的一部分;第三
种,先计算N字节的Jar包文件头部的哈希值,然后选择所述哈希值的若干字节作为密钥或
密钥的一部分。
4.如权利要求1所述的Jar包加固方法,其特征在于,所述使用解密动态库解密Jar包文
件分为以下三个步骤:
(1)、复制新Jar包文件的头部N字节作为解密后Jar包文件的头部;
(2)、使用密钥提取算法从新Jar包文件的头部提取解密密钥;
(3)、使用对称加密算法和解密密钥把新Jar包文件除前N字节之外的部分解密,与头部
组合为解密后Jar包文件。
5.如权利要求2-4任意一项所述的Jar包加固方法,其特征在于,所述对称加密算法为
以下算法中的一种:DES、3DES、AES、SM4、Blowfish、IDEA、RC4、RC5、RC6。
6.一种Jar包加固系统,其特征在于,所述系统包括如下模块:
Jar包加密模块,用于加密Jar包文件;
Jar包解密模块,用于使用解密动态库解密Jar包文件;
Jar包调用模块,用于调用解密后的Jar包文件;
文件删除模块,用于删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。
7.如权利要求6所述的Jar包加固系统,其特征在于,所述Jar包加密模块具有如下三个
单元:
第一复制单元,用于复制原始Jar包文件的前N字节,作为新Jar包文件的头部;
加密密钥提取单元,用于使用密钥提取算法从N字节的Jar包文件头部里提取对称加密
算法的密钥;
加密及组合单元,用于对原始Jar包文件的除前N字节之外的部分使用所述对称加密算
法和所述密钥进行加密,然后把加密后的部分与新Jar包文件的头部组合为新Jar包文件。
8.如权利要求7所述的Jar包加固系统,其特征在于,所述密钥提取算法为如下三种中
的一种或多种组合:第一种,从N字节的Jar包文件头部里随机选择若干字节作为密钥或密
钥的一部分;第二种,先从N字节的Jar包文件头部里随机选择若干字节,然后将这些字节进
行逻辑与、逻辑或、和/或哈希计算,选择处理后的若干字节作为密钥或密钥的一部分;第三
种,先计算N字节的Jar包文件头部的哈希值,然后选择所述哈希值的若干字节作为密钥或
密钥的一部分。
9.如权利要求6所述的Jar包加固系统,其特征在于,所述Jar包解密模块具有如下三个
单元:
第二复制单元,用于复制新Jar包文件的头部N字节作为解密后Jar包文件的头部;
解密密钥提取单元,用于使用密钥提取算法从新Jar包文件的头部提取解密密钥;
解密及组合单元,用于使用对称加密算法和解密密钥把新Jar包文件除前N字节之外的
部分解密,与头部组合为解密后Jar包文件。
10.如权利要求7-9任意一项所述的Jar包加固系统,其特征在于,所述对称加密算法为
以下算法中的一种:DES、3DES、AES、SM4、Blowfish、IDEA、RC4、RC5、RC6。

说明书

一种Jar包加固方法及系统

技术领域

本发明属于计算机安全防护技术领域,具体涉及一种Android项目中使用Native
编程实现的一种Jar包的加固方法及系统。

背景技术

由于Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的
字节码(.class文件),然后在运行期动态链接。这样,编译后的类文件中将包含有符号表,
从而使得Java程序很容易被反编译,从而观察程序的结构与实现细节。对于需要提供Jar
(Java Archive,即Java归档)包的第三方,为保护知识产权,需要对Jar包进行保护,增加非
法用户获取到Jar包后对Java源码静态分析的难度。

为Android项目中提供Jar包时,为了防止Jar包被逆向分析得到源代码,需要对
Jar包文件进行加固处理。现在的加固方法有使用Proguard工具进行混淆、DEX(Dalvik
Executable,即Dalvik可执行文件)保护、算法加密保护等。

目前已有这方面的专利技术申请,例如申请号为201110288519.0的中国发明专利
申请,公开了一种Java源代码的保护方法和系统。在第一启动类被调用时,该方法包括以下
步骤,其中,第一启动类为Java程序的启动类:第一启动类将第一密文数据进行解密,得到
类加载器;类加载器将第二密文数据读入内存进行解密,得到第一类,其中,第一类为Java
虚拟机运行的类,其后缀名为.class;类加载器将第二启动类加载到内存,其中,第二启动
类为Java程序的jar包中的原启动类;以及类加载器将第一类加载到Java虚拟机,以便Java
虚拟机能够调用第二启动类中的主接口,运行Java程序。通过本发明,能够实现Java源代码
的保护,使得Java源代码不易被反汇编。

然而,上述技术中,针对Android平台都有一定的局限性:使用Proguard工具进行
代码混淆,代码经过混淆后,改变了一部分类名、方法名和变量名,使得反编译后阅读代码
难度增加。但混淆只是增加了逆向的时间成本,仍然面临被逆向成功的风险。另一方面,混
淆功能有一定的限制,一些关键的类名、方法名和变量名因使用限制不能混淆。而加密算法
加密Jar包文件后,在App调用Jar时需要使用密钥解密后再进行加载调用。这种方法的安全
性取决于密钥的安全性,如果密钥以字符串的形式保存在源代码中,被逆向的风险较大。另
一方面,在Android中使用Java语言编写,Java逆向难度较C/C++小,加密密钥不论是保存在
源代码中还是通过算法计算得到,都会有被逆向获取的风险。

发明内容

为解决上述问题,本发明提出了一种使用对称加密算法对Jar包加密的方法和系
统,包括密钥提取、Jar包加密、Native动态库解密以及解密完成后清除文件,提高了Jar包
逆向的难度,保护Android中Jar包文件,增强其安全性,降低了Jar包源代码被逆向获取的
风险。

具体的,根据本发明的一个方面,提供了一种Jar包加固方法,所述方法包括如下
步骤:

加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库;

Android项目使用解密动态库解密Jar包文件;

Android项目调用解密后的Jar包文件;

Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。

进一步,如上所述的Jar包加固方法,所述Jar包加密分为以下三个步骤:

(1)、复制原始Jar包文件的前N字节,作为新Jar包文件的头部;

(2)、使用密钥提取算法从N字节的Jar包文件头部里提取对称加密算法的密钥;

(3)、对原始Jar包文件的除前N字节之外的部分使用所述对称加密算法和所述密
钥进行加密,然后把加密后的部分与新Jar包文件的头部组合为新Jar包文件。

进一步,如上所述的Jar包加固方法,所述密钥提取算法为如下三种中的一种或多
种组合:第一种,从N字节的Jar包文件头部里随机选择若干字节作为密钥或密钥的一部分;
第二种,先从N字节的Jar包文件头部里随机选择若干字节,然后将这些字节进行逻辑与、逻
辑或、和/或哈希计算,选择处理后的若干字节作为密钥或密钥的一部分;第三种,先计算N
字节的Jar包文件头部的哈希值,然后选择所述哈希值的若干字节作为密钥或密钥的一部
分。

进一步,如上所述的Jar包加固方法,所述使用解密动态库解密Jar包文件分为以
下三个步骤:

(1)、复制新Jar包文件的头部N字节作为解密后Jar包文件的头部;

(2)、使用密钥提取算法从新Jar包文件的头部提取解密密钥;

(3)、使用对称加密算法和解密密钥把新Jar包文件除前N字节之外的部分解密,与
头部组合为解密后Jar包文件。

更进一步,如上所述的Jar包加固方法,所述对称加密算法为以下算法中的一种:
DES、3DES、AES、SM4、Blowfish、IDEA、RC4、RC5、RC6。

根据本发明的另一个方面,本发明还提供了一种Jar包加固系统,所述系统包括如
下模块:

Jar包加密模块,用于加密Jar包文件;

Jar包解密模块,用于使用解密动态库解密Jar包文件;

Jar包调用模块,用于调用解密后的Jar包文件;

文件删除模块,用于删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文
件。

进一步,如上所述的Jar包加固系统,所述Jar包加密模块具有如下三个单元:

第一复制单元,用于复制原始Jar包文件的前N字节,作为新Jar包文件的头部;

加密密钥提取单元,用于使用密钥提取算法从N字节的Jar包文件头部里提取对称
加密算法的密钥;

加密及组合单元,用于对原始Jar包文件的除前N字节之外的部分使用所述对称加
密算法和所述密钥进行加密,然后把加密后的部分与新Jar包文件的头部组合为新Jar包文
件。

进一步,如上所述的Jar包加固系统,所述密钥提取算法为如下三种中的一种或多
种组合:第一种,从N字节的Jar包文件头部里随机选择若干字节作为密钥或密钥的一部分;
第二种,先从N字节的Jar包文件头部里随机选择若干字节,然后将这些字节进行逻辑与、逻
辑或、和/或哈希计算,选择处理后的若干字节作为密钥或密钥的一部分;第三种,先计算N
字节的Jar包文件头部的哈希值,然后选择所述哈希值的若干字节作为密钥或密钥的一部
分。

进一步,如上所述的Jar包加固系统,所述Jar包解密模块具有如下三个单元:

第二复制单元,用于复制新Jar包文件的头部N字节作为解密后Jar包文件的头部;

解密密钥提取单元,用于使用密钥提取算法从新Jar包文件的头部提取解密密钥;

解密及组合单元,用于使用对称加密算法和解密密钥把新Jar包文件除前N字节之
外的部分解密,与头部组合为解密后Jar包文件。

进一步,如上所述的Jar包加固系统,所述对称加密算法为以下算法中的一种:
DES、3DES、AES、SM4、Blowfish、IDEA、RC4、RC5、RC6。

本发明的有益效果如下:

本发明中,通过把Jar包加密,在Android项目中使用Native动态库的方法解密Jar
包,密钥提取方法和解密方法由Native动态库实现,这样把Jar包的安全风险转移到了
Native动态库的安全上。因为Native动态库使用C/C++语言编写,逆向的难度强于Java语
言,另一方面,当前对Native动态库的加固方案比较成熟,更能提高Native动态库的安全
性,从而提高Jar包的安全性。

本发明中,使用了对称加密算法对Jar包加解密,解密效率比非对称加密算法要
高。

本发明中,Jar包加密前后头部N字节保持一致,而不是对整个Jar包文件加密,给
逆向分析增加了迷惑性。

本发明中,加解密密钥从Jar包中提取得到,减小了把密钥存储在代码中被非法用
户逆向读取的风险。

本发明中,Android项目调用完成解密后的Jar包后,删除该Jar包文件以及从中释
放出的DEX文件,降低解密后的Jar和DEX文件被获取的几率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,
而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够
更明显易懂,以下特举本发明的具体实施方式。

附图说明

图1为本发明的一种Jar包加固方法流程图;

图2为本发明的Jar包加密流程图;

图3为本发明的Jar包加密原理示意图;

图4为本发明的解密Jar包的流程图;

图5为本发明的Jar包解密原理示意图;

图6为本发明的使用Jar包的流程图;

图7为本发明的一种Jar包加固系统的模块图;

图8为本发明的Jar包加密模块的结构图;

图9为本发明的Jar包解密模块的结构图;

图10为本发明的另一个优选实施例中的Jar包加密原理示意图。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步描述。

实施例1

本实施例中,在Jar包文件提供给Android项目使用之前,需要先对其进行加密。把
加密后的Jar包文件和用于解密的动态库提供给Android项目使用。

具体的,如图1所示,为本发明的一种Jar包加固方法流程图,所述方法包括如下步
骤:

S110、加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库。

如图2所示,Jar包加密分为以下三个步骤:

S111、复制原始Jar包文件(以下称为raw.jar)前N字节,作为新Jar包文件(以下称
为new.jar)的头部。

S112、使用密钥提取算法(以下称为f)从N字节的Jar包文件头部里提取对称加密
算法(以下称为F,用于接下来加密Jar包尾部,可以是DES、3DES、AES、SM4、Blowfish、IDEA、
RC4、RC5、RC6等对称加密算法)的密钥key。所述密钥提取算法包括如下三种组合:第一种,
从N字节的Jar包文件头部里随机选择若干字节作为密钥或密钥的一部分;第二种,先从N字
节的Jar包文件头部里随机选择若干字节,然后将这些字节进行逻辑与、逻辑或、和/或哈希
计算,,选择处理后的若干字节作为密钥或密钥的一部分;第三种,先计算N字节的Jar包文
件头部的哈希值,然后选择所述哈希值的若干字节作为密钥或密钥的一部分。

因为Jar包文件本质上是zip文件,其头部有固定的字符,为了保证提取的密钥的
安全性,N的选择不能过小,同时在设计密钥提取算法时尽量避开头部若干字节。

S113、对raw.jar的尾部(除前N字节之外的部分)使用F进行加密,加密密钥为key。
把加密后的部分与new.jar的头部组合为new.jar。为Android项目提供加密后的new.jar文
件。图3为与上述加密流程对应的本发明的Jar包加密原理示意图。

S120、Android项目使用解密动态库解密Jar包文件。首先使用基于Native的C/C++
语言编写解密动态库(称为lib.so)。lib.so中的解密方法用于把new.jar解密为原始的
raw.jar。

如图4所示,lib.so的解密步骤为:

S121、复制new.jar头部N字节作为raw'.jar头部;

S122、使用密钥提取算法f从new.jar头部提取解密密钥key;

S123、使用对称加密算法F把new.jar尾部解密,与头部组合为raw'.jar,raw'.jar
即为原始Jar包文件。图5为与上述解密流程对应的本发明的Jar包解密原理示意图。

S130、Android项目调用解密后的Jar包文件。

S140、Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文
件。

在Android项目中需要使用到Jar包时,需要向其提供new.jar和lib.so两个文件,
如图6所示,使用Jar包的过程为:

S151、Android项目加载lib.so;

S152、调用lib.so的解密方法把new.jar还原为raw'.jar;

S153、Android项目调用解密后的raw'.jar;

S154、Android项目使用完raw'.jar之后,删除raw'.jar和从中释放出的DEX文件。

根据本发明的另一个方面,如图7所示,为本发明的一种Jar包加固系统200的模块
图,所述系统200包括如下模块:

Jar包加密模块210,用于加密Jar包文件;

Jar包解密模块220,用于使用解密动态库解密Jar包文件;

Jar包调用模块230,用于调用解密后的Jar包文件;

文件删除模块240,用于删除解密后的Jar包文件和从该Jar包文件中释放出的DEX
文件。

如图8所示,所述Jar包加密模块210具有如下三个单元:

第一复制单元211,用于复制原始Jar包文件的前N字节,作为新Jar包文件的头部;

加密密钥提取单元212,用于使用密钥提取算法从N字节的Jar包文件头部里提取
对称加密算法的密钥;

加密及组合单元213,用于对原始Jar包文件的除前N字节之外的部分使用所述对
称加密算法和所述密钥进行加密,然后把加密后的部分与新Jar包文件的头部组合为新Jar
包文件。

所述密钥提取算法为如下两种中的一种:第一种,从N字节的Jar包文件头部里随
机选择若干字节作为密钥或密钥的一部分;第二种,先从N字节的Jar包文件头部里随机选
择若干字节,然后将这些字节进行逻辑与、逻辑或、和/或哈希计算,选择处理后的若干字节
作为密钥或密钥的一部分;第三种,先计算N字节的Jar包文件头部的哈希值,然后选择所述
哈希值的若干字节作为密钥或密钥的一部分。

如图9所示,所述Jar包解密模块220具有如下三个单元:

第二复制单元221,用于复制新Jar包文件的头部N字节作为解密后Jar包文件的头
部;

解密密钥提取单元222,用于使用密钥提取算法从新Jar包文件的头部提取解密密
钥;

解密及组合单元223,用于使用对称加密算法把新Jar包文件除前N字节之外的部
分解密,与头部组合为解密后Jar包文件。

该领域的技术人员应该知道,本发明以上实施例中提到的对称加密算法应包括
DES(Data Encryption Standard,即数据加密标准)、3DES、AES(Advanced Encryption
Standard,即高级加密标准)、SM4、Blowfish、IDEA、RC4、RC5、RC6等。

本发明以上的实施例中保持了Jar包头部不变,对Jar包尾部进行加密,然而在本
发明的另一个优选实施例中,如图10所示,也可以保持Jar包中间一部分或尾部不变,加密
其他部分,加密密钥从保持不变的部分提取。

本领域技术人员应该明白,本发明所述的方法和系统并不限于具体实施方式中所
述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技
术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本
发明的保护范围由权利要求及其等同物限定。

一种JAR包加固方法及系统.pdf_第1页
第1页 / 共14页
一种JAR包加固方法及系统.pdf_第2页
第2页 / 共14页
一种JAR包加固方法及系统.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《一种JAR包加固方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种JAR包加固方法及系统.pdf(14页珍藏版)》请在专利查询网上搜索。

本发明涉及一种Jar包加固方法及系统,所述方法包括如下步骤:加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库;Android项目使用解密动态库解密Jar包文件;Android项目调用解密后的Jar包文件;Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。本发明在Jar包文件提供给Android项目使用之前,需要先对其进行加密。把加密后的Jar。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1