如何防止通过系统时钟篡改使用过期的许可证?[已关闭]

2022-09-02 21:51:20

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

但我面临的问题是,任何人都可以回滚他们的系统日期和时间,以保持许可证的有效性。在Java中有什么办法可以检测系统日期和时间的变化吗?我已经尝试了网络时间协议,以从时间服务器获取当前日期和时间。


答案 1

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

数字签名将告诉您许可证文件是否被篡改。如果没有,时间会告诉您软件注册的时间;如果“当前时间”小于注册时间,您的许可证管理器知道发生了一些有趣的事情,它可以根据(拒绝运行,删除许可证,...

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

您还可以根据应用程序写入然后读取的任何文件检查上次记录的时间。如果此类文件的日期晚于上次记录的时间,则表示某种许可证文件回滚。

这些不会阻止用户将时钟设置回去,但这会使他很难以有组织的方式执行此操作。


答案 2

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

您可以通过让程序向一些时间服务器询问时间来使其更加困难。(尽管如此,如果有人真的想使用旧许可证,他可以将任何此类流量重新路由到本地时间服务器。

相关问题/答案:


推荐