首页> 中国专利> 提高Java软件破解难度的方法及装置、版权验证方法

提高Java软件破解难度的方法及装置、版权验证方法

摘要

本发明公开了一种提高Java软件破解难度的方法及装置,和基于该方法及装置的Java软件版权验证方法。在Java软件完成开发在发布之前对编译后的非程序入口类和方法进行代码混淆,提取软件版权保护模块的数字摘要信息得到第一摘要信息,将第一摘要信息作为常量数据硬编码到版权验证类;在版权验证类执行关键操作处再次使用摘要信息提取模块提取运行时的版权保护模块的数字摘要信息,得到第二摘要信息;将第二摘要信息和第一摘要信息比较,若相同说明版权保护模块在发布后没被篡改,软件合法;若不同说明对软件版权保护模块进行过修改,软件可能被破解,用户非法使用软件。采用本发明加大了Java软件的破解难度,提高了版权保护强度。

著录项

  • 公开/公告号CN103065072A

    专利类型发明专利

  • 公开/公告日2013-04-24

    原文格式PDF

  • 申请/专利号CN201110322930.5

  • 发明设计人 乐以长;

    申请日2011-10-21

  • 分类号

  • 代理机构北京天悦专利代理事务所(普通合伙);

  • 代理人田明

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2024-02-19 19:15:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-06-23

    专利权的转移 IPC(主分类):G06F21/14 专利号:ZL2011103229305 登记生效日:20230609 变更事项:专利权人 变更前权利人:北京大学 变更后权利人:北京大学 变更事项:地址 变更前权利人:100871 北京市海淀区颐和园路5号 变更后权利人:100871 北京市海淀区颐和园路5号 变更事项:专利权人 变更前权利人:北大方正集团有限公司 方正国际软件(北京)有限公司 变更后权利人:新方正控股发展有限责任公司 方正国际软件(北京)有限公司

    专利申请权、专利权的转移

  • 2016-08-03

    授权

    授权

  • 2013-07-17

    实质审查的生效 IPC(主分类):G06F21/14 申请日:20111021

    实质审查的生效

  • 2013-04-24

    公开

    公开

说明书

技术领域

本发明涉及软件版权保护领域,具体涉及一种提高Java软件破解难度的 方法及装置,和提高破解难度后的Java软件的版权验证方法。

背景技术

Java语言以其良好的面向对象特性和跨平台特性获得了广泛的应用,但 由于Java语言是解释执行的语言,Java编译器编译并发布的字节码程序易 于反编译,对Java字节码程序进行反编译获取源代码进行反向工程,或者修 改软件保护相关代码对软件进行破解的情况时有发生。

目前很多软件开发商依据计算机唯一的特征码信息如网卡号、硬盘号或 者CPU的ID号等一项或多项信息得到计算机指纹信息,将软件许可和硬件绑 定。软件开发商也经常将授权许可信息保存在硬件加密狗中,程序在运行时 读取加密狗的信息来判断软件是否被授权,这种方式也需要访问硬件信息。

Java语言对硬件访问能力较差,为了获取硬件信息,通常需要使用Java 本地调用,如在Windows环境下开发符合JNI(Java本地调用)规范的动态 连接库,Java语言调用动态连接库来间接获取硬件信息。

目前,要对软件进行破解,一般都需要对软件进行修改,通过修改代码 或开发一段新的代码欺骗版权验证装置的检测,让程序误以为已经被授权。 如下面判断软件是否被授权以及获取授权等级的C++函数:

boolean isLicensed();

int getLicenseLevel();

正常情况下该函数会读取机器特征码信息,在授权文件读取授权信息, 然后对比特征码信息和授权信息,isLicensed()函数用来判断软件是否被授 权;getLicenseLevel()函数用来获取软件授权等级。通常开发人员会将其编 译为动态连接库如License.dll,供Java程序或其他应用程序调用,进行版 权验证。

但是对于破解者来说,只需开发两个同名的函数,对第一个函数直接返 回true,表示已授权;对第二个函数直接返回100或更高的授权等级。如下:

然后也编译成名为License.dll的动态库替换原来的同名的文件,即可 通过版权校验模块的验证,非法使用软件。由于Java字节码容易反编译,也 可以采用相同的通过篡改代码或者开发欺骗类的方式进行软件破解。

