一种防篡改时间的软件License验证方法
技术领域
本发明涉及软件技术领域,尤其是涉及一种防篡改时间的软件License验证方法。
背景技术
传统的软件license验证方法单纯的使用计算机本地时间与license授权的生效时间范围做比较,期望软件只能在特定的时间范围内正常使用。但是计算机的本地时间是可以被更改的,更改到合适的时间点之后软件被重新激活,license存在被复用的风险。
另外,虽然也有一些软件会在注册表或文件系统中记录软件的使用时间,在一定程度上可以防止用户修改时间来重复使用license,但是当用户修改时间之后重装系统再重新注册时,license仍然可以被复用。
发明内容
为克服上述现有技术的不足,本发明的目的是提供一种防篡改时间的软件License验证方法,既可以防止用户通过修改系统时间来复用license,又可以防止用户通过重装操作系统来复用license。
为了达到上述目的,本发明提供如下技术方案:
一种防篡改时间的软件License验证方法,包括以下步骤:
S1、在生成软件license时赋予license一个唯一标识,注册软件license时,首先校验license文件时间的合法性;
S2、获取系统的硬件唯一标识码,将硬件唯一标识码、软件license的唯一标识、系统时间一起加密保存在license校验文件中;
S3、将硬件唯一标识码作为扇区逻辑编号,找到对应的扇区,备份该扇区的内容,然后把license校验文件的内容写入该扇区,得到license校验扇区;
读取license校验扇区的内容并解析:比较license校验文件和license校验扇区中的软件license的唯一标识是否一致;
若不一致,则认为本次导入的是一个全新的license;
若一致,则比较license校验扇区中记录的时间与当前正在运行的操作系统中的时间;
若license校验扇区中记录的时间等于或晚于当前正在运行的操作系统中的时间,则判定为用户篡改过系统时间,license注册失败,验证结束;
若否,则认为license合法重复导入;
若判定本次导入的是一个全新的license或者license合法重复导入,且当前系统时间在license的有效时间范围内,则继续进行S4;
S4、采用周期性校验或软件启动时校验的方式校验license的合法性,同时检查license校验文件与license校验扇区中的时间的合法性,若存在不合法,则判定软件license失效,注册失败,若全部合法,则判定用户正常使用软件。
进一步地,S1中,注册软件license时获取当前系统时间,并检查该当前系统时间是否在license要求的有效时间段内,若不在,则注册失败。
进一步地,S2中,获取系统的硬件唯一特征信息,再将该硬件唯一特征信息换算为一个正整数,将该正整数作为硬件唯一标识码。
进一步地,S2中,所述license校验文件的大小不能超过512字节。
进一步地,S3中,具体地,将硬件唯一标识码作为扇区逻辑编号,换算成扇区在磁盘上的物理位置,该物理位置对应磁盘上唯一一个扇区,再将license校验文件的内容写入该扇区,得到license校验扇区。
进一步地,S3中还包括,在得到license校验扇区后,读取license校验扇区的内容,并进行解密,若解密失败,则认为本次导入的为一个全新的license,若解密成功,则对内容进行解析。
进一步地,S3中还包括,若判定本次导入为全新的license或者license合法重复导入,且当前系统时间在license的有效时间范围内,则将软件license信息保存在文件中,得到license文件。
进一步地,S4中,具体包括,读取license校验文件的内容和license校验扇区的内容,比较license文件、license校验文件、license校验扇区中的软件license的唯一标识是否一致,如果不一致则认为license校验不合法,即软件license失效,注册失败;获取当前系统时间,如果当前系统时间比license校验文件或license校验扇区中记录的时间早,则认为用户修改了系统时间,判定软件license失效,注册失败;全部检查无异常则认为用户正常使用软件。
进一步地,还包括S5,若判定用户正常使用软件,则按照S2和S3中的操作,基于当前系统时间刷新license校验文件和license校验扇区的内容。
本发明的防篡改时间的软件License验证方法,能够有效防止用户修改系统时间来复用license,同时又可以防止用户重装操作系统来复用license。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的License验证方法示意图;
图2是本发明的License验证流程结构示意图。
具体实施方式
下面将结合本发明的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
根据图1-2所示,说明本发明的一种防篡改时间的软件License验证方法,包括以下步骤:
S1、在生成软件license时赋予license一个唯一标识,注册软件license时,首先校验license文件时间的合法性;
对于非终身授权的license,里面一般包含了生效的时间段,注册软件license时获取当前系统时间,并检查该当前系统时间是否在license要求的有效时间段内,若不在,则注册失败。
S2、获取系统的硬件唯一标识码,将硬件唯一标识码、软件license的唯一标识、系统时间一起加密保存在license校验文件中;
获取系统的硬件唯一特征信息,获取方法如下:获取主板SN号、CPU的SN号、硬盘SN号(如果系统有多块硬盘则全取出来做升序排序然后拼接到一起),将它们拼接成一条信息,作为系统的硬件唯一特征信息。
将该硬件唯一特征信息按照特定算法换算为一个正整数,将该正整数作为硬件唯一标识码。换算算法逻辑如下:将硬件唯一特征信息进行MD5加密运算得到一个MD5字符串,将这个MD5字符串的各字符的ASCII码值相加得到一个正整数。将硬件唯一标识码、软件license的唯一标识、当前系统时间三个数据按照“硬件唯一标识码@@软件license的唯一标识@@当前系统时间”的格式拼接到一起,使用AES-256加密算法加密之后保存到一个文件中,这个文件称为license校验文件。这里要求生成的License校验文件的大小不能超过512字节。
上述专业名词解释:
SN:SN码是Serial Number的缩写,有时也叫SerialNo,也就是产品序列号,产品序列是为了验证“产品的合法身份”而引入的一个概念,它是用来保障用户的正版权益,享受合法服务的;一套正版的产品只对应一组产品序列号。SN码别称:机器码、认证码、注册申请码等。
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(RonaldLinn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在RFC1321标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。在我们的方案中,生成硬件唯一标志码是为了得到一个与硬件信息绑定的整数值,做MD5加密处理是为了得到一个固定长度的字符串使得计算得到的整数值在一个较小的范围内,与安全性无关,固可以使用MD5加密算法。
AES:美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。AES加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。这是一种非常安全的加密算法。
S3、将硬件唯一标识码作为扇区逻辑编号,找到对应的扇区,备份该扇区的内容,然后把license校验文件的内容写入该扇区,得到license校验扇区;
具体地,将硬件唯一标识码作为扇区逻辑编号,换算成扇区在磁盘上的物理位置,该物理位置对应磁盘上唯一一个扇区,再将license校验文件的内容写入该扇区,得到license校验扇区。
在得到license校验扇区后,读取license校验扇区的内容,并进行解密,若解密失败,则认为本次导入的为一个全新的license,若解密成功,则按照“硬件唯一标识码@@软件license的唯一标识@@当前系统时间”的格式解析其中的内容,如果解密结果不符合这个格式则认为这次导入的是一个全新的license。
再比较license校验文件和license校验扇区中的软件license的唯一标识是否一致;
若不一致,则认为本次导入的是一个全新的license;
若一致,则比较license校验扇区中记录的时间与当前正在运行的操作系统中的时间;
若license校验扇区中记录的时间等于或晚于当前正在运行的操作系统中的时间,则判定为用户篡改过系统时间,license注册失败,验证结束;
若否,则认为license合法重复导入;
若判定本次导入的是一个全新的license或者license合法重复导入,且当前系统时间在license的有效时间范围内,则继续进行S4。
如果系统有多块硬盘则每一块硬盘都做如上校验。
若判定本次导入为全新的license或者license合法重复导入,且当前系统时间在license的有效时间范围内,则将软件license信息保存在文件中,得到license文件。
将license校验扇区标记为坏扇区并激发磁盘的自动修复功能(如果系统有多块硬盘则取第一块硬盘),得到一个实际可以使用但不会被操作系统使用的扇区,再将license校验文件的内容写入该扇区。如此操作之后,license校验文件与license校验扇区的内容是一致的。
license校验扇区的工作原理解释:
磁盘存取信息的最小单位是扇区,一个扇区是512字节。磁盘扇区的逻辑编号从1开始,依次递增。通过调用硬件接口可以获取到磁盘的硬件信息,结合磁盘硬件信息可以将逻辑扇区编号换算成扇区在磁盘上的物理位置,进而可以使用扇区在磁盘上的物理位置直接读写这个扇区。
为了减少硬盘返修的概率,硬盘厂商在硬盘内部设计了一个自动修复机制Automatic Reallcation或Automatic Reassign。现在生产的硬盘都有该自动修复功能:在对硬盘的读写过程中,如果发现一个坏扇区,则由内部管理程序自动分配一个备用扇区来替换该扇区,并将该扇区物理位置及其替换情况记录在磁盘的内部表中,后续的基于文件系统的操作将不再读写这个扇区,即使重装操作系统,这个扇区的内容也不会被覆盖。
S4、采用周期性校验或软件启动时校验的方式校验license的合法性,同时检查license校验文件与license校验扇区中的时间的合法性,若存在不合法,则判定软件license失效,若全部合法,则判定用户正常使用软件。
软件在开始运行时校验license的合法性,或者启动后周期性校验license的合法性:如果license文件非法则认为软件license失效。具体地包括:读取license校验文件的内容和license校验扇区的内容,比较license文件、license校验文件、license校验扇区中的软件license的唯一标识是否一致,如果不一致则认为license校验不合法,即软件license失效;获取当前系统时间,如果当前系统时间比license校验文件或license校验扇区中记录的时间早,则认为用户修改了系统时间,判定软件license失效;全部检查无异常则认为用户正常使用软件。
S5、若判定用户正常使用软件,则按照S2和S3中的操作,基于当前系统时间刷新license校验文件和license校验扇区的内容。
上述S2中,获取系统的硬件唯一标识码,这个硬件唯一标识码不会随着用户篡改时间或重装操作系统而改变。将该硬件唯一特征信息按照特定算法换算为一个正整数,将该正整数作为硬件唯一标识码。将硬件唯一标识码、软件license的唯一标识、当前系统时间三个数据按照“硬件唯一标识码@@软件license的唯一标识@@当前系统时间”的格式拼接到一起,使用AES-256加密算法加密之后保存到license校验文件中。上述S3中,将硬件唯一标识码作为扇区逻辑编号换算成扇区在磁盘上的物理位置,这就是license校验扇区的位置,将license校验文件的内容写入该扇区。如此操作之后,license校验文件与license校验扇区的内容又刷新为一致的,以待下一次校验时使用。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。