一种软件授权许可实现方法和装置与流程

文档序号:16755409发布日期:2019-01-29 17:18阅读:493来源:国知局
一种软件授权许可实现方法和装置与流程

本发明涉及软件授权技术领域,具体涉及一种软件授权许可实现方法和装置。



背景技术:

在如今互联网以及大数据应用高速发展的时期,软件产品已然成为计算机领域的核心工具,在琳琅满目的软件产品世界中软件保护思想逐渐引起软件发行方的重视,软件保护的全面实施有利于软件行业的健康发展,有利于推动信息化建设。

目前,一种常用的对软件保护的方法即为license绑定法,在制作软件时将license与终端信息进行绑定,软件启动时通过license解析模块来获取license信息进行匹配验证。具体为:软件分为客户端和服务端两部分,服务端启动时需获取license绑定的信息与终端本地信息进行匹配,若匹配成功则服务端启动成功,客户端顺利连接到服务端,软件正常使用;若匹配不成功则服务端启动失败,客户端无法连接到服务端,软件无法使用。然而,license解析模块采用java语言进行开发,而java类文件容易被反编译,窃密者容易通过反编译类文件来获取license文件信息,使得license文件的安全保护无法得到有效保证。

鉴于此,克服上述现有技术所存在的缺陷是本技术领域亟待解决的问题。



技术实现要素:

本发明需要解决的技术问题是:

在传统的软件授权方法中,java类文件容易被逆向破译,窃密者容易通过反编译类文件来获取license文件信息,使得license文件的安全保护无法得到有效保证。

本发明通过如下技术方案达到上述目的:

第一方面,本发明提供了一种软件授权许可实现方法,软件被封装为安装文件时,对license解析模块以及license文件自身进行双重加密;制作license时,将终端相关信息绑定到license中;方法包括:

软件启动进入正常服务加载前,对所述license解析模块以及所述license文件自身进行解密;

使用解密后的license解析模块读取license文件,进而获取license绑定的终端相关信息;

将license绑定的终端相关信息与终端本地的相关信息进行匹配,若匹配则软件的服务加载成功。

优选的,绑定到license中的所述终端相关信息具体是在用户购买license时所提交的信息中携带的,则所述对所述license解析模块以及所述license文件自身进行解密具体为:终端中运行所述软件时,加载终端本地用于解密所述license解析模块以及所述license文件自身的解密模块,进而完成所述license解析模块以及所述license文件自身的解密。

优选的,所述对所述license解析模块以及所述license文件自身进行解密,具体包括:

软件启动并连接远端服务器,向远端服务器发送携带被加密的license文件的激活请求;

远端服务器解密license文件以获取license文件中携带的终端相关信息,并在完成所述终端相关信息的权限验证后,向运行所述软件的终端返回解密指令;

所述终端接收解密指令后加载本地的解密模块,进而完成所述license解析模块以及所述license文件的解密。

优选的,软件在被编译成可安装文件时,记录有用于远端服务器侧的与所述license解析模块相匹配的唯一解码秘钥;则所述对所述license解析模块以及所述license文件自身进行解密,具体包括:

软件启动并连接远端服务器,向远端服务器发送携带被加密的license解析模块和被加密的license文件的激活请求;

在远端服务器侧完成所述license解析模块以及所述license文件的解密,以便读取license文件信息和完成所述匹配过程,并将结果返回给运行所述软件的终端。

优选的,所述终端相关信息包括产品类型、产品版本、操作系统、过期日期以及物理网卡地址。

优选的,所述将license绑定的终端相关信息与终端本地的相关信息进行匹配,若匹配则软件的服务加载成功,具体包括:

获取license绑定的产品类型,若类型为企业版,则开放产品的各功能模块;若类型为试用版,则限制产品的部分指定功能模块;

获取license绑定的产品版本,将获取到的产品版本与该产品适用的版本进行匹配,验证license是否有效;

