一种用于Java软件防盗版的加密编译和运行方法技术

技术编号:30780582 阅读:36 留言:0更新日期:2021-11-16 07:41
本发明专利技术公开了一种用于Java软件防盗版的加密编译和运行方法。因此针对Java开发的软件产品的保护需求尤为迫切。本发明专利技术包括生产者加密方法和运行前动态解密方法两个部分。本发明专利技术将解密方法写在外部dll文件中,可以将代码的安全级别提升至二进制。并利用白盒密码加密的方式避免第三方绕开dll文件记载的解密方法进行直接破解。此外,本发明专利技术仅将解密表提供给使用者,而不向使用者提供密钥和加密表由厂商持有,并以此对关键的字节码文件进行加密。从而在保证java文件使用效果的同时,有效避免密钥外泄导致的风险。外泄导致的风险。外泄导致的风险。

【技术实现步骤摘要】
一种用于Java软件防盗版的加密编译和运行方法


[0001]本专利技术属于信息安全领域,具体是软件版权保护领域,涉及一种防止源代码反编译的方法,具体是一种通过结合白盒密码和JVMTI(Java虚拟机接口工具)对关键字节码文件进行安全加密,并在运行前解密的方法。能够有效地防止软件源代码被逆向分析。

技术介绍

[0002]近年来,软件技术发展的速度越来越快,各种各样不同功能的软件进入市场。要设计开发一个软件通常需要花费大量的时间与金钱。然而,许多不法分子对软件进行逆向分析、非法破解,不仅对软件著作权人造成了极大的损失,而且会阻碍软件产业的健康发展。Java是一种跨平台运行的语言,与C++编译得到的二进制文件不同,其编译成的字节码文件具有标准化、直接可读等特点,目前存在许多Java工程逆向工具,不需要掌握深入的专业知识,就可以轻易地将Java工程反编译为源码。
[0003]因此针对Java开发的软件产品的保护需求尤为迫切。目前主流的Java代码保护方法包括:代码混淆、自定义类加载器、本地化技术、软件哨兵、加壳等。代码混淆方法都有规律可循,有经验的攻击者可反过来使用混淆器,对混淆的方法进行解混淆。自定义类加载器方法虽然可以保护关键代码,但是类加载器的加载方法还是会暴露在源码中。利用本地化技术和加壳方法可以将代码提升到二进制安全级别,但会使Java丧失跨平台优点,导致交互性变差。软件哨兵可以有效对抗动态分析,但反编译得到源码后仍可逐一关闭哨兵。
[0004]所以在不改变Java程序可移植性的同时,进一步增强程序的抗反编译能力,才能更好地解决软件盗版问题。

技术实现思路

[0005]本专利技术的目的就是提供一种可移植性强、安全性高的源代码保护方法。该方法采用JVMTI技术,在字节码被JVM加载前动态解密,并使用白盒密码作为加解密方案。能够有效地防止软件源代码被逆向分析。
[0006]一种用于Java软件防盗版的加密编译和运行方法,包括生产者加密方法和运行前动态解密方法两个部分。
[0007]所述的生产者加密方法的具体步骤如下:
[0008](1).指定密钥并生成加解密表
[0009]对软件中需要加密的Java文件指定对应的密钥。利用白盒密码算法生成密钥对应的加密表和解密表。
[0010](2).筛选出待加密的类名或包名
[0011]在Java文件中筛选出需要加密的字节码文件,并利用加密表对筛选出的字节码文件进行白盒密码加密,生成加密文件。
[0012](3).软件交付
[0013]将解密方法定义在dll文件中,将解密表和dll文件一起交付给用户。用户能够利
用解密表和dll文件来对加密文件进行解密和运行。
[0014]所述的运行前动态解密方法具体是:
[0015](1).加载JVMTI以及dll文件中的解密方法。
[0016](2).在Java文件中筛选出加密文件,并利用解密表和dll文件中的解密方法对加密文件进行解密,还原出初始状态的字节码文件。
[0017](3).将解密得到的字节码文件在JVM中进行加载。
[0018]作为优选,所述白盒密码加密的流程如下:明文的字节码文件经过多张表完成加密,进行加密的表包括Type1

3型表、Type4表和extc表。所述的Type1

