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

Lal*_*and 17 java licensing ntp systemtime

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

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

Ira*_*ter 7

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

数字签名将告诉您许可证文件是否被篡改.如果没有,时间将告诉您软件何时注册; 如果"当前时间"小于注册时间,您的许可证管理员就会知道一些有趣的事情,它可以响应(拒绝运行,删除许可证,...

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

您还可以根据应用程序写入的任何文件检查上次记录的时间.这样一个日期晚于上次记录时间的文件表示某种许可证文件回滚.

这些不会阻止用户将时钟设置回一些,但这将使他很难以有组织的方式做到这一点.


aio*_*obe 6

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

你可以通过让程序问一些时间服务器来让它变得更难.(尽管如此,如果有人真的想使用旧许可证,他可以将任何此类流量重新路由到本地时间服务器.)

相关问题/答案:

  • 由于没有连接到互联网,我不相信有任何完美的解决方案.可以这样想:如果用户控制计算机的时钟和所有输入/输出,你就无法区分昨天和今天之间的区别.如果用户重新设置时钟,从昨天恢复硬盘图像并复制所有输入/输出,就像前一天看到的那样. (2认同)