内部开发的PC端工具,需要绑定目标计算机,并添加使用时长的限制。为此,为工具增加了许可验证模块。因该模块能满足基本需求,且实现简单,特做记录。
许可验证模块基本逻辑如下:
(emmm,不太会画流程图)
具体地,用户安装工具后初次启动时,需要生成请求文件并发送给管理员。请求文件中包含了用户计算机系统信息。管理员收到请求文件后,解析并返还给用户一个许可文件。许可文件携带如下信息:
- 用户计算机系统信息
- 许可文件有效时长:某个确定的时间点
- 许可有效时长:天数
请求文件和许可文件均为加密过的压缩文件。
加载许可文件,如果许可文件中用户计算机系统信息与当前计算机一致,则生成用户配置文件,并在其中写入如下字段:
- 许可有效时长:天数
- 许可使用时长:天数
- 许可生效事件:当前时间
- 许可失效事件:许可生效事件+许可有效时长
- 上次打开时间:当前时间
之后每次启动时,都会进行如下验证:
- 如果许可生效时间大于当前时间,则认为篡改时间,许可失效
- 如果许可失效时间小于当前时间,则认为许可过期,许可失效
- 如果当前时间小于上次打开时间,则认为篡改时间,许可失效
- 如果当前使用时长(当前时间-许可生效时间)小于许可使用时长,则认为篡改时间,许可失效
- 如果跨越时间(当前使用时长-许可使用时长)不小于1,则修改许可使用时长为当前使用时长。注:自然时间流逝时跨越时间必然等于1。
此外,工具启动同时会启动一个定时器,定期验证许可,防止工具一直打开的情况。