提高Java软件破解难度的方法及装置、验证方法及验证装置制造方法及图纸

技术编号:24122132 阅读:66 留言:0更新日期:2020-05-13 03:24
本发明专利技术涉及一种提高Java软件破解难度的方法及装置、验证方法及验证装置,包括在Java软件的源代码中新增AOP切面类,得到Java软件新增后的源代码;对源代码进行编译并将编译结果打包成第一Jar文件;对第一Jar文件进行代码混淆并将混淆结果打包成第二Jar文件,获取第一摘要信息并将第一摘要信息硬编码到切面类中;再次对源代码进行编译并将编译结果打包成第三Jar文件;对第三Jar文件进行代码混淆并打包成最终发布的Jar文件。本申请可以通过编译器将防篡改模块的代码自动织入大量业务处理类的方法中,在Java软件多处识别软件发布后是否有人篡改软件版权保护模块,结合代码混淆技术,将大幅增大Java软件破解的工作量和破解难度,加大了Java软件的版权保护力度。

【技术实现步骤摘要】
提高Java软件破解难度的方法及装置、验证方法及验证装置
本专利技术属于软件版权保护
,具体涉及一种提高Java软件破解难度的方法及装置、验证方法及验证装置。
技术介绍
Java程序编译后的二进类文件很容易被反编译获得源代码,通过源代码进行反向工程,或者在获得源代码后,对软件版权保护部分进行修改再进行编译,就能够对软件进行破解,这就对Java程序的软件版权保护提出挑战,迫切需要保护Java软件的更加有效的方法。目前很多软件开发商提供的软件版权保护模块往往会依据计算机唯一的特征码信息如网卡号、硬盘号或者CPU的ID号等一项或多项信息得到计算机指纹信息,将软件许可和计算机硬件进行绑定。软件开发商也经常将授权许可信息保存在硬件加密狗中,程序在运行时读取加密狗的信息来判断软件是否被授权。软件破解者通常通过对Java程序进行反编译,再编写一段代码伪造计算机指纹信息,或者编写一段绕过版权验证的代码,即可对Java软件进行破解。目前最简便实用的解决方法就是对Java程序进行代码混淆,代码混淆技术就是在不改变程序运行逻辑的情况下,使得混淆后的程序被反编译后程序可读性很差,难以再次进行修改,从而达到保护Java软件的目的。在对Java软件进行破解时,破解者一般会从代码量小、逻辑简单的类入手;如果将业务处理代码和版权保护代码混在一起,混淆后再发布软件也很难被破解。但是为了便于维护以及业务处理模块开发人员和版权保护模块开发人员的工作分工,软件开发商会将业务处理代码和读取授权信息本身的代码尽量分离,减少耦合。由于这种业务处理代码和软件版权保护代码的分离,对混淆后的软件版权保护代码进行反编译然后进行篡改还是可能的,针对上述问题,专利号为ZL201110322930.5,名称为《提高Java软件破解难度的方法及装置、版权验证方法》的专利技术专利中公开了一种通过在核心业务类提取软件版权保护模块的数字摘要信息并将其与开发阶段硬编码到核心业务类的软件版权保护模块的数字摘要信息进行比较,来识别软件是否被破解。采用该专利技术所公开的方法选择代码量大、业务逻辑复杂的一个或多个核心业务类作为版权验证类,能够解决业务较为单一的Java软件的版权保护难题。但是对存在大量业务且业务相对独立的应用场景如现在流行的微服务架构,这种方法就有明显的缺陷。基于微服务架构的应用系统提供了大量的微服务,每一个微服务通过一个或多个Java类对外提供服务,每一个Java类本身就是一个业务处理类,一个系统存在少则几十个多则成百上千个业务处理类。采用该专利技术的方法将对大量的业务处理类的源代码进行手工修改,将第一摘要信息写入其中,将会把业务无关的防篡改验证代码写入业务处理类中,不利于业务处理模块开发人员和版权保护模块开发人员的工作分工,这种方式也会污染代码,造成处理业务逻辑的源代码可读性差,难以维护;并且这种方式工作量巨大、容易出现遗漏,在程序出现变化时,混淆后的软件版权保护模块的数字摘要信息可能会出现变化,此时就要重复这些枯燥又容易出错的工作。
技术实现思路
有鉴于此,本专利技术的目的在于克服现有技术的不足,提供一种提高Java软件破解难度的方法、装置及版权验证方法、装置,以解决现有技术中难以对存在大量业务且业务相对独立应用场景的软件版权进行保护和验证的问题。为实现以上目的,本专利技术采用如下技术方案:一种提高Java软件破解难度的方法,包括:在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。进一步的,所述AOP切面类,包括:一个或多个切面,所述切面由切点和通知组成;其中,所述切点根据预设的规则选自业务处理类的方法;所述通知在编译时被织入所述业务处理类的切点位置,用于执行软件防篡改验证操作。进一步的,根据预设的规则选择所述切点,所述规则基于Java类的包名、类的修饰符、类方法的修饰符、类方法的形式参数、类方法的返回值类型选择所述业务处理类的方法。进一步的,所述编译Java软件的源代码,和/或,所述编译所述修改后的Java软件的源代码,采用预设的编译器进行编译,所述预设的编译器支持织入,以将AOP切面类中和切点匹配的通知代码编译进目标二进制类中,所述目标二进制类物理上包含所述AOP切面类的通知代码。进一步的,所述目标二进制类是将源代码转换为二进制的目标代码。进一步的,还包括:设置所述AOP切面类,具体包括:定义所述AOP切面类的切点和通知;所述AOP切面类在业务处理类的方法之前执行所述软件防篡改验证。本申请实施例提供一种提高Java软件破解难度的版权验证方法,包括:加载最终发布的Jar文件,所述最终发布的Jar文件采用上述一种提高Java软件破解难度的方法生成;运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。进一步的,所述提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果,包括:在所述最终发布的Jar文件运行到被编译器织入了所述AOP切面类中的通知代码的业务处理类的切点位置,通知代码将解析所述最终发布的Jar文件,提取第二摘要信息;获取硬编码到切面类并被编译器织入到业务处理类中的第一摘要信息;比对所述第二摘要信息与所述第一摘要信息是否相同,如果相同,则说明Java软件版权保护模块未被篡改;如果不同,则说明Java软件版权保护模块被篡改。本申请实施例提供一种提高J本文档来自技高网
...