获取license绑定的操作系统,将获取到的操作系统版本与终端本地操作系统版本进行匹配,验证license是否有效;

获取license绑定的过期日期,将获取到的过期日期与终端本地日期进行比较,验证license是否有效;

获取license绑定的物理网卡地址,将获取到的物理网卡地址与终端本地物理网卡地址进行匹配,验证license是否有效;

若上述各项匹配完成后均得到license有效,则服务加载成功,软件正常使用;若任一项匹配不成功,得到license无效,则软件无法使用。

优选的,所述获取license绑定的过期日期,将获取到的过期日期与终端本地日期进行比较,验证license是否有效,具体存在以下情况:

若获取到的过期日期小于终端本地日期,则此license无效,服务无法启动;

若获取到的过期日期大于终端本地日期,通过time文件获取软件最近使用时间;若软件最近使用时间小于终端本地日期,则此license有效;若软件最近使用时间大于终端本地日期,则此license无效,服务无法启动;

其中,所述time文件为软件安装后在系统盘生成的记录软件最近使用时间的文件。

优选的,软件安装完成后,将当前安装的时间写入所述time文件,并使用des算法加密;每次在软件服务启动成功后,更新所述time文件中的软件最近使用时间;其中,在获取软件最近使用时间前,先使用des算法对所述time文件进行解密。

优选的,所述time文件的存储方式时具体为:

针对所述time文件制作多个time文件的副本文件;

将所述time文件与所述副本文件设置为隐藏文件,并分别存储在系统不同路径下;

对所述time文件与所述副本文件的文件内容使用des进行加密。

第二方面,本发明还提供了一种软件授权许可实现装置,用于实现上述第一方面所述的软件授权许可实现方法,所述装置包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成上述第一方面所述的软件授权许可实现方法中所述终端的功能。

本发明的有益效果是:

本发明提供的一种软件授权许可实现方法和装置中,采用license加密模块对license解析模块进行加密,同时对license文件自身进行加密,通过双重加密增大了直接反编译java类文件的难度,实现了对license文件一定程度的安全控制;同时,在软件启动后获取license绑定的过期日期时,软件安装后还生成记录软件最近使用时间的time文件,每次软件服务启动成功后进行时间更新,避免了通过修改系统时间来达到重复使用license的目的。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种软件授权许可实现方法的流程图;

图2为图1中步骤30的具体实现方法流程图;

图3为本发明实施例提供的一种软件授权许可实现系统的结构示意图;

图4为图3中信息匹配模块的具体结构示意图;

图5为本发明实施例提供的一种软件授权许可实现装置的架构图。

【具体实施方式】

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。

实施例1:

本发明实施例提供了一种软件授权许可实现方法,首先,在软件被封装为安装文件时,通过license加密模块对license解析模块进行加密,在license制作过程中对license文件自身进行加密,加密算法均为des算法;通过双重加密增大了直接反编译java类文件的难度,实现了对license文件一定程度的安全控制。其次,在制作license时,将终端相关信息绑定到license中。所述终端即为运行软件的一端,也就是购买license的用户一侧,终端可以是服务器也可以是pc,而将出售license的一端记为远端服务器。

在本发明实施例中,所述终端相关信息包括产品类型、产品版本、操作系统、过期日期以及物理网卡地址,在制作license时分别绑定上述各项信息。其中,所述产品类型通常分为企业版和试用版,若类型为企业版,则开放产品的各功能模块;若类型为试用版,则限制产品的部分指定功能模块。所述产品版本即为软件的各种不同版本,比如1.0版本、2.0版本,产品升级后便会产生新的版本。所述操作系统通常包括windows、linux、unix、android等。所述过期日期规定了软件产品的使用期限。在本实施例的基础上,还可根据实际应用需要绑定终端的其他相关信息,而不限定于上述5种信息,此处不再赘述。在终端用户购买license时会向所述远端服务器提交信息,而提交的信息中携带有所述终端相关信息,进而可用于与所述license进行绑定。

