对JAVA软件进行授权保护的方法及系统与流程

文档序号:16249737发布日期:2018-12-11 23:54阅读:1142来源:国知局
对JAVA软件进行授权保护的方法及系统与流程

本发明涉及计算机应用技术领域,具体而言,涉及对java软件进行授权保护的方法及系统。

背景技术

java不依赖特定的操作系统和平台,具有一次编写,各平台均可以运行的特点。随着计算机技术的发展,java已经由开始的桌面应用的开发语言发展成为后端服务器应用的主要开发语言,现在大量的软件使用j2ee(java2platformenterpriseedition,java2平台企业版)体系架构进行开发。但是因为java平台的开源特点和为了java能够跨平台运行而生成的中间态class文件,导致java类应用很难被授权保护,经常导致java源码被抄袭或授权被破解的情况。

现有技术中,使用外部c/c++程序进行授权校验或将class文件进行加密的方法对java软件进行授权保护。使用外部c/c++程序进行授权校验的方法一般是使用服务器的硬盘号、网卡mac(mediaaccesscontrol,物理地址)对软件进行加密,这种方法需要为软件的各种平台开发对应的授权校验程序,在一定程度上牺牲了java的跨平台性。同时,通常情况下,使用c/c++程序进行授权校验需要获取硬盘序号等系统信息,这种获取需要软件应用为高权限,但是一般软件应用都是低权限或者是虚拟化平台,无法获取真实的硬盘和网卡mac等信息,从而导致使用这种方法无法对java软件进行授权保护。

class文件使由java编译器生成的一种8字节的二进制流文件,其中的各个数据项按顺序紧密的从前向后排列,相邻的项之间没有间隙,这样使得class文件非常紧凑,体机轻巧,可以被jvm(javavirtualmachine,java虚拟机)快速的加载至内存。标准的class文件通过java反编译工具可以很容易恢复出源码。

将class文件进行加密的方法是将class文件进行加密,使用特定的classloader将加密的class文件进行解密后加载到jvm中。该方法中,加密的class文件容易被发现,并且因为classloader本身是不加密的,class文件很容易被classloader破解。将破解后的class文件输出,然后再进行反编译分析,很容易实现java软件的授权破解。

目前常见的java软件保护方法主要是基于对java进行加密、代码混淆,并且将代码的解密部分采用.dll或.so本地动态库的方法进行。但是,一旦使用本地动态库,java应用的跨平台性就被大大削弱,同时,维护大量平台的本地库文件成本高昂。



技术实现要素:

为防止java软件的源码被抄袭和破解,同时保持java软件的跨平台性,本发明提供了一种对java软件进行授权保护的方法及系统。本发明所述的方法使用纯java语言,使用两种机制进行双重认证。在软件的主体应用程序中插入第一授权校验模块,用于进行第一授权校验,同时引入类似木马的技术,在软件的公共包中随机插入代码混淆后的授权校验生成模块,用于进行第二授权校验。第二授权校验在过期后不进行任何提示,并且在软件启动时立刻运行,加大了软件破解的难度。

根据本发明实施例的第一方面,提供一种对java软件进行授权保护的方法,所述方法包括:在软件的主体应用程序中插入第一授权校验模块,进行第一授校验;在软件的公共包中插入授权校验生成模块,进行第二授权校验。

在本发明的一些实施方式中,所述在软件的公共包中插入授权校验生成模块包括:随机从软件的公共包中选取第一公共包;从所述第一公共包中获取class文件;从所述获取的class文件中随机提取第一class文件;将所述第一class文件进行反编译,获得java源码;在所述java源码中插入授权校验生成模块的源码;将所述插入了授权校验生成模块源码的java源码进行编译,生成第二class文件;将包括所述第二class文件的class文件打包,获得插入了授权校验生成模块的第二公共包。

在本发明的一些实施方式中,在软件的公共包中插入授权校验生成模块还包括通过下述方法获得所述授权校验生成模块:根据授权校验逻辑获得授权校验逻辑代码段;使用随机函数将所述授权校验逻辑代码段中的常量和函数名随机拆分为多个静态变量,进行代码混淆;将所述混淆后的代码使用java的static块中线程进行独立封装,获得所述授权校验生成模块。

在本发明的一些实施方式中,所述授权校验逻辑包括:获取软件的本地授权文件;使用所获取的本地授权文件进行授权校验;判断授权是否失效,若授权失效不进行任何提示,动态调用java的退出函数直接退出系统。

在本发明的一些实施方式中,通过连接远程校验服务器,使用所获取的本地授权文件进行授权校验。

根据本发明实施例的第二方面,提供一种用于对java软件进行授权保护的系统,所述系统包括:软件主体应用程序模块;第一授权校验模块,所述第一授权校验模块包含在软件的主体应用程序中,用于进行第一授权校验;软件的公共包;授权校验生成模块,所述授权校验生成模块被插入软件的公共包中,用于进行第二授权校验。

