我正在尝试创建基于订阅的许可系统,如果您购买1年1用户的软件,您只能在用于激活软件的机器中使用它一年,之后您将不得不续订许可证密钥。这是非常基本的,但实现相同的是一个完全不同的场景。
那么让我来讨论一下我到目前为止做了些什么:(如果你想要我粘贴它们,请不要包含代码告诉我)
首先我有一个托管的MySQL数据库,我有一个存储所有许可证相关信息的数据库(产品,serial_keys,计划等)。
因此,当您第一次启动软件时,它会检查注册表中的一些值(多个位置),如果没有找到,它会要求您输入序列号。
输入序列密钥后,软件应连接到数据库并验证密钥并计算以下内容
此处跳过一些逻辑步骤,就像许可证已激活一样,检查并匹配已注册的machine_id
因此该软件已注册。现在,我每次软件启动时都会再次在注册表中查找这些值并根据它做出决定,这里是我被困住的地方,需要你的专家建议。
考虑到用户没有互联网并使用它一次激活或他的互联网计划已过期,我该如何对该日期进行合理检查?无法使用系统时间他们非常容易受到攻击。
此时我想到创建一个服务,当用户尝试更改系统日期时,该服务将具有回调功能。但这很乏味,我认为不是最佳解决方案。
或者在启动时记录系统时间并依赖于此,但用户甚至可以在系统启动之前通过BIOS更改它。
很抱歉这么长的问题,但不得不解释整个情况。
简而言之,用户没有互联网连接如何维护或获取日期/时间通话的合法来源?
答案 0 :(得分:2)
你可以做一些事情但你永远不会得到100%傻瓜证明。
最简单的可能只需要一个互联网连接。但我们已经看到了XBox和其他游戏公司的收视情况。
如果您无法依靠互联网连接来执行支票,那么您可能会注意到"可疑"活动。例如,记录应用程序的上次运行时间。如果由于某种原因,系统时钟报告最后一次记录的运行时间之前的时间,则提示用户建立互联网连接并进行验证。
请记住,用户可能有合理的理由设置时钟。夏令时是一个。也许使用一个阈值,比如忽略一小时或一天或其他什么时候设置的时钟。
答案 1 :(得分:2)
您可以执行以下步骤:
虽然此方法不准确,但它可以保护您免受程序的不当使用。
请注意:如果程序将被连接到互联网,您可以恢复有关加密文件中正确的已用时间的所有信息。
抱歉我的英文!
答案 2 :(得分:1)
我们已经列出算法我不会重复,它现在确实解决了问题BIOS检查我们只需要确保它不会回来。每次程序启动我们记录当前时间,如果用户必须双通许可他需要设置他,如果他确实发布安装程序可以检测到
现在,如果用户在安装前更改BIOS时间,我们仍然可以,因为程序会将其视为正确的时间,并将计算该年份的年份。