一种Jar包加固方法及系统技术方案

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

【技术实现步骤摘要】
一种Jar包加固方法及系统
本专利技术属于计算机安全防护
,具体涉及一种Android项目中使用Native编程实现的一种Jar包的加固方法及系统。
技术介绍
由于Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在运行期动态链接。这样,编译后的类文件中将包含有符号表,从而使得Java程序很容易被反编译,从而观察程序的结构与实现细节。对于需要提供Jar(JavaArchive,即Java归档)包的第三方,为保护知识产权,需要对Jar包进行保护,增加非法用户获取到Jar包后对Java源码静态分析的难度。为Android项目中提供Jar包时,为了防止Jar包被逆向分析得到源代码,需要对Jar包文件进行加固处理。现在的加固方法有使用Proguard工具进行混淆、DEX(DalvikExecutable,即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包加固方法,所述方法包括如下步骤:加密Jar包文件并向Android项目提供加密后的Jar包以及解密动态库;Android项目使用解密动态库解密Jar包文件;Android项目调用解密后的Jar包文件;Android项目删除解密后的Jar包文件和从该Jar包文件中释放出的DEX文件。

【技术特征摘要】
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包加固系统...

【专利技术属性】
技术研发人员:宫亚明
申请(专利权)人:北京握奇智能科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1