如图1所示,在本发明实施例中,将license进行双重加密并进行信息绑定后,在应用软件时,对软件授权许可的实现方法具体包括以下步骤:

步骤10,软件启动进入正常服务加载前,对所述license解析模块以及所述license文件自身进行解密。

由于前面进行了双重加密,此时相应地需要进行双重解密,增大了逆向破译代码来直接获取license信息的难度。所述license解析模块内部设置有相应的解密模块,在每次软件启动后、进入正常服务加载之前,先通过des算法对license解析模块进行解密,再通过license解析模块中的解密模块对所述license文件自身进行解密。java运行时装入字节码的机制隐含地意味着可以对字节码进行修改,java虚拟机(javavirtualmachine,简写为jvm)每次装入类文件时都需要一个classloader,具体为:所述classloader负责把新的类装入正在运行的jvm,jvm给所述classloader一个包含了待装入类名字的字符串,然后由所述classloader找到类文件,装入原始数据后转换成一个class对象。通过定制classloader,可以在类文件执行之前对类文件进行修改,此处的用途就是在类文件装入之时进行解密,因此可将classloader看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。同时,license解析模块加密后就无法使用java的classloader去加载类,从而导致无法获取license信息的内容,此时需要使用自定义的classloader先解密类,再加载类,这种方式大大增加了反编译的难度。

在本发明实施例中,所述方法是在单机环境下实现,所述解密过程在运行软件的终端一侧完成,具体为:终端中运行所述软件时,加载终端本地用于解密所述license解析模块以及所述license文件自身的解密模块,进而完成所述license解析模块以及所述license文件自身的解密。

步骤20,使用解密后的license解析模块读取license文件,进而获取license绑定的终端相关信息。所述license解析模块用于读取license文件信息,在进行解密后,即可获取license绑定的产品类型、产品版本、操作系统、过期日期以及物理网卡地址信息。

步骤30,将license绑定的终端相关信息与终端本地的相关信息进行匹配,若匹配则软件的服务加载成功。将所述步骤20中获取到的license绑定的产品类型、产品版本、操作系统、过期日期以及物理网卡地址,分别与对应的终端本地信息进行匹配,若全部匹配成功则服务端启动成功,客户端顺利连接到服务端,软件正常使用。

本发明提供的一种软件授权许可实现方法中,采用license加密模块对license解析模块进行加密,同时对license文件自身进行加密,通过双重加密增大了直接反编译java类文件的难度,实现了对license文件一定程度的安全控制。

参考图2,在本发明实施例中,获取license信息进行匹配时,所述步骤30具体包括以下步骤:

步骤301,获取license绑定的产品类型,若类型为企业版,则开放产品的各功能模块;若类型为试用版,则限制产品的部分指定功能模块。关于试用版具体可使用哪些功能模块,而哪些功能模块被限制无法使用,可根据具体的软件产品来确定。

步骤302,获取license绑定的产品版本,将获取到的产品版本与该产品适用的版本进行匹配,验证license是否有效。假如该产品只能适用于2.0版本,而获取到的产品版本为1.0,则该license不是有效的license,服务无法启动,从而避免了产品升级时客户仍可使用上一版本的license启动服务的情况;如果产品版本匹配成功,则该license有效,可继续向下进行匹配。

步骤303,获取license绑定的操作系统,将获取到的操作系统版本与终端本地操作系统版本进行匹配,验证license是否有效。假设终端本地操作系统版本为win7,而获取到的license绑定的操作系统版本为win8,则两个版本不匹配,该license无效,服务无法启动;假设终端本地操作系统版本也为win8,则匹配成功,该license有效,可继续向下进行匹配。

步骤304,获取license绑定的过期日期,将获取到的过期日期与终端本地日期进行比较,验证license是否有效。具体存在以下情况:

