【问题标题】:Is WMI a good way to making a hardware fingerprint?WMI 是制作硬件指纹的好方法吗?
【发布时间】:2011-12-12 14:20:38
【问题描述】:

我想制作一个 C++ 安装部署的 Windows 应用程序,该应用程序将检查硬件指纹(以验证用户将仅在他的计算机上使用该应用程序)。经过一些网络研究后,我决定 WMI 是我的工具。我从一个简单的 MFC 应用程序开始,一开始我想打印出主板序列号。而就在此时,整个事情都崩溃了。我检查了 XP 和 Win7 并且没有返回这个属性。这让我开始思考——如果某些类/属性在某些 Windows 版本上不起作用怎么办?还是一些硬件配置?我真的不喜欢那样。我对指纹的即时想法是 MAC 地址(我的应用程序是严格的网络驱动的,所以如果机器没有网络连接,它根本没有用)。但是,有些机器可以有多个 MAC 设备。并且某些 MAC 可能是虚拟的,卸载后会从系统中消失(即 VPN 客户端)。我认为 MAC 地址可以轻松更改,但如果我对数字进行哈希编码,用户可能无法弄清楚使用它。所以我征求你的意见 - WMI 是硬件指纹的好工具吗?如果是 - 您建议使用哪些类/属性?它们应该适用于所有机器和系统,并且同时是安全/不可更改的(好吧,如果用户更改整个硬件,我们将无能为力。)如果 WMI 不是一个好的解决方案,那么您会建议使用其他 C++ 框架吗?并遵循 - 然后使用哪些 HD 属性。

【问题讨论】:

标签: wmi hardware fingerprint


【解决方案1】:

是的,WMI 是执行此任务的一个很好的选择,关键是选择正确的类和属性来使用,或者更好的是,您可以访问SMBIOS 表以获取有关系统的信息并生成一个 唯一标识符。前段时间我在博客上写过这两个主题,代码在 delphi 中,但可以很容易地翻译成 C++

【讨论】:

  • 感谢 RRUZ。选择正确的组件实际上是至关重要的。但是在您的帖子中,您还使用了 MotherBoard 属性,其中 SerialNumber 就是其中之一。如上所述,这对我不起作用(并且文档对此类问题保持沉默)。这也是我现在发现的一个很好的话题:stackoverflow.com/questions/8072414/…
  • 如果您使用 SMBIOS,您可以毫无问题地检索此信息(主板序列号)(因为直接从 BIOS 硬件读取),还可以使用属性和类的组合,而不仅仅是一个,例如处理器信息 + BIOS 信息(版本、发布日期、型号)+ 主板信息。
  • 我肯定需要超过 1 个属性,因为我现在看到它们中的许多会根据平台提供不同的结果(我只测试 3 台计算机:1 台 win7 和 2 台 winXP)。甚至不总是显示 Bios 序列号。所以我现在知道我无法想出一个单一的参数。我想我现在将从您的帖子中再看一下 SMBIOS,因为它可能会提供更稳定的结果。再次感谢 RRUZ。我有其他建议请发表。
【解决方案2】:

根据我的经验,不会。WMI 似乎很慢并且有时不准确。最好使用较低级别的方法并直接使用 Win32 API 查询硬件。

【讨论】:

  • Michael,如果您能提供一些更具体的示例来说明您使用了哪些 Win32 函数以及您查询了哪些硬件属性,那么您的回答可能会更有帮助。至于 WMI 通常很慢的事实——这对于偶尔的指纹路由来说应该不是问题。你不觉得吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多