在那些需要把试用版、正式版、订阅版和硬件绑定版分开来发放授权的项目里面,VMProtect的授权模板要怎么配置,生成以后验证失败了又该怎么办,这类问题是经常会碰到的。授权模板的作用,就是把有效期、升级期限、硬件限制,还有用户数据这些规则,事先给整理好,到了生成许可证的时候,直接拿来套用。真正比较容易出问题的地方,并不在于序列号能不能生成出来,而是生成端用的密钥、保护项目里面的许可参数,还有程序里头的验证逻辑,这几样东西是不是同一套配置。
一、VMProtect授权模板怎么配置
去配置授权模板之前,先把产品打算要发出去的授权类型,一项一项给列清楚。永久授权、年度授权,还有限时试用,它们限制的东西是不一样的,不太推荐去做一个什么字段都包含在里面的通用模板,然后靠发放的人临时再去改。
1、初始化许可项目
进到项目的【Licenses】区域以后,先要生成或者导入一对密钥。
公钥会被写到受保护的程序里面,用来验证序列号;私钥是拿来生成授权的,不能跟着客户端程序一起发出去。要是项目重新生成了密钥对,那原来已经生成的那些序列号,通常就不能直接用在新的保护文件上了。所以,在正式发放过许可证以后,不要因为换了电脑,或者是重建了工程,就随随便便地去把许可参数再初始化一遍。
2、按授权类型整理模板字段
新增一个许可证的时候,可以照着产品的规则,把用户名、邮箱、到期日期、最大构建日期、运行时长、硬件ID,还有自定义的用户数据都给填上。试用版一般关注的是到期时间,订阅版的话,还需要区分开许可证的失效日期,和免费升级的截止日期,这两样并不是同一个东西。
硬件绑定也不应该直接就套到所有的授权上面去,先要确认程序能不能正常读到客户设备上的硬件ID,然后再把这个数据写进对应的模板里面。复制的时候,多出一个空格,或者少了一段字符,都有可能让生成出来的序列号,在目标设备上通不过验证。
3、统一模板名称和修改权限
模板的名字,可以直接体现出授权的规则来,比方说“年度单机版”、“永久非绑定版”、“30天测试版”。不要光写一个模板一、模板二,时间长了以后,负责发放的人很容易就会选错。
对于那些涉及有效期、设备数量,还有自定义功能位的字段,最好是限制一下修改的权限。生成之前,再把产品、授权类型,以及客户的硬件信息核对一次,这比生成完了再一个一个去撤销许可证,要省掉很多事情。
二、VMProtect授权模板生成后验证失败怎么办
序列号生成成功了,只能说明生成的那个过程走完了,并不能说明它就一定适合当前的程序。验证失败的时候,先要去读一下授权状态返回的值,分清楚到底是序列号无效,还是日期超了,是硬件不匹配,还是已经被放进了黑名单里面。
1、检查密钥和保护项目是否一致
最常见的一种情况,就是许可证是用A项目的私钥给生成的,可程序里面嵌进去的却是B项目的公钥。还有一种情况,是工程的配置已经更新过了,但是测试的人跑起来的还是旧版的保护文件。
可以重新对程序做一次保护,并且确认一下生成许可证的时候,用到的那些许可参数,都是来自同一个项目。不要光把序列号的文件给替换了,却忘记了客户端程序有可能也还没有更新。
2、检查日期和硬件限制
通过【VMProtectGetSerialNumberState】这一类接口把状态读出来以后,就要分开去处理过期、最大构建日期超了,还有硬件不匹配这些情况。
许可证就算还在有效期里面,也不代表它就一定支持当前的软件版本;要是受保护程序的构建日期,比许可的升级截止日期还要晚,同样也会验证不过去。硬件绑定要是失败了,就应该在那台出问题的设备上,重新把硬件ID给读出来,不要照着截图用手工去敲。虚拟机搬过地方,系统环境变了,或者设备信息调整过,也都有可能让当前的硬件标识,跟当初发证的时候不一样。
3、区分测试模式和正式保护模式
在开发的那个阶段,是可以用许可配置文件来模拟不同的状态,但是正式保护过以后的程序,会去验证序列号自己身上带着的那些数据。测试模式能跑得通,可不等于正式的序列号就已经配置对了。
还要去检查一下,程序有没有把序列号完整地给传进去,是不是误带上了换行、引号,或者看不见的字符。要是序列号是从邮件、网页,或者数据库里面复制过来的,最好是在送去验证以前,把开头和结尾的空格都统一清干净。
三、VMProtect授权验证怎么减少后续返工
授权的问题一旦进到了客户的环境里面,再回过头去查密钥、模板,还有程序的版本,就会比较麻烦了。在发放以前,先建好一套固定的测试流程,这比单独去检查某一个序列号,要可靠得多。
1、准备多种边界样本
至少要把正常授权、错误的序列号、已经过期的授权、硬件不匹配,还有升级期限超限这几种情况,都给测一遍。程序不但要返回正确的状态,还要给用户显示出能看明白的提示,不能把所有的失败,全给写成“许可证错误”。
2、记录授权生成信息
每次发放的时候,要把产品的版本、模板的名字、生成的日期、硬件ID、到期的规则,还有序列号的状态,都给留下来。序列号要是泄露出去了,就应该去执行阻止的处理,不能只是在本地记录里面删掉就算了,要不然,那些已经发出去的授权,不一定就会失效。
3、先验证许可再锁定功能
在把那些关键的功能,设置成要依赖序列号之前,先去确认一下,启动、激活、保存,还有退出的流程,是不是都把没有授权的状态给处理好了。要不然的话,程序就有可能在试用模式下面,错误地去调用那些被锁住的函数,到时候表现出来的,就不光是验证失败了,而是直接就异常退出了。
总结
VMProtect授权模板怎么配置VMProtect授权模板生成后验证失败怎么办,关键的地方,是要保证授权模板、用来生成的密钥、保护项目,还有程序里面的验证逻辑,这几样用的都是同一套许可参数。配置的时候,要把到期日期、升级期限、硬件绑定,还有自定义数据都给分清楚,不要把不一样的授权类型,混在一个模板里面。验证失败之后,先要去读一下具体的状态,然后检查密钥是不是一致的、保护文件有没有更新、日期是不是超了、硬件ID匹不匹配,还有程序传进去的序列号,是不是完整的。把这些环节,按照固定的流程去验证,后面的授权发放,就会稳得多了。