针对Java字节码易于反编译的问题,目前出现了一些代码混淆工具,混 淆以后的代码虽然也可以反编译,但可读性极差,特别是对于代码量大、业 务逻辑复杂的类,对反编译代码进行修改再编译成Java字节码理论上是不可 能的。

在对Java软件进行破解时,破解者一般从代码量小、逻辑简单的类入手; 如果将业务逻辑代码和版权保护代码混在一起,混淆后再发布软件也很难破 解。但是为了便于维护以及业务逻辑模块开发人员和版权保护模块开发人员 的工作分工,软件开发商会将业务逻辑代码和读取授权信息本身的代码尽量 分离,减少耦合。

由于这种业务逻辑代码和软件版权保护代码的分离,对混淆后的软件版 权保护代码进行反编译然后篡改还是可能的,另外软件版权保护代码再复杂, 破解者只要弄清楚了合法授权程序相应方法的输入输出(而做到这点并不 难),根本不用搞清楚内部复杂的软件加密机制,如前所述编写简单的代码, 让版权验证方法直接返回合法授权用户相同的值然后重新编译即可将软件破 解。

由此可见,现有Java软件保护可以通过篡改软件版权保护模块欺骗软件 版权验证装置通过版权认证,具有一定Java或C++语言基础的开发人员很容 易实现软件的破解。

发明内容

针对现有Java软件版权保护技术中存在的缺陷,本发明的目的在于提供 一种提高Java软件破解难度的方法及装置,和基于该方法及装置提高破解难 度后的Java软件的版权验证方法,以解决现有Java软件版权保护技术存在 的容易通过篡改软件版权保护模块实现软件破解的问题。

为实现上述目的,本发明采用的技术方案如下:

一种提高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文件。

进一步,如上所述的一种提高Java软件破解难度的方法,步骤3中,所述 程序入口包括业务功能模块必须公开的类和方法、第一摘要信息输出装置对应 的Java类及其启动方法。

进一步,如上所述的一种提高Java软件破解难度的方法,步骤1中,如果 摘要信息提取模块的提取对象是Java类,步骤5中摘要信息提取模块提取到的 第一摘要信息是所述Java类混淆后对应的Java类的摘要信息。

再进一步,如上所述的一种提高Java软件破解难度的方法,步骤5中,采 用软件系统处理核心业务的Java类中代码量大、业务逻辑复杂的一个或多个 Java类作为版权验证类。

一种提高Java软件破解难度的装置,包括:

代码混淆模块:用于对编译后的Java软件的非程序入口类和非程序入口 方法进行代码混淆;

软件版权保护模块:用于处理软件版权保护的代码,包括涉及版权保护 的Java类和非Java程序模块;

摘要信息提取模块:用于在软件完成开发并在发布前提取软件版权保护 模块的第一摘要信息和在运行时提取软件版权保护模块的第二摘要信息;

第一摘要信息输出装置:用于将摘要信息提取模块获取的第一摘要信息 输出;

防篡改验证模块:用于将第二摘要信息和第一摘要信息进行比较,确定 软件是否合法;

业务功能模块:用于处理软件业务逻辑的代码。

进一步,如上所述的一种提高Java软件破解难度的装置,将第一摘要信 息输出装置输出的第一摘要信息硬编码到版权验证类中;将防篡改验证模块 嵌入到Java软件的版权验证类中。

进一步,如上所述的一种提高Java软件破解难度的装置,防篡改验证模 块进行第一摘要信息和第二摘要信息比较时,若第一摘要信息和第二摘要信 息相同则说明软件版权保护模块在发布后没有被篡改,软件合法;若不同说 明软件版权保护模块被篡改,软件非法。

再进一步,如上所述的一种提高Java软件破解难度的装置,摘要信息提 取模块所提取的第一摘要信息和第二摘要信息是通过代码混淆模块混淆过的 Java类和非Java程序模块的摘要信息。

基于上述提高Java软件破解难度的方法及装置的一种提高破解难度的 Java软件版权验证的方法,包括以下步骤:

(1)启动应用系统,加载第四Jar文件;

(2)调用摘要信息提取模块,提取软件运行时软件版权保护模块的摘要信 息得到第二摘要信息;

(3)将第二摘要信息和硬编码到版权验证类中的第一摘要信息进行比 较,如果第二摘要信息与第一摘要信息相同,则说明软件版权保护模块未被 篡改,软件合法;如果不同则说明软件版权保护模块被修改,软件非法。