在本发明的一些实施方式中,使用以下方式将所述授权校验生成模块插入到软件的公共包中:随机从软件的公共包中选取第一公共包;从所述第一公共包中获取class文件;从所述获取的class文件中随机提取第一class文件;将所述第一class文件进行反编译,获得java源码;在所述java源码中插入授权校验生成模块的源码;将所述插入了授权校验生成模块源码的java源码进行编译,生成第二class文件;将包括所述第二class文件的class文件打包,获得插入了授权校验生成模块的第二公共包。

在本发明的一些实施方式中,所述授权校验生成模块使用以下方法获得:根据授权校验逻辑获得授权校验逻辑代码段;使用随机函数将所述授权校验逻辑代码段中的常量和函数名随机拆分为多个静态变量,进行代码混淆;将所述混淆后的代码使用java的static块中线程进行独立封装,获得所述代码混淆后的授权校验生成模块。

在本发明的一些实施方式中,所述授权校验逻辑包括:获取软件的本地授权文件;使用所获取本地授权文件进行授权校验;判断授权是否失效,若授权失效不进行任何提示,动态调用java的退出函数直接退出系统。

在本发明的一些实施方式中,通过连接远程校验服务器,使用所获取的本地授权文件进行授权校验。

本发明实施例的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现本发明实施例所述的任一种对java软件进行授权保护的方法。

通过本发明实施例提供的对软件进行授权保护的方法及系统,能够避免授权校验代码被发现并修改,同时能够避免使用平台硬件的系统信息和本地动态库,能够在不牺牲java跨平台性的情况下进行简单且低成本的有效授权。

附图说明

图1是根据本发明实施例对java软件进行授权保护的方法流程图;

图2是根据本发明实施例在软件的公共包中插入授权校验生成模块的流程图;

图3是根据本发明实施例获得所述授权校验生成模块的流程图;

图4示出了根据本发明实施例的对java软件进行授权保护的系统结构示意图。

具体实施方式

以下结合附图和具体实施方式对本发明的各个方面进行详细阐述。其中,众所周知的模块、单元及其相互之间的连接、链接、通信或操作没有示出或未作详细说明。并且,所描述的特征、架构或功能可在一个或一个以上实施方式中以任何方式组合。本领域技术人员应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。还可以容易理解,本文所述和附图所示的各实施方式中的模块或单元或处理方式可以按各种不同配置进行组合和设计。

图1是根据本发明实施例对java软件进行授权保护的方法流程图。参照图1,本发明实施例所述的对软件进行授权保护的方法包括:

101:在软件的主体应用程序中插入第一授权校验模块;

102:在软件的公共包中插入授权校验生成模块。

具体而言,将第一授权校验模块包含在软件的主体应用程序中,所述第一授权校验模块用于进行第一授权校验。在软件的公共包中插入授权校验生成模块,所述授权校验生成模块用于动态生成第二授权校验的程序代码,对软件进行第二授权校验。由于是在软件的公共包中插入的授权校验生成模块,所以授权校验生成模块只在公共包中的类加载时运行一次,在软件启动时立刻运行。一旦授权失效,软件将无法启动。

在正常破解时,破解人员会对软件主体应用的jar包(软件主体应用程序的一种压缩文件)进行分析,通过关键字搜索等进行授权模块的定位,然后对定位的授权模块进行破解。因此,在软件的主体应用程序中插入的第一授权校验模块,用于引导破解人员对主体应用中的授权校验模块进行定位,从而隐藏用于第二授权校验的授权校验生成模块,加大破解难度。

本发明实施例所述的处理102也可以在处理101之前进行,对所述处理101和处理102的顺序本发明不做限定。所述第一授权校验模块可以是根据域名或ip地址进行的web端license授权校验,如进行本地日期与授权日期的校验、采用连接远程校验服务器进行的校验,也可以是其他的校验方法。

图2是根据本发明实施例在软件的公共包中插入授权校验生成模块的流程图。参照图2,在软件的公共包中插入授权校验生成模块的包括:

201:随机从软件的公共包中选取第一公共包;

202:从所述第一公共包中获取class文件;

203:从所述获取的class文件中随机提取第一class文件;

204:将所述第一class文件进行反编译,获得java源码;

205:在所述java源码中插入授权校验生成模块的源码;

206:将所述插入了授权校验生成模块源码的java源码进行编译,生成第二class文件;

207:将包括所述第二class文件的class文件打包,获得插入了授权校验生成模块的第二公共包。

具体而言,在本发明的一些实施例中,软件的公共包为jar包,使用jar包选择器从软件的公共包中随机选择一个jar包,所选择的jar包即为第一公共包;然后对所获得的第一公共包解压,获得class文件;从获得的class文件中随机选取一段class,然后对所选取的class进行反编译,获得所选取的class的java源码;在获得的java源码中,插入授权校验生成模块的源码;将插入授权校验生成模块的源码的所述java源码重新编译生成class后,将包含所述编译生成class的class文件重新打包,完成将授权校验生成模块插入到了软件的公共包中。

