【问题标题】:How to get "hardware time"如何获得“硬件时间”
【发布时间】:2013-02-27 10:43:01
【问题描述】:

我正在尝试创建一个将许可证有效期与计算机时间进行比较的许可证系统。我想直接从“硬件”获取时间,这样就不可能通过更改操作系统(Windows)时间来欺骗许可证系统。

我试过用谷歌搜索,但也许我不知道正确的关键字。我检查过的不同时间 API 没有明确说明它们是否依赖于操作系统。

你会使用什么 API 来解决这个问题?

【问题讨论】:

  • 您想信任一台您无法完全控制的机器来告诉您时间吗? (提示:Windows 从硬件获取时间)
  • 我建议将当前系统时间检查为网络服务的时间(可能是 NTP)。事实上,hardware 时钟值是操作系统返回的值,或者至少是操作系统希望你相信的值。它很容易被伪造。

标签: c++ windows time


【解决方案1】:

没有什么可以阻止用户更改硬件 (BIOS) 时间。所以,如果你想依赖硬件,你也可以信任 Windows 系统时间。

一种方法是咨询 NTP 时间服务器。但要真正确定,您必须设置或使用 NTP 服务器,它会自我验证。

请参阅NTP FAQ Authentication 了解更多信息。

但也要记住,这只有在有网络连接的情况下才有效。如果用户拔掉网线或关闭路由器,这种方法就会失效。

【讨论】:

  • 好答案,谢谢!我显然错过了 BIOS 时间和 Windows 时间之间的微不足道的联系 :-) 幸运的是,我可以假设用户无法更改 BIOS 时间。将来可能会采用 NTP 服务器和身份验证的方法。
  • @kullero 更改 Windows 时间也会更改“BIOS 时间”...如果您可以假设用户不能更改一个,那么您可以假设它不能更改另一个,不是吗?
  • @R.MartinhoFernandes 真的吗?!嗯,这对我来说并不明显。我认为 BIOS 与操作系统是分开的,需要进入 BIOS 并可能提供 BIOS 密码才能更改 BIOS 时间。我假设用户没有 BIOS 密码,因此无法更改 BIOS 时间。所以我说的不对?困惑:-)
  • @kullero 我只是四处搜索,但找不到任何官方来源。似乎默认行为是更改硬件时钟,但似乎有一些注册表黑客可以防止这种情况发生。
  • 我将放弃我对绝对时间戳的最初想法并使用 Windows/BIOS 时间,即相信用户;-)
猜你喜欢
  • 2020-11-08
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多