软件产品保护方法与流程

文档序号:11951450阅读:218来源:国知局
软件产品保护方法与流程

本发明涉及计算机技术领域,尤其关于一种软件产品保护方法。



背景技术:

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网。Java源代码被编译成Java字节码文件,由Java虚拟机负责对Java字节码文件进行解释执行,具有高度的灵活性,然而,只要有一个反编译器,对计算机软件进行反编译,任何人都可以分析Java程序的源代码,使得源代码很容易被破解窃取。现有的商用软件产品在出售或试用时都会带有授权的license文件,license文件中包含了对软件产品的厂商、产品名称、授权信息、有效期、MAC绑定等license信息,软件产品通过license验证程序对license信息进行验证,验证通过才能获得相应的使用权限,从而达到保护软件产品的目的。然而,由于Java源代码很容易被窃取,而后可根据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文件的破解难度,从而能更好的对软件产品进行保护。

附图说明

图1绘示本发明一较佳实施例所提供的软件产品的保护方法流程图;

图2绘示本发明一较佳实施例中所提供的license文件生成方法流程图;

图3绘示本发明一较佳实施例中所提供的license文件生成方法流程图;

图4绘示本发明一较佳实施例中所提供的license文件生成方法流程图;

图5绘示本发明一较佳实施例中所提供的license文件生成方法流程图;

图6绘示本发明一较佳实施例所提供的license文件验证方法流程图。

具体实施方式

为使本发明的技术方案及其优点更加明确和详细,以下将参照图示进行说明。

请参阅图1,图1绘示本发明一较佳实施例所提供的软件产品的保护方法流程图。如图1所示,软件产品的保护方法包含步骤:生成license文件;验证license文件,若验证通过,则运行软件产品的主体程序,若验证不通过,则退出运行。

具体而言,请参阅图2,图2绘示本发明一较佳实施例中所提供的license文件生成方法流程图。如图2所示,生成license文件的方法包含如下步骤:

S1,从软件产品中分离出启动程序与主体程序。软件产品的启动程序是指在运行软件产品的主体程序之前必须执行的启动引导程序,例如,为软件产品的主体程序搭载运行环境,对软件产品的主体程序进行加载,也就是说,如果软件产品的启动程序无法正常执行的话,软件产品的主体程序将无法启动。软件产品的主体程序的是指实现各种具体业务功能的程序,是软件产品的主要价值体现。本步骤中,分离启动程序与主体程序的方式是通过代码分离的方式,将启动程序与主体程序的代码相互分离独立。本发明的实施例中,软件产品使用的开发语言为java语言。

S2,整合启动程序与license验证程序,形成引导程序。本步骤中,通过整合代码的方式将启动程序与license验证程序进行整合。

S3,合并引导程序、license信息,生成license文件。本步骤中,通过设计自定义字节码文件规则,将引导程序、license信息按照自定义字节码文件规则写入到同一个文件中,从而生成license文件。本发明的实施例中,license信息为软件产品授权许可信息,包含:厂商、产品名称、授权信息、有效期、MAC绑定等。

根据上述步骤所生成的license文件中,即包含了软件产品的license信息,又包含了软件产品的启动程序以及license验证程序,通过将软件产品的启动程序与主体程序分离,并把启动程序整合进license文件中,增加了软件产品的破解难度,达到了保护软件产品的目的。

为了更进一步的提升对软件产品的保护力度,本发明的其他较佳实施例中可通过对引导程序或license信息进行加密,增加license文件的破解难度。以下将分别借助图3至图5对该些较佳实施例进行详细说明。

请参阅图3,图3绘示本发明一较佳实施例中所提供的license文件生成方法流程图。如图3所示,本实施例与图2所示实施例的区别在于,更包含步骤S203,位于步骤S2之后、步骤S3之前。步骤S203是对引导程序进行加密的步骤。本实施例中,加密引导程序方法是通过数字证书及秘密密钥的手段来实现 的,详细而言,包括通过数字证书的私钥为引导程序生成数字摘要,并通过秘密密钥为引导程序及引导程序的数字摘要进行加密,得到加密引导程序与加密引导程序的数字摘要。可以理解的是,本实施例提供的license文件生成方法中,步骤S3在合并生成license文件时,合并的是加密引导程序以及加密引导程序的数字摘要,与图2所示license文件生成方法中的步骤S3合并的内容不同,但是合并的方法都相同,故在此不在赘述。通过本实施例中的方法所生成的license文件,由于对引导程序做了数字摘要,并对两者都进行了加密,若想要对license文件进行破解,则不仅需要了解自定义字节码文件规则,还需要完成对引导程序及其数字摘要的正确解密,以及通过引导程序数字摘要的验证,由此可见,通过本实施例所提供的license文件生成方法,可更大程度的提升license文件的破解难度,从而对软件产品提供更坚实的保护。

请参阅图4,图4绘示本发明一较佳实施例中所提供的license文件生成方法流程图。如图4所示,本实施例与图3所示实施例的区别在于,更包含步骤S213,位于步骤S3之前。步骤S213是对license信息进行加密的步骤。本实施例中,加密license信息的方法是通过数字证书及秘密密钥的手段来实现的,详细而言,包括通过数字证书的私钥为license信息生成数字摘要,并通过秘密密钥为license信息及license信息的数字摘要进行加密,得到加密license信息与加密license信息的数字摘要。可以理解的是,本实施例提供的license文件生成方法中,步骤S3在合并生成license文件时,合并的是加密license信息以及加密license信息的数字摘要,与图3所示license文件生成方法中的步骤S3合并的内容不同,但是合并的方法都相同,故在此不在赘述。不难看出,本实施例是基于图3所示实施例的进一步改进,相较于图2所示的实施例而言,不仅对引导程序进行了加密,还对license信息也同样进行了加密,由此可见,通过本实施例的方法所生成的license文件,不仅具备图2及图3所示实施例生成的license文件的特征,还通过对license信息的加密,使得license文件的破解步骤更复杂,从而更进一步提升了license文件的破解难度。可以理解的是,本实施例中的步骤S213与步骤S203相互之间是独立的,也就是说,在本发明的其他实施例中,在生成license文件的方法中,也可以按照实际需求,只包含对license信息加密的步骤S213,而不包含对引导程序进行加密的步骤S203,故这一实施例,也应属于本发明所保护的范畴。

请参阅图5,图5绘示本发明一较佳实施例中所提供的license文件生成方法流程图。如图5所示,本实施例与图4所示实施例的区别在于,更包含步骤S223,位于步骤S203及S213之后、步骤S3之前。步骤S223是对秘密密钥进行加密的步骤。本实施例中,加密秘密密钥的方法是通过数字证书的私钥为秘密密钥进行加密,得到加密秘密密钥。可以理解的是,本实施例提供的license文件生成方法中,相较于图4所示实施例而言,在步骤S3合并生成license文件时,不仅合并了加密引导程序及其加密数字摘要、加密license信息及其加密数字摘要,还更进一步的合并了加密秘密密钥,同样的,合并的方法都相同,故在此不在赘述。

值得注意的是,图3至5所示的实施例中,在新增的步骤S203、S213或S223中,使用的加密手段都是通过数字证书的私钥及秘密密钥,由于license文件在正常使用过程中,需进行解密和验证,而解密和验证所需的数字证书的公钥及秘密密钥也都包含分别在数字证书文件及秘密密钥文件中,可以理解的是,在图3至图5所示的实施例中,步骤S3中合并的文件更包含了数字证书及秘密密钥(或加密秘密密钥)。

通过上述图示及描述,对本发明的软件保护方法中的生成license文件的方法进行了详细说明,以下将结合图示,对图1所示实施例中的license文件验证的方法进行详细说明。

请参照图6,图6绘示本发明一较佳实施例所提供的license文件验证方法流程图。本实施例中的验证方法,是针对图2所示实施例生成的license文件的验证方法,如图6所示,license文件验证方法包括如下步骤:

A1,从license文件中解析出引导程序及license信息。具体而言,在软件产品启动时,由于启动程序被分离并合并写入到License文件中,通过正常的途径无法完成软件产品的正常启动,所以必须通过Java虚拟机提供的底层ClassLoader扩展机制,扩展实现自定义的ClassLoader,由自定义ClassLoader接管Java虚拟机对启动程序的装载和执行过程,通过对findclass方法的重写,按照自定义字节码文件规则,对license文件进行解析,还原出引导程序,执行引导程序。

A2,执行引导程序中的license验证程序,对license信息进行验证。当引导程序被解析还原出来后则可执行引导程序,本发明的实施例中,当引导程序被执行后,就开始由引导程序接管整个启动过程。引导程序在执行过程中先将license信息从license文件中解析还原,再通过内部license验证程序对license信息进行验证。其中,本发明的实施例中,license验证程序可通过有效期验证的方式或者有效期及marc地址绑定的方式对license信息进行验证,但本发明并不限于此,也可以通过其他验证方式进行验证。

通过license验证程序对license信息进行验证,根据验证结果,选择后续的处理方式,若验证通过,则执行引导程序中的启动程序,进而运行主体程序,以完成软件产品的正常启动;若验证不通过,则直接退出引导程序的执行,软件产品将无法启动。

本发明实施例中所提供的license文件验证方法,需先调用自定义类加载器,按照生成license文件时所使用的自定义字节码文件规则对license文件进行解析还原,再由引导程序执行license验证程序,以完成license信息的验证。在获得license信息验证结果之前,无论是软件产品的启动程序还是主体程序,都不会有任何的动作,从而避免了license信息的验证被绕过,对软件产品提供了保护。

针对图3至图5所示实施例中生成的license文件的验证方法中,更包含对license文件中的数字证书及秘密密钥(或加密秘密密钥)进行解析,以及对引导程序、license信息及相应的数字摘要进行解密和验证的过程,由此可见,license文件的验证方法将随着license文件生成方法的不同而不同,进一步提高了license验证程序被破解或者绕过的难度。

综上所述,本发明所提供的软件保护方法中通过对license文件的改进,并严格对license文件的验证过程进行管控,提升了license文件破解难度,以及软件产品被修改的难度。举例而言,若想要破解图5所示实施例中生成的license文件,首先需要正确的了解license文件的自定义字节码结构、正确完整地解析出各个组成模块、伪造公钥、私钥、秘密密钥、License信息,并按照加密逻辑规则和自定义字节码文件规则重新生成License文件或反编译还原出引导程序,提取引导程序中的启动程序代码,翻译主体程序,将启动代码加入到软件主体中,从而绕过License校验过程,由此可见,破解程序非常复杂,难度也非常高。

更近一步的,为了更好对软件产品提供保护,可以将license文件写入到USBKey等移动存储器中,并在自定义类加载器ClassLoader的findclass方法中执行从USBKey中读取License文件的步骤,从而完成引导和验证过程。

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