3型表均由密钥生成;所述的Type4表执行异或功能;所述的extc表由程序随机生成。
[0019]作为优选,筛选出需要加密的字节码文件的过程如下:使用Java的JarFile相关API,找到jar/war包中指定的类名或包名,并在其中选取需要加密的字节码文件。
[0020]作为优选,筛选出加密文件的具体过程如下:对每个字节码文件的魔数进行识别;魔数不是“CA FE BA BE”的文件为加密文件。魔数为字节码文件的前四个字节。
[0021]本专利技术具有的有益效果是:
[0022]1、本专利技术将解密方法写在外部dll文件中,可以将代码的安全级别提升至二进制。并利用白盒密码加密的方式避免第三方绕开dll文件记载的解密方法进行直接破解。
[0023]2、本专利技术仅将解密表提供给使用者,而不向使用者提供密钥和加密表由厂商持有,并以此对关键的字节码文件进行加密。从而在保证java文件使用效果的同时,有效避免密钥外泄导致的风险。
附图说明
[0024]图1为本专利技术整体流程图;
[0025]图2为本专利技术中生产者加密方法的流程图;
[0026]图3为白盒密码加密流程图;
[0027]图4为本专利技术中运行前动态解密方法的流程图。
具体实施方式
[0028]结合以下具体实施例和附图,对本专利技术进一步的详细说明。
[0029]如图1所示,一种用于Java软件防盗版的加密编译和运行方法,其可以有效防止源代码被篡改,从而达到软件防盗版的目的,具体包括生产者加密方法和运行前动态解密方法两个部分。
[0030]如图2所示,所述的生产者加密方法的具体步骤如下:
[0031](1).指定密钥并生成加解密表
[0032]对每份软件中的Java文件均指定对应的密钥。在指定密钥之后,由白盒密码算法生成对应的加解密表,加密表用来在步骤(2)中对文件进行加密。
[0033]图3所示的白盒密码加密流程中,明文经过多张表完成加密,Type1

3型表均由密钥生成,Type4表执行异或功能,extc表由程序随机生成,来对整个表的输入输出做保护。在所述加密过程中,密钥被隐藏在各张表中,可以有效防止密钥暴露在源码中,进一步提升防逆向能力。
[0034](2).筛选出待加密的类名或包名
[0035]如图3所示,加密程序的逻辑是使用Java的JarFile相关API,找到jar/war包中指定的类名或包名后,对所有预先选定的字节码文件使用加密表进行白盒加密,形成加密文件。
[0036]白盒密码对比其他加密方法是以时间和内存换取更高的安全性,经本方案加密后的项目第一次加载时会比普通项目执行慢一些。如果在大项目中对每一个字节码文件都进行加密,会在时间上和空间上造成较大浪费,所以要有选择地进行加密。选出待加密的类名或包名后,加密程序会对所有符合条件的字节码文件进行白盒加密。
[0037](3).软件交付
[0038]加密文件的解密方法被定义在dll文件(动态链接库)中,将加密软件、解密表和dll文件一起交付给用户。
[0039]上述第三步中的dll涉及到JNI技术,JVMTI的特点是能在JVM初始化前进行相应操作,其实现原理就是通过JNI技术,在加密字节码被Java虚拟机(JVM)加载前,先行调用dll中的解密方法进行解密,得到正常字节码后再交由JVM进行加载。
[0040]如图4所示,所述的运行前动态解密方法具体是:
[0041](1).启动软件,并加载JVMTI。具体地,在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于Java软件防盗版的加密编译和运行方法,包括生产者加密方法和运行前动态解密方法两个部分;其特征在于:所述的生产者加密方法的具体步骤如下:(1).指定密钥并生成加解密表对软件中需要加密的Java文件指定对应的密钥;利用白盒密码算法生成密钥对应的加密表和解密表;(2).筛选出待加密的类名或包名在Java文件中筛选出需要加密的字节码文件,并利用加密表对筛选出的字节码文件进行白盒密码加密,生成加密文件;(3).软件交付将解密方法定义在dll文件中,将解密表和dll文件一起交付给用户;用户能够利用解密表和dll文件来对加密文件进行解密和运行;所述的运行前动态解密方法具体是:(1).加载JVMTI以及dll文件中的解密方法;(2).在Java文件中筛选出加密文件,并利用解密表和dll文件中的解密方法对加密文件进行解密,还原出初始状态的字节码文件;(3).将解密得到的字节码文件在JVM中进行加载。2.根据权利要求1...

【专利技术属性】
技术研发人员:穆爽徐欣张权
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1