为了生成每个PC许可密钥,我需要一些代码,这些代码将返回任何PC上的稳定且(接近)唯一的密钥。不是 保证独特,但很接近。它 不过,需要合理稳定,以便给定的PC始终会生成相同的结果,除非硬件发生实质性更改。

这是针对Windows应用程序的,使用WXWIDGETS,但是Win32或其他选项很好。

我正在考虑MAC地址,但是如何以节能模式禁用网卡的笔记本电脑呢?我碰到 GetCurrenthwprofile 但这看起来不像我想要的吗?

有帮助吗?

解决方案

我只使用MAC地址方法;当关闭无线 / LAN卡时,它们仍然显示在网络连接中。因此,您仍然应该能够获得Mac。

考虑一下:任何时候您都可以联系您的Web服务器或与这些ID分类的任何内容,用户将要使用 有某种形式的网卡可用。

哦,您也许可以使用客户计算机的CPU序列号支持它。

其他提示

我回来有一个想法是使用 CryptProtectData 作为识别机器的一种方式。在该API的幕后,Microsoft完成了您想要的工作。不过,我从未测试过它,我很好奇它是否确实可行。

基本上,您会用 CryptProtectDataCRYPTPROTECT_LOCAL_MACHINE, ,结果是您的机器ID。

如果您要比机器本身告诉您的任何东西都难以欺骗一些东西,那么您可能需要提供用于此目的的USB加密狗(而不仅仅是闪存驱动器)。

如何使用安装Windows的HardDisk的序列号?

功能 getVolumeInformation() 会给您这样的序列号。要访问HardDisk供应商分配的ID,而不是Windows分配的ID,您可以使用win32_physicalmedia类。

为了确定安装窗口的驱动器,您可以使用function explientEnvironMentstrings()来扩展变量%windir。

如果您的体系结构允许的话,另一个选项是使用UuidCreate()在安装时间内生成随机GUID,并将其永久保存在注册表中。然后,只要注册表剩下,就可以将该GUID用作ID。新的注册表数据库通常被视为新的安装。

第三个选项是拥有分配ID的知名服务器。启动后,该软件可以查找注册表中的ID,如果找不到的话,将与服务器联系并为其提供其MAC地址,主机名,Harddisk序列号,机器SID和任何数量的凹痕信息(键)。

然后,服务器根据给出的信息确定客户端是否已注册。服务器可能具有轻松的策略,例如,仅需要大多数匹配键,因此即使在注册表中进行完整擦除,该机制也可以工作更换。

我认为到目前为止,在这里没有发现真正简单和独特的方法。

  1. GetVolumeInformation检索甚至不接近唯一的ID .....
  2. 使用任何硬件串行是有问题的,因为制造商不始终始终支持它,尤其是在全球范围内保持独特
  3. GetCurrenthwprofile检索GUID,但它的价值受未成年人的影响!硬件更改...
  4. 使用产品密钥...将带您处理被盗软件 - 全球有很多海盗装置。
  5. 创建自己的GUID并将其保存在注册表中(在任何地方)不会通过克隆的克隆来阻止重复。
    等...从我的角度来看,最好的方法是组合:音量ID + Mac的列表 +机器SID +机器名称。显然在服务器端管理许可证策略; 0)

关于米克尔。

对于漂亮的脑死测试,我使用的是OS的ProductID代码和计算机名称 - 都从注册表中提取。并不是真正的安全,但无论如何都假装安全性。

编辑

回答约翰关于我正在阅读的钥匙的问题:

软件 Microsoft Windows NT CurrentVersion Productid

系统 CurrentControlset Control Computername Computername Computername

如何使用CPU的序列号。我记得Microsoft曾经为此提供API,该API将运行必要的汇编代码,并将有关CPU的各种信息还给您,包括序列号。不确定它是否可以与AMD芯片一起使用,我认为它是特定于Intel的。

CPU ID肯定是安全且静态的!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top