进一步,如上所述的一种软件版权验证的方法,步骤(1)中,通过程序 入口中Java类的启动方法启动应用系统。

本发明的效果在于:本发明所述的一种提高Java软件破解难度的方法及 装置,和版权验证方法,通过将版权保护模块的数字摘要信息硬编码到版权 验证类中,以及将防篡改验证模块嵌入到Java软件的版权验证类中;可以识 别软件发布后是否有人篡改软件版权保护模块,提高了Java软件的破解的难 度,加大了Java软件的版权保护力度。

附图说明

图1为本发明提高Java软件破解难度的原理示意图;

图2为本发明提高Java软件破解难度装置的结构框图;

图3为本发明提高Java软件破解难度方法的工作流程图;

图4为本发明软件运行时验证软件是否合法的软件版权验证方法的工作 流程图;

图5为实施例中提高Java软件破解难度的装置示意图。

具体实施方式

本发明提供了一种提高Java软件破解难度的方法及装置,和基于该方法及 装置的Java软件版权验证方法,通过本发明所述的方法及装置可以提高Java 软件的破解难度,并识别软件发布后是否有人篡改软件版权保护模块,加大了 Java软件的版权保护力度。其原理示意图如图1所示:通过提取混淆后的软件 版权保护模块的数字摘要信息得到第一摘要信息,并将第一摘要信息硬编码到 版权验证类中作为版权验证类的常量数据。再次对软件版权保护模块进行代码 混淆后得到最终的Jar文件作为最终发布的Jar文件。通过这种方法,在版权 验证类执行关键操作处就可以通过提取运行时的软件版权保护模块的数字摘要 信息得到第二摘要信息,通过将第二摘要信息和版权验证类中的第一摘要信息 进行比较,就可以确定软件版权保护模块是否进行过修改,也确定软件的使用 是否合法,提高软件的版权保护力度。

下面结合说明书附图与具体实施方式对本发明做进一步的详细说明。

图2示出了本发明一种提高Java软件破解难度装置的结构框图,由图中 可以看出,该装置主要包括:

软件版权保护模块11:用于处理软件版权保护的代码,包括涉及版权保 护的Java类和非Java程序模块;

代码混淆模块12:用于对编译后的Java软件的非程序入口类及非入口 方法进行代码混淆;

业务功能模块13:用于处理软件业务逻辑的代码;

摘要信息提取模块14:用于在软件完成开发并在发布前提取软件版权保 护模块的第一摘要信息和在运行时提取软件版权保护模块的第二摘要信息;

第一摘要信息输出装置15:用于将摘要信息提取模块获取的第一摘要信 息在显示设备输出;

防篡改验证模块16:用于将第二摘要信息和第一摘要信息进行比较,确 定软件是否合法。

为了便于维护以及业务功能模块开发人员和软件版权保护模块开发人员 的工作分工,软件开发商会将业务逻辑代码和读取授权信息本身的代码尽量 分离,减少耦合。业务逻辑代码保存于业务功能模块,软件版权保护代码保 存于软件版权保护模块,其中本发明中的软件版权保护模块中包含代码混淆 后的涉及版权保护的Java类和非Java程序模块。通过将摘要信息提取模块 14提取的开发阶段的第一摘要信息硬编码到业务功能模块13的版权校验类, 将第一摘要信息作为版权验证类的常量信息,然后对源代码再次进行编码和 混淆得到最终发布的Jar文件,在软件运行时,摘要信息提取模块14通过摘 要信息提取模块提取软件版权保护模块的第二摘要信息,通过防篡改验证模 块16(防篡改验证模块16嵌入到Java软件的版权验证类中)将第二摘要信 息和第一摘要信息进行比较,若第二摘要信息和第一摘要信息相同则说明软 件版权保护模块在发布后没有被篡改,软件合法;若不同说明软件版权保护 模块被篡改,软件非法。摘要信息提取模块14所提取的第一摘要信息和第二 摘要信息是通过代码混淆模块12混淆过的Java类和非Java程序模块的摘要 信息。

图3示出了基于上述提高Java软件破解难度装置的一种提高Java软件 破解难度方法的工作流程图,该方法主要包括以下步骤:

步骤21、将软件版权保护模块所涉及的Java类和非Java程序模块设置 为摘要信息提取模块的提取对象。

步骤22、编译源代码并打包成第一Jar文件;