【技术保护点】
1.一种提高Java软件破解难度的方法,其特征在于,包括:/n在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行防篡改验证操作的位置;/n编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;/n采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;/n根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;/n将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;/n编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;/n采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;/n其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。/n...

【技术特征摘要】
1.一种提高Java软件破解难度的方法,其特征在于,包括:
在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行防篡改验证操作的位置;
编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;
编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。


2.根据权利要求1所述的方法,其特征在于,所述AOP切面类,包括:
一个或多个切面,所述切面由切点和通知组成;
其中,所述切点根据预设的规则选自业务处理类的方法;所述通知在编译时被织入所述业务处理类的切点位置,用于执行软件防篡改验证操作。


3.根据权利要求2所述的方法,其特征在于,
根据预设的规则选择所述切点,所述规则基于Java类的包名、类的修饰符、类方法的修饰符、类方法的形式参数、类方法的返回值类型选择所述业务处理类的方法。


4.根据权利要求1所述的方法,其特征在于,
所述编译Java软件的源代码,和/或,所述编译所述修改后的Java软件的源代码,采用预设的编译器进行编译,所述预设的编译器支持织入,以将AOP切面类中和切点匹配的通知代码编译进目标二进制类中,所述目标二进制类物理上包含所述AOP切面类的通知代码。


5.根据权利要求4所述的方法,其特征在于,
所述目标二进制类是将源代码转换为二进制的目标代码。


6.根据权利要求1所述的方法,其特征在于,还包括:
设置所述AOP切面类,具体包括:
定义所述AOP切面类的切点和通知;
所述AOP切面类在业务处理类的方法之前执行所述软件防篡改验证。


7.一种提高Java软件破解难...

【专利技术属性】
技术研发人员:乐以长李薇薇
申请(专利权)人:方正国际软件北京有限公司
类型:发明
国别省市:北京;11

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

1