【发布时间】:2014-02-24 13:37:55
【问题描述】:
我在我的软件中包含了一个定时炸弹,但遇到了问题。我的软件按以下方式工作 - 如果网络可用,则连接到我的服务器并提供有效的许可证密钥(如果生成了有效的密钥,则生成一个存储到期日期和上次运行日期的许可证文件),如果网络不可用(也许用户无法访问互联网)然后他们通过电子邮件向我们发送代码(该代码基于相关机器的一些唯一标识符),并且许可证文件将被发送回给他们。我遇到的问题是,当软件过期时,可以复制许可证文件然后将其粘贴到适当的目录中 - 允许刷新许可证(假设机器没有连接到互联网,因为我可以从 ntp 中提取时间服务器并且机器时间设置为软件有效的过去某个日期)。我该如何解决这个问题?
谢谢
【问题讨论】:
-
如果许可证包含到期日期,则副本是否包含与另一个相同的到期日期无关紧要(像上次运行一样跟踪 anything 是有问题的,因为它们只是每次运行时都必须设置日期 - 或查找并“修复”比较值)。在您无法使用 NTP 的情况下,有几种方法可以从 Windows 估算日期。你也应该开始接受/支持你得到的答案。
-
跟踪上次运行日期用于确保用户不会在软件运行时将日期设置回过去。您如何建议从 Windows 中估算日期?
-
Last Date Run 如果他们在运行应用程序之前将时钟调回,则无法确保任何事情 - 诚实用户除外。写入许可证文件也使得使用 CRC 或签名“锁定”它变得更加困难,因为您正在更新它。您真的只需要将嵌入式到期日期与您可以获得的最佳当前日期进行比较。
-
软件加载时如果检查last_run_date-current_date
-
但是如果你写入许可证文件,各种各样的事情都会被解开:你不能在不透露它在哪里、它是什么以及私钥是什么的情况下检查内容上的哈希签名。这样一来,人们就可以轻松地制作出他们想要的所有许可证。如果它不是用哈希签名密封。你不妨不打扰。 DateNow > LastRun 不错,但代价高昂。