【发布时间】:2016-09-17 18:55:35
【问题描述】:
我需要在离线情况下检测 PC 的时钟是否漂移或在独立 Java 应用程序中被操纵。我怎样才能检测到这一点?
该应用程序将在拥挤的房间中由用户掌握至少 3 个小时,我不希望他们成为熟练的攻击者并且能够设置黑客环境。 大多数情况下,我希望检测到至少几秒的跳跃。
我需要找到一种技术来跟踪独立工作站上 Java 应用程序中的时间,该技术允许检测系统时钟中的显着“跳跃”,但同时不会导致“误报” " 在休闲慢节奏上。
解决方案不必抵抗对源代码或系统时钟的熟练操作。该应用程序将安装在数千个工作站中,但安装时间(小时)非常有限,并且是在公共场合。它只是一个基于计算机的测试软件。
过去,我们尝试使用 System.nanoTime() 设置内部时间测量,并通过重复的周期性 System.nanoTime() 调用计算经过的时间。 这样我们就可以完全忽略任何时钟修改或问题。 但这是失败的,因为在某些机器(多核)上,API 的后续请求会从随机核返回值,从而无法进行测量。
所以,现在我们尝试检测时间的突然变化,因为一些工作站的时钟有故障会自行重置(是的,确实会发生),其他一些在测试期间会更新域时钟(工作站不应该联网,但有人不听我们的指示),可能有些候选人会尝试更改系统时间。
【问题讨论】: