Gen*_*oax 5 c++ date software-design license-key visual-c++
我正在尝试创建一个基于订阅的许可系统,如果您为 1 年 1 位用户购买软件,您只能在用于激活软件的机器上使用它一年,之后您必须更新您的许可证钥匙。这是非常基本的,但实现您自己的相同场景是完全不同的场景。
所以让我讨论我到目前为止所做的:(不包括代码,如果你想让我粘贴它们,请告诉我)
首先,我有一个托管的 MySQL 数据库,其中有一个数据库,其中存储了所有与许可证相关的信息(产品、serial_keys、计划等)。
因此,当您第一次启动该软件时,它会检查注册表中的几个值(多个位置),如果没有找到,它将要求您提供序列号。
输入序列号后,软件将连接到数据库并验证您的密钥并计算以下内容
此处略过一些逻辑步骤,例如如果许可证已经激活,请检查并匹配注册的 machine_id
这样软件就注册好了。现在,每次软件启动时,我都会再次在注册表中查找这些值并根据它做出决定,这就是我卡住的地方,需要您的专家建议。
考虑到用户没有上网,只用了一次激活或上网套餐过期,如何进行合法的日期查询?不能使用系统时间,他们非常脆弱。
此时我想创建一个服务,该服务将具有回调函数,以便在用户尝试更改系统日期时采取行动。但这很乏味,我认为这不是最好的解决方案。
或者在启动时记录系统时间并依赖于它,但是用户甚至可以在系统启动之前通过 BIOS 更改它。
抱歉问了这么长的问题,但必须解释整个场景。
简而言之,用户没有互联网连接如何维护或获取日期/时间呼叫的合法来源?
你可以做一些事情,但你永远不会得到 100% 万无一失的东西。
最简单的可能只需要互联网连接。但我们已经看到 Xbox 和其他游戏公司对此的反应有多好。
如果您无法依靠互联网连接来执行检查,您可以监视“可疑”活动。例如,记录应用程序的上次运行时间。如果由于某种原因系统时钟报告的时间早于上次记录的运行时间,则提示用户建立互联网连接并进行验证。
请记住,用户调回时钟可能有正当理由。夏令时就是其中之一。也许可以使用一个阈值,例如忽略时钟被调慢一小时或一天或其他什么。