本发明专利技术公开了一种提高Java软件破解难度的方法及装置,和基于该方法及装置的Java软件版权验证方法。在Java软件完成开发在发布之前对编译后的非程序入口类和方法进行代码混淆,提取软件版权保护模块的数字摘要信息得到第一摘要信息,将第一摘要信息作为常量数据硬编码到版权验证类;在版权验证类执行关键操作处再次使用摘要信息提取模块提取运行时的版权保护模块的数字摘要信息,得到第二摘要信息;将第二摘要信息和第一摘要信息比较,若相同说明版权保护模块在发布后没被篡改,软件合法;若不同说明对软件版权保护模块进行过修改,软件可能被破解,用户非法使用软件。采用本发明专利技术加大了Java软件的破解难度,提高了版权保护强度。
【技术实现步骤摘要】
本专利技术涉及软件版权保护领域,具体涉及一种提高Java软件破解难度的方法及装置,和提高破解难度后的Java软件的版权验证方法。
技术介绍
Java语言以其良好的面向对象特性和跨平台特性获得了广泛的应用,但由于Java语言是解释执行的语言,Java编译器编译并发布的字节码程序易于反编译,对Java字节码程序进行反编译获取源代码进行反向工程,或者修改软件保护相关代码对软件进行破解的情况时有发生。目前很多软件开发商依据计算机唯一的特征码信息如网卡号、硬盘号或者CPU的ID号等一项或多项信息得到计算机指纹信息,将软件许可和硬件绑定。软件开发商也经常将授权许可信息保存在硬件加密狗中,程序在运行时读取加密狗的信息来判断软件是否被授权,这种方式也需要访问硬件信息。Java语言对硬件访问能力较差,为了获取硬件信息,通常需要使用Java本地调用,如在Windows环境下开发符合JNI (Java本地调用)规范的动态连接库,Java语言调用动态连接库来间接获取硬件信息。目前,要对软件进行破解,一般都需要对软件进行修改,通过修改代码或开发一段新的代码欺骗版权验证装置的检测,让程序误以为已经被授权。如下面判断软件是否被授权以及获取授权等级的C++函数boolean isLicensed();int getLicenseLevel O ;正常情况下该函数会读取机器特征码信息,在授权文件读取授权信息,然后对比特征码信息和授权信息,isLicensed O函数用来判断软件是否被授权;getLicenseLevel O函数用来获取软件授权等级。通常开发人员会将其编译为动态连接库如License, dll,供Java程序或其他应用程序调用,进行版权验证。但是对于破解者来说,只需开发两个同名的函数,对第一个函数直接返回true,表示已授权;对第二个函数直接返回100或更高的授权等级。如下boolean isLicensed () { return true; } int getLicenseLevel () { return 100; }然后也编译成名为License, dll的动态库替换原来的同名的文件,即可通过版权校验模块的验证,非法使用软件。由于Java字节码容易反编译,也可以采用相同的通过篡改代码或者开发欺骗类的方式进行软件破解。针对Java字节码易于反编译的问题,目前出现了一些代码混淆工具,混淆以后的代码虽然也可以反编译,但可读性极差,特别是对于代码量大、业务逻辑复杂的类,对反编译代码进行修改再编译成Java字节码理论上是不可能的。在对Java软件进行破解时,破解者一般从代码量小、逻辑简单的类入手;如果将业务逻辑代码和版权保护代码混在一起,混淆后再发布软件也很难破解。但是为了便于维护以及业务逻辑模块开发人员和版权保护模块开发人员的工作分工,软件开发商会将业务逻辑代码和读取授权信息本身的代码尽量分离,减少耦合。由于这种业务逻辑代码和软件版权保护代码的分离,对混淆后的软件版权保护代码进行反编译然后篡改还是可能的,另外软件版权保护代码再复杂,破解者只要弄清楚了合法授权程序相应方法的输入输出(而做到这点并不难),根本不用搞清楚内部复杂的软件加密机制,如前所述编写简单的代码,让版权验证方法直接返回合法授权用户相同的值然后重新编译即可将软件破解。由此可见,现有Java软件保护可以通过篡改软件版权保护模块欺骗软件版权验证装置通过版权认证,具有一定Java或C++语言基础的开发人员很容易实现软件的破解。
技术实现思路
针对现有Java软件版权保护技术中存在的缺陷,本专利技术的目的在于提供一种提高Java软件破解难度的方法及装置,和基于该方法及装置提高破解难度后的Java软件的版权验证方法,以解决现有Java软件版权保护技术存在的容易通过篡改软件版权保护模块实现软件破解的问题。为实现上述目的,本专利技术采用的技术方案如下—种提高Java软件破解难度的方法,包括以下步骤步骤1、将软件版权保护模块所涉及的Java类和非Java程序模块设置为摘要信息提取1吴块的提取对象;步骤2、编译软件的源代码并将编译结果打包成第一 Jar文件,源代码包括业务逻辑代码和软件版权保护代码;步骤3、设置Jar文件的代码混淆选项,设定Jar文件的程序入口类及程序入口方法;步骤4、采用所述代码混淆选项对第一 Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第二 Jar文件;步骤5、执行第二 Jar文件的摘要信息提取模块,提取软件版权保护模块中混淆过的Java类和非Java程序模块的第一摘要信息,并通过第一摘要信息输出装置输出;步骤6、修改软件源代码,将所述第一摘要信息作为常量信息硬编码到Java软件的版权验证类中;步骤7、重新编译修改后的软件的源代码并将编译结果打包成第三Jar文件;步骤8、采用步骤3设置的代码混淆选项对第三Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第四Jar文件,将第四Jar文件作为最终发布的Jar文件。进一步,如上所述的一种提高Java软件破解难度的方法,步骤3中,所述程序入口包括业务功能模块必须公开的类和方法、第一摘要信息输出装置对应的Java类及其启动方法。进一步,如上所述的一种提高Java软件破解难度的方法,步骤I中,如果摘要信息提取模块的提取对象是Java类,步骤5中摘要信息提取模块提取到的第一摘要信息是所述Java类混淆后对应的Java类的摘要信息。再进一步,如上所述的一种提高Java软件破解难度的方法,步骤5中,采用软件系统处理核心业务的Java类中代码量大、业务逻辑复杂的一个或多个Java类作为版权验证类。一种提高Java软件破解难度的装置,包括代码混淆模块用于对编译后的Java软件的非程序入口类和非程序入口方法进行代码混淆;软件版权保护模块用于处理软件版权保护的代码,包括涉及版权保护的Java类和非Java程序模块;摘要信息提取模块用于在软件完成开发并在发布前提取软件版权保护模块的第一摘要信息和在运行时提取软件版权保护模块的第二摘要信息;第一摘要信息输出装置用于将摘要信息提取模块获取的第一摘要信息输出;防篡改验证模块用于将第二摘要信息和第一摘要信息进行比较,确定软件是否合法;业务功能模块用于处理软件业务逻辑的代码。进一步,如上所述的一种提高Java软件破解难度的装置,将第一摘要信息输出装置输出的第一摘要信息硬编码到版权验证类中;将防篡改验证模块嵌入到Java软件的版权验证类中。进一步,如上所述的一种提高Java软件破解难度的装置,防篡改验证模块进行第一摘要信息和第二摘要信息比较时,若第一摘要信息和第二摘要信息相同则说明软件版权保护模块在发布后没有被篡改,软件合法;若不同说明软件版权保护模块被篡改,软件非法。再进一步,如上所述的一种提高Java软件破解难度的装置,摘要信息提取模块所提取的第一摘要信息和第二摘要信息是通过代码混淆模块混淆过的Java类和非Java程序模块的摘要信息。基于上述提高Java软件破解难度的方法及装置的一种提高破解难度的Java软件版权验证的方法,包括以下步骤(I)启动应用系统,加载第四Jar文件;(2)调用摘要信息提取模块,提取软件运行时软件版权保护模块的摘要信息得到本文档来自技高网...
【技术保护点】
一种提高Java软件破解难度的方法,包括以下步骤:步骤1、将软件版权保护模块所涉及的Java类和非Java程序模块设置为摘要信息提取模块的提取对象;步骤2、编译软件的源代码并将编译结果打包成第一Jar文件,源代码包括业务逻辑代码和软件版权保护代码;步骤3、设置Jar文件的代码混淆选项,设定Jar文件的程序入口类及程序入口方法;步骤4、采用所述代码混淆选项对第一Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第二Jar文件;步骤5、执行第二Jar文件的摘要信息提取模块,提取软件版权保护模块中混淆过的Java类和非Java程序模块的第一摘要信息,并通过第一摘要信息输出装置输出;步骤6、修改软件源代码,将所述第一摘要信息作为常量信息硬编码到Java软件的版权验证类中;步骤7、重新编译修改后的软件的源代码并将编译结果打包成第三Jar文件;步骤8、采用步骤3设置的代码混淆选项对第三Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第四Jar文件,将第四Jar文件作为最终发布的Jar文件。
【技术特征摘要】
1.一种提高Java软件破解难度的方法,包括以下步骤 步骤1、将软件版权保护模块所涉及的Java类和非Java程序模块设置为摘要信息提取丰吴块的提取对象; 步骤2、编译软件的源代码并将编译结果打包成第一 Jar文件,源代码包括业务逻辑代码和软件版权保护代码; 步骤3、设置Jar文件的代码混淆选项,设定Jar文件的程序入口类及程序入口方法;步骤4、采用所述代码混淆选项对第一 Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第二 Jar文件; 步骤5、执行第二 Jar文件的摘要信息提取模块,提取软件版权保护模块中混淆过的Java类和非Java程序模块的第一摘要信息,并通过第一摘要信息输出装置输出; 步骤6、修改软件源代码,将所述第一摘要信息作为常量信息硬编码到Java软件的版权验证类中; 步骤7、重新编译修改后的软件的源代码并将编译结果打包成第三Jar文件; 步骤8、采用步骤3设置的代码混淆选项对第三Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第四Jar文件,将第四Jar文件作为最终发布的Jar文件。2.如权利要求1所述的一种提高Java软件破解难度的方法,其特征在于步骤3中,所述程序入口包括业务功能模块必须公开的类和方法、第一摘要信息输出装置对应的Java类及其启动方法。3.如权利要求1所述的一种提高Java软件破解难度的方法,其特征在于步骤I中,如果摘要信息提取模块的提取对象是Java类,步骤5中摘要信息提取模块提取到的第一摘要信息是所述Java类混淆后对应的Java类的摘要信息。4.如权利要求1所述的一种提高Java软件破解难度的方法,其特征在于步骤6中,采用软件系统处理核心业务的Java类中代码量大、业务逻辑复杂的一个或多个Java类作为版权验证类。5.一种提高Java软件破解难度的装置,包括 代码混淆模块用于对编译后的Java软件的非程序入口类及非程序...
【专利技术属性】
技术研发人员:乐以长,
申请(专利权)人:北京大学,北大方正集团有限公司,方正国际软件北京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。