源代码包括软件业务功能模块的业务逻辑代码和软件版权保护模块的软件 版权保护代码。

步骤23、设置Jar文件的代码混淆选项,设定Jar文件的程序入口类及程 序入口方法;

程序入口包括业务功能模块必须公开的类和方法,第一摘要信息输出装置 对应的Java类及其启动方法。例如,对于独立运行的Java文件,程序入口为 Startup类,根据代码混淆规范,该类以及该类的main方法不能混淆;另外第 一摘要信息输出装置对应的Sign类及其main方法,提取第一摘要信息输出装 置需要,也不能混淆,在代码混淆装置中将这两个类设置为程序入口类,将这 两个类的main方法设置为程序入口方法;未被设定为程序入口类或程序入口方 法的类和方法为非程序入口。

步骤24、混淆第一Jar文件得到第二Jar文件;

通过代码混淆模块采用步骤S23所设置的代码混淆选项对第一Jar文件的 非程序入口进行代码混淆并打包成第二Jar文件。

步骤25、执行第二Jar文件的摘要信息提取模块得到第一摘要信息;

执行第二Jar文件的摘要信息提取模块所得到的第一摘要信息为软件版权 保护模块中混淆过的Java类和非Java程序模块的数字摘要信息,并将第一摘 要信息通过第一摘要信息输出装置输出。如果步骤S21中摘要信息提取模块的 提取对象是Java类,步骤4中摘要信息提取模块提取到的第一摘要信息是所述 Java类混淆后相应的Java类的摘要信息。

步骤26、将第一摘要信息硬编码到版权验证类;

将第一摘要信息硬编码到Java软件的版权验证类中作为版权验证类的常量 信息,将防篡改验证模块嵌入到Java软件的版权验证类中。通常软件会有很多 的核心业务类,核心业务类是指软件系统处理核心业务的类,脱离核心业务类 软件将不能正常运行。从核心业务类中选择一个或多个类作为版权验证类,在 本发明中,一般选择核心业务的Java类中代码量大、业务逻辑复杂的一个或多 个Java类作为版权验证类,这种Java类混淆后反编译代码难以读懂,对这种 类进行修改解除防篡改验证功能然后再次编译运行理论上不能实现。

步骤27、再次编译源代码并打包成第三Jar文件;

步骤S26中修改了软件的源代码,将第一摘要信息作为常量信息硬编码到 了版权验证类中,对修改后的源代码再次进行编译并打包成第三Jar文件;

步骤28、混淆第三Jar文件得到第四Jar文件。

采用步骤S23设置的代码混淆选项对第三Jar文件的非程序入口进行混淆 并打包成第四Jar文件,并将第四Jar文件作为最终发布的Jar文件。

图4示出了基于上述提高Java软件破解难度装置和方法的一种软件版权 验证方法的工作流程图,该验证方法主要包括以下步骤:

步骤31:启动应用系统,加载第四Jar文件;

通过执行程序入口类中Java类的启动方法启动应用系统,并加载第四Jar 文件。

步骤32:提取软件版权保护模块的第二摘要信息;

调用摘要信息提取模块,提取软件版权保护模块的摘要信息得到第二摘 要信息;软件版权保护模块的摘要信息是指软件版权保护模块的Java类和非 Java程序模块的摘要信息。

步骤33:比较第二摘要信息和第一摘要信息,确定软件是否合法。

将第二摘要信息和版权验证类中的第一摘要信息进行比较,如果第二摘要 信息与第一摘要信息相同,则说明软件版权保护模块未被篡改,软件合法;如 果不同则说明软件版权保护模块被修改,软件非法。

下面通过实施例对本发明进行进一步详细的说明。

实施例

本发明实施例以一个带main函数的能够独立运行的Java软件进行说明。

图5是根据本发明实施例的装置示意图。该应用系统的装置包括:

软件版权保护模块51,此实施例由三个Java类和非Java程序模块组成, Java类包括Global类511、DogMonitor类513和License类515,非Java程 序模块为License.dll动态库517。Global类511用于保存系统运行过程需要 的全局数据,将授权信息也保存在Global类中;DogMonitor类513通过调用 License类定期(如每隔半小时)检查保存在加密狗或硬盘的软件授权信息、并将 授权信息传递给Global类;License类515通过JNI调用动态库License.dll 中的函数获取软件授权信息。License.dll动态库517用于访问计算机指纹信息, 对比计算机指纹信息以及保存在硬盘的授权文件是否一致来决定软件是否被授 权,该装置也可以直接读取硬件加密狗判断软件是否被授权。

防篡改验证模块52,用于识别软件发布后是否被篡改,如果没有篡改,则 为正版软件;否则为破解软件。

本实施例软件发布前对软件追加版权保护功能的处理过程。包括以下步骤:

步骤1、将软件版权保护模块涉及的Java类Global.class、 DogMonitor.class和License.class以及非Java程序模块License.dll设置为 摘要信息提取模块的提取对象;

步骤2、将源代码即软件的业务功能模块代码连同软件版权保护模块的代码 一起编译并打包成第一Jar文件;

步骤3、设置Jar文件的代码混淆选项,该实施例为独立运行的Java程序, 程序入口为Startup类,根据代码混淆规范,该类及该类的main方法不能混淆; 另外第一摘要信息输出装置对应的Sign类及该类的main方法,执行第一摘要 信息输出装置的程序入口,也不能混淆;在代码混淆装置中将这两个类设置为 程序入口类,将这两个类的main方法设置为程序入口方法;

步骤4、采用所述代码混淆选项对第一Jar文件进行代码混淆并打包成第二 Jar文件;

步骤5、执行第二Jar文件中的第一摘要信息输出装置,得到步骤1设置的 Java类Global.class、DogMonitor.class和License.class混淆后相应类以及 非Java程序模块License.dll的数字摘要信息,此处为CRC码,为16进制的 整数“0xfea9f3a8L”,并在屏幕打印该信息。

步骤6、修改软件源代码,将所述第一摘要信息“0xfea9f3a8L”作为常量 信息硬编码到版权验证类HTKernel中,将防篡改验证模块嵌入到该Java软件 的版权验证类中;

private final int FLAG=0xfea9f3a8L;

步骤7、重复步骤2将业务功能模块代码连同软件版权保护模块的代码一起 编译并打包成第三Jar文件;

步骤8、采用步骤3所设置的代码混淆选项对第三Jar文件进行代码混淆得 到混淆后的第四Jar文件,将第四Jar文件作为最终发布的Jar文件。

本实施例步骤4和步骤8混淆时没有出现类的变化,没有追加新类,没有 删除类并且没有修改过类名,因此两次混淆前后类的对应关系是固定的。其区 别是步骤8中版权验证类HTKernel混淆前后的类中FLAG值是步骤6中设定的 值,即为“0xfea9f3a8L”。

本实施例选择代码量大、处理核心业务逻辑的HTKernel作为版权验证类, 在HTKernel类嵌入防篡改验证模块,这种Java类混淆后反编译代码难以读懂, 对这个类进行修改解除防篡改验证功能然后再次编译运行理论上不可实现。

本实施例软件未破解正常运行时软件版权验证的过程。包括以下步骤:

步骤1、用户通过加载第四Jar文件,执行Startup类启动应用系统,;

步骤2、应用系统在执行到防篡改验证模块所嵌入的版权验证类HTKernel 进行关键业务处理时调用摘要信息提取模块,提取版权保护模块的摘要信息得 到第二摘要信息“0xfea9f3a8L”;

步骤3、将第二摘要信息“0xfea9f3a8L”和硬编码进版权验证类HTKernel 的第一摘要信息“0xfea9f3a8L”进行比较,发现第二数字摘要信息和第一数字 摘要信息完全相同,说明版权保护模块在发布后没有被篡改,软件合法。

本实施例软件版权保护模块被篡改后运行时软件版权验证的过程,只要对 Global.class、DogMonitor.class和License.class混淆后对应的类的任何一 个做了修改,或者对非Java程序模块License.dll做过修改,均不能通过防篡 改验证。包括以下步骤:

步骤1、用户通过加载第四Jar文件,执行Startup类启动应用系统;

步骤2、应用系统在执行到防篡改验证模块所嵌入的版权验证类HTKernel 进行关键业务处理时调用摘要信息提取模块,提取版权保护模块的摘要信息得 到第二摘要信息“0x9339b91cL”;

步骤3、将第二摘要信息“0x9339b91cL”和硬编码进版权验证类HTKernel 的第一摘要信息“0xfea9f3a8L”进行比较,发现第二数字摘要信息和第一数字 摘要信息不相同,说明版权保护模块在发布后被篡改,软件非法。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本 发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要 求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号