第一,若获取到的过期日期小于终端本地日期,则此license无效,服务无法启动。假设获取到的过期时间为2018年7月20日,终端本地日期为2018年7月30日,说明在当前时间(2018年7月30日)下该产品已经过期,因此license无效,服务无法启动。

第二,若获取到的过期日期大于终端本地日期,通过time文件获取软件最近使用时间;若软件最近使用时间小于终端本地日期,则此license有效;若软件最近使用时间大于终端本地日期,则此license无效,服务无法启动。假设获取到的过期时间为2018年7月20日,终端本地日期为2018年7月10日,表面上来看,在当前时间(2018年7月10日)下该产品还未过期,但有可能是为了重复使用license对系统时间进行了篡改;比如,终端本地日期实际为2018年8月5日,产品实际已过期无法使用,但由于将时间篡改到过期日期以前,即2018年7月10日,达到重复使用license的目的。

为了解决上述篡改系统时间的问题,在第二种情况下引入time文件,所述time文件为软件安装后在系统盘生成的记录软件最近使用时间的文件。软件安装完成后,可将当前安装的时间写入所述time文件,并使用des算法加密;每次在软件服务启动成功后,就会更新所述time文件中的内容,即更新软件最近使用时间。因此,当若获取到的过期日期大于终端本地日期时,首先获取所述time文件,并使用des算法对所述time文件进行解密,进而获取软件最近使用时间并与终端本地日期进行比较。假设获取的软件最近使用时间为2018年7月1日,小于终端本地日期2018年7月10日,说明未修改系统时间,则此license有效,可继续向下进行匹配;假设获取的软件最近使用时间为2018年8月1日,大于终端本地日期2018年7月10日,说明系统时间被篡改,则此license无效,服务无法启动,通过这种方法避免了通过修改系统时间来达到重复使用license的目的。

其中,所述time文件的存储方式时具体如下:为防止time文件被用户轻易搜索到及删除,针对所述time文件制作多个time文件的副本文件;将所述time文件与所述副本文件设置为隐藏文件,并分别存储在系统不同路径下,从而增大了用户的搜索难度;同时,对所述time文件与所述副本文件的文件内容使用des进行加密,防止用户修改文件内容。

步骤305,获取license绑定的物理网卡地址,将获取到的物理网卡地址与终端本地物理网卡地址进行匹配,验证license是否有效。若两个物理网卡地址不匹配,该license无效,服务无法启动;若两个物理网卡地址匹配成功,该license有效。若上述各项匹配完成后均得到license有效,则服务启动成功,软件正常使用;若任一项匹配不成功,得到license无效,则软件无法使用。由前面介绍可知,软件分为客户端和服务端两部分,服务端启动时需获取license绑定的信息进行匹配,在本实施例中,只有各项均匹配成功验证license有效,客户端才能顺利连接到服务端,使软件正常使用;若任一项匹配不成功则服务端启动失败,客户端无法连接到服务端,软件无法使用。

结合本发明实施例,还存在一种优选的实现方案,使得所述方法不仅可在单机环境下实现,还可在网络环境下实现,进一步增强对license文件的安全控制。这是考虑到所述license文件有可能被窃密者直接破译获取,而无需在终端经过license解析模块进行读取即可直接获取到license文件信息,因此,此处增加了一道通过远端服务器来验证权限的过程,即由远端服务器通过获取license的信息来验证权限,验证完成后再由终端对license解析模块及license文件自身进行解密。在优选实施例中,对所述license解析模块以及所述license文件自身进行解密的过程具体如下:

首先,软件启动并连接远端服务器,向远端服务器发送携带被加密的license文件的激活请求。其中,所述license中携带有绑定的终端相关信息。

