如何通过系统时钟篡改来防止过期许可证的使用?

我目前正在使用java工作的许可证管理器,我将指定我的应用程序的开始和结束日期,以便我可以强制许可用户在一定时间后重新许可该程序。

但我面临的问题是,任何人都可以回滚他们的系统日期和时间,以保持许可证的有效性。 Java中是否有任何方法可以检测系统日期和时间是否已更改。 我已经尝试过网络时间协议来从时间服务器获取当前日期和时间。

您可能正在系统上存储许可证文件。 a)包括软件在许可文件中注册的时间,b)对文件进行数字签名。

数字签名将告诉您许可证文件是否被篡改。 如果没有,时间将告诉您软件何时注册; 如果“当前时间”小于注册时间,您的许可证管理员会知道有趣的事情正在发生并且可以响应(拒绝运行,删除许可证,…

如果您确实要强制执行日期范围,请将每个程序执行的当前时间写入单独的数字签名文件,validation时间总是单调上升。

您还可以针对应用程序写入的任何文件(然后读取)检查上次记录的时间。 这样一个日期晚于上次记录时间的文件表示某种许可证文件回滚。

这些不会阻止用户将时钟设置回来,但这将使他很难以有组织的方式完成这项工作。

基本上不可能做任何事情。 用户可以“恢复”他的整个计算机,以便软件认为它在任何特定日期运行。

你可以通过让程序在一段时间内询问一些时间服务器来加倍努力。 (尽管如此,如果有人真的想使用旧许可证,他可以将任何此类流量重新路由到本地时间服务器。)

相关问题/答案:

  • 使用Java查询服务器的时间

正如@aioobe所说,应用程序无法控制它们运行的​​环境。

您可以做的(如果您的程序还维护对您的用户重要的数据)是记录它对日期/时间和时间的消息。 例如,您可以在检查到它没有回滚后定期存储当前时间(当检测到回滚时,输出带有加密代码的消息以传递给您进行重新许可,以便您知道发生了这种情况)。

您还可以保留一个“计数器”,该计数器在程序运行时每小时递增一次,为您提供另一种估算许可证使用情况的方法。

使用这三个许可证将在一年后运行,回滚或x小时运行时。

你有几个场景要打击:

  1. 在安装产品之前转回系统时钟的用户
  2. 安装后回滚系统时钟的用户。

您可以应用多种级别的安全性,如果这是一个主要问题,那么您可能希望使用所有这些级别。

最安全的是检查外部参考的时间,例如您的服务器。 如果没有网络访问权限,则可以使用上述本地方法,使用本地(隐藏)文件跟踪系统上的时间,以便检测回滚。 通过在多个位置使用多个这样的文件,并使它们相互交叉检查,您可以在不检测的情况下任意回滚(并且您可以始终保持定期尝试连接到外部服务器)。

对您的应用进行编码,以便向您发送用户会话使用的电子邮件,并检查到达时间。 自动化电子邮件监控! 否则你将成为你成功的奴隶。

乔治