Linux上的系统时间变化检测

时间:2010-09-21 07:18:02

标签: c++ c linux algorithm

我正在阅读有关软件许可的内容,我想到的一个问题是“如果有人改变系统时间,软件如何检测系统时间的变化并阻止自己?”。由于没有其他参考可用(假设我们没有互联网连接,否则我们可以使用时间服务器作为参考),这样的软件如何设法做到这一点?是否有标准算法或任何标准库(C / C ++)可用于实现相同的算法。请建议。

提前致谢, 拉维古普塔

7 个答案:

答案 0 :(得分:4)

你不能认为因为时钟倒退,它是由试图规避许可的人造成的。

例如,考虑一下有人意外地将时钟设置为未来的情况,然后将其重置为正确的时间?

通过尝试对其进行时间限制来削弱您的软件是不正确的。考虑制作体面的软件。

答案 1 :(得分:1)

您的软件可以定期询问系统时间(使用boost::posix_time::second_clock::local_time())并将其与上次存储的值进行比较。如果您发现显着负面差异,则有人可能会更改系统时间。

请注意,出于正当理由可以在系统上更改时间:计算机可以移动到另一个时区,系统可能正在使用NTP并且计算机时钟速度过快,因此NTP通常会将时间设置为较早的值或当夏令时发生变化时。

还要记住,那种“保护”在实践中并不真正有效。如果你必须在某个地方存储最后一个系统日期,你就冒了一个人会在哪里找到并在不久的将来将其改为某种东西的风险,以便为自己授予新的许可权。

据我所知,这个问题没有优雅可靠的解决方案。

答案 2 :(得分:1)

我过去读过的一个策略是创建,更新和检查文件夹中的文件。您可以在更改日期时更新日期,如果日期倒退,您可以将其置之不理,并且可能会产生怀疑。

然而,没有100%证明时移的方法,在我有限的经验中,任何盗版功能通常会伤害帮助台和客户,而不是伤害海盗。

了解试用用户比将其定为刑事犯罪要好得多。

答案 3 :(得分:0)

如果系统时差为正,你可以设置一个计时器来检查每n个滴答(一个滴答=一个(多个)cpu时钟滴答)...应该足以每秒检查一次,甚至每分钟检查一次。通常计时器不应该消耗那么多资源。你必须确保计时器使用滴答,而不是系统时钟...

答案 4 :(得分:0)

clock_gettime(CLOCK_MONOTONIC,& ts)为您提供独立于系统时间的timespec。您可以使用它来计算CLOCK_REALTIME之间的偏移量,如果更改,则系统时间已更改

答案 5 :(得分:0)

通常情况下,您无法一致地检测到这些内容,因为人们可能只是重新启动相关机器。

在一个古老的地方,我曾经在管理员改变时钟时工作,因为他忘记更新编译器的许可证。这不是一个好主意。基本上这台机器很快就变得无法使用了:NFS搞砸了,make没有用,很麻烦。

所以我的猜测是你的问题更多是理论性的。在现实生活中,任何人都不会这样做。

答案 6 :(得分:0)

每次应用程序启动时,您始终可以将文件的时间戳设置为当前系统时间。

在设置之前先检查时间 - 如果是将来,那么自上次设置以来时钟已经倒退了。