其次,远端服务器解密license文件以获取license文件中携带的终端相关信息,并在完成所述终端相关信息的权限验证后,向运行所述软件的终端返回解密指令。软件启动后先与远端服务器进行连接,由远端服务器一侧接收到激活请求后先对license文件解密,进而可获取license文件中携带的终端相关信息;远端服务器中记录有终端用户购买license时提交的终端相关信息,通过与license文件中携带的终端相关信息进行比较验证,远端服务器可判断当前发送激活请求的终端是否购买过license;如果确认购买过,则远端服务器允许终端进行所述license解析模块以及所述license文件自身的解密,向终端返回相应的允许解密的指令;反之,如果确认当前终端未购买过license,则远端服务器不会开放给终端相应的解密权限,也就是不发送相应的解密指令,无法进行下一步的解密工作。

最后,所述终端接收解密指令后加载本地的解密模块,进而完成所述license解析模块以及所述license文件的解密。经过远端服务器的权限验证后,终端可接收到相应的解密指令,则终端调用解密模块先后对所述license解析模块以及所述license文件自身进行解密,解密完成后方可通过license解析模块读取license文件信息。

结合本发明实施例,还存在另一种优选的实现方案,同样是在网络环境下实现,进一步增强对license文件的安全控制。这是考虑到所述license解析模块以及所述license文件被窃密者破译而获取信息,无需经过终端对license解析模块以及license文件的解密,因此,此处增加了一道通过远端服务器来验证权限的过程,即由远端服务器来解密license文件和license解析模块。其中,软件在被编译成可安装文件时,记录有用于远端服务器侧的与所述license解析模块相匹配的唯一解码秘钥,则在该优选实施例中,对所述license解析模块以及所述license文件自身进行解密的过程具体如下:

首先,软件启动并连接远端服务器,向远端服务器发送携带被加密的license解析模块和被加密的license文件的激活请求。其中,所述license中携带有绑定的终端相关信息。

然后,在远端服务器侧完成所述license解析模块以及所述license文件的解密,以便读取license文件信息和完成所述匹配过程,并将结果返回给运行所述软件的终端。远端服务器中记录有终端用户购买license时提交的终端相关信息,通过与license文件中携带的终端相关信息比较进行验证,远端服务器可判断当前发送激活请求的终端是否购买过license;如果确认购买过,则远端服务器利用所述解码密钥对所述license解析模块进行解密,进而可通过所述license解析模块读取license文件信息,并完成后续匹配过程,匹配完成后再将最终结果反馈至终端。其中,所述结果包括匹配成功和匹配失败,若匹配成功,则软件启动加载成功。如果远端服务器确认当前终端未购买过license,则远端服务器不会进行相应的解密、信息读取和匹配过程,软件无法使用。

在本发明实施例中,选用的加密算法与解密算法均为des算法,但并不用以限制本发明,在此基础上还可根据实际应用场景选择其他算法,比如aes、3des、rsa、dsa、ecc等,此处不再赘述。

本发明实施例中,通过license加密模块对license解析模块进行加密,同时对license文件自身进行加密;在软件启动时首先对license解析模块进行解密,再对license文件自身进行解密,获取license文件信息,通过将license中绑定的相关信息和服务器相关信息进行一一匹配从而达到软件许可控制的目的,通过双重加密,逆向破译license的难度加大。同时,在软件启动后,获取license绑定的过期日期与终端本地日期进行比较时,还引入time文件用于记录软件最近使用时间,每次软件服务启动成功后都会对软件最近使用时间进行时间更新,通过获取软件最近使用时间与终端本地日期进行比较,避免了通过修改系统时间来达到重复使用license的目的。

实施例2:

在上述实施例1的基础上,本发明实施例还提供了一种软件授权许可实现系统,用于实现实施例1所述的软件授权许可实现方法,如图3所示,所述系统包括:

license解析模块1,用于读取license文件的信息。

license加密模块2,用于在软件制作过程中对所述license解析模块1进行加密,加密算法为des算法。