本发明实施例随机在软件的公共包中插入授权校验生成模块,在软件的公共包加载时,授权校验生成模块运行动态生成授权校验代码,以对软件进行第二授权校验。由于授权校验生成模块随机插入到了软件的公共包中,授权校验代码为授权校验生成模块动态生成的,因此,授权校验代码不容易被破解人员定位找到,加大了软件保护的强度。

图3示出了根据本发明实施例获得所述授权校验生成模块的流程图,如图3所述,获得授权校验生成模块包括:

301:根据授权校验逻辑获得授权校验逻辑代码段;

在本发明的一些实施方式中,所述授权校验逻辑包括:获取软件的本地授权文件;使用所获取的本地授权文件进行授权校验,所述授权校验可以是通过连接远程服务器进行的授权校验;判断授权是否失效,若授权失效不进行任何提示,动态调用java的退出函数直接退出系统。例如,下面示例性示出了本发明的一些实施方式的授权校验逻辑代码段:

stringlangstate=“lang.”;stringexstate=“ex”;

stringlicensee=“xxxxxxxxx”;//序列号

stringresult=checklicense(licensee);//验证license采用外呼验证的服务器地址,进行本地日期与时间校验

if(“failed”.equals(result)){

class.forname(“java.”+langstate+“system”).getmethod(exstate+“it”,newclass[]{integer.type}).invoke(null,newobject[]{integer.valueof(0)});//调用java的退出函数进行直接退出

}

302:使用随机函数将所述授权校验逻辑代码段中的常量和函数名随机拆分为多个静态变量,进行代码混淆;

在本发明的一些实施方式中,获得授权校验逻辑代码后,使用随机函数将代码中的常量和函数名随机拆分为多个静态变量,使授权校验逻辑代码转换为功能上等价但是难以阅读和理解的代码,即进行代码混淆。通过使用这种方法,能够进一步加大软件的破解难度。

303:将所述混淆后的代码使用java的static块中线程进行独立封装,获得所述授权校验生成模块。

具体而言,进行代码混淆后,使用java的块中线程对代码进行独立封装,使得所述授权校验生成模块能够动态生成授权校验代码,使所述授权校验代码难以被破解人员找到。并且,所述验证授权代码生成模块在软件启动时立刻运行并停止主程序,在校验时发现授权失效不进行任何提示,直接退出系统。一旦授权失效,系统无法进行重新启动。以这种方式,加强对软件的保护。

下面给出了验证授权代码生成模块的代码段示例。

本领域技术人员应当理解,上述实施例所述的方法可以编程为计算机程序,并存储在计算机可读存储介质上,当所述计算机程序被处理器执行时实现上述操作、步骤或处理。

本发明实施例的第二方面,提供一种对java进行授权保护的系统,图4示出了根据本发明实施例的对java软件进行授权保护的系统结构示意图。如图4所示,所述系统包括:软件主体应用程序模块41,第一授权校验模块42,所述第一授权校验模块包含在软件的主体应用程序中,用于进行第一授权校验;软件的公共包43;授权校验生成模块44,所述授权校验生成模块被插入软件的公共包中,用于进行第二授权校验。

在本发明的一些实施方式中,通过以下方式将所述授权校验生成模块插入软件的公共包中:随机从软件的公共包中选取第一公共包;从所述第一公共包中获取class文件;从所述获取的class文件中随机提取第一class文件;将所述第一class文件进行反编译,获得java源码;在所述java源码中插入授权校验生成模块的源码;将所述插入了授权校验生成模块源码的java源码进行编译,生成第二class文件;将包括所述第二class文件的class文件打包,获得插入了授权校验生成模块的第二公共包。

在本发明的一些实施方式中,所述授权校验生成模块使用以下方式获得:根据授权校验逻辑获得授权校验逻辑代码段;使用随机函数将所述授权校验逻辑代码段中的常量和函数名随机拆分为多个静态变量,进行代码混淆;将所述混淆后的代码使用java的static块中线程进行独立封装,获得所述代码混淆后的授权校验生成模块。

在本发明的一些实施方式中,所述授权校验生成模块中的授权校验逻辑包括:获取软件的本地授权文件;使用所获取的本地授权文件进行授权校验;判断授权是否失效,若授权失效则不进行任何提示,动态调用java的退出函数直接退出系统。

本发明所述的验证授权代码生成模块在软件启动时立刻运行并且停止主程序。通过本发明实施例所述的对软件进行授权保护的方法和系统,能够为软件提供明暗结合的双线授权认证,防止授权校验代码被发现并修改,加大软件的授权破解难度。同时本发明所述的方法和系统使用纯java实现,避免了使用本地动态库和使用平台的硬件信息,能够实现简单便捷的跨平台java软件授权保护。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,智能手机或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本发明说明书中使用的术语和措辞仅仅为了举例说明,并不意味构成限定。本领域技术人员应当理解,在不脱离所公开的实施方式的基本原理的前提下,对上述实施方式中的各细节可进行各种变化。因此,本发明的范围只由权利要求确定,在权利要求中,除非另有说明,所有的术语应按最宽泛合理的意思进行理解。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1