信息绑定模块3,用于制作license时将license与终端相关信息进行绑定;在本发明实施例中,所述终端相关信息包括产品类型、产品版本、操作系统、过期日期以及物理网卡地址,在制作license时分别绑定上述各项信息。在本实施例的基础上,还可根据实际应用需要绑定终端的其他相关信息,而不限定于上述5种信息,此处不再赘述。其中,所述信息绑定模块3中可设置有文件加密单元,用于制作license时对所述license文件自身进行加密;通过双重加密增大了直接反编译java类文件的难度。

license解密模块4,用于软件启动后、正常加载前,先后对所述license解析模块以及license文件自身进行解密,解密算法为des算法。其中,所述license解密模块4可设置于所述license解析模块1内部。

信息匹配模块5,用于将license绑定的终端相关信息与终端本地的相关信息进行匹配,若匹配则软件的服务加载成功。通过所述license解析模块1,可分别读取license绑定的产品类型、产品版本、操作系统、过期日期以及物理网卡地址,所述信息匹配模块5再获取相应的信息与对应的终端本地信息进行匹配,若全部匹配成功则服务端启动成功,客户端顺利连接到服务端,软件正常使用。

参考图4,所述信息匹配模块5还包括:

产品类型获取模块51,用于获取license绑定的产品类型,若类型为企业版,则开放产品的各功能模块;若类型为试用版,则限制产品的部分指定功能模块。

产品版本匹配模块52,用于获取license绑定的产品版本,将获取到的产品版本与该产品适用的版本进行匹配,验证license是否有效。

操作系统匹配模块53,用于获取license绑定的操作系统,将获取到的操作系统版本与终端本地操作系统版本进行匹配,验证license是否有效。

过期日期比较模块54,用于获取license绑定的过期日期,将获取到的过期日期与终端本地日期进行比较,验证license是否有效。若获取到的过期日期小于终端本地日期,则此license无效,服务无法启动;若获取到的过期日期大于终端本地日期,通过time文件获取软件最近使用时间;若软件最近使用时间小于终端本地日期,则此license有效;若软件最近使用时间大于终端本地日期,则此license无效,服务无法启动。

物理网卡地址匹配模块55,用于获取license绑定的物理网卡地址,将获取到的物理网卡地址与终端本地物理网卡地址进行匹配,验证license是否有效。其中,若上述各项匹配完成后均得到license有效,则服务启动成功,软件正常使用;若任一项匹配不成功,得到license无效,则软件无法使用。

本发明提供的一种软件授权许可实现系统中,对license解析模块以及license文件自身进行加密,通过双重加密增大了直接反编译java类文件的难度,实现了对license文件一定程度的安全控制;同时,在软件启动后获取license绑定的过期日期时,软件安装后还生成记录软件最近使用时间的time文件,每次软件服务启动成功后进行时间更新,避免了通过修改系统时间来达到重复使用license的目的。

实施例3:

在实施例1提供的一种软件授权许可实现方法以及实施例2提供的一种软件授权许可实现系统的基础上,本发明还提供了一种软件授权许可实现装置,可用于实现实施例所述软件授权许可实现方法中所述终端的功能。如图5所示,是本发明实施例的软件授权许可实现装置的架构示意图。本实施例的软件授权许可实现装置包括一个或多个处理器21以及存储器22。其中,图5中以一个处理器21为例。

所述处理器21和所述存储器22可以通过总线或者其他方式连接,图5中以通过总线连接为例。

所述存储器22作为一种软件授权许可实现装置非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1的软件授权许可实现方法中终端对应的功能。所述处理器21通过运行存储在所述存储器22中的非易失性软件程序、指令以及模块,从而执行软件授权许可实现装置的各种功能应用以及数据处理,即实现实施例1的软件授权许可实现方法中所述终端的功能。

所述存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件或其他非易失性固态存储器件。在一些实施例中,所述存储器22可选包括相对于所述处理器21远程设置的存储器,这些远程存储器可以通过网络连接至所述处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的软件授权许可实现方法中所述终端的功能,例如,执行图1和图2所示的各个步骤中终端的功能。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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