好的,所以我使用MAC地址作为唯一标识符,一切顺利,直到我激活VPN并且mac地址改变了.....
所以,我有两个选择:
1)获取实际物理网卡的MAC地址
对于mac地址,我找到了一些如何实现这一目的的提示:
2.。)获取主板ID并使用它,并希望我们不会得到2台具有相同ID的计算机(可能吗?)
public String getMotherBoardID()
{
String serial = "";
try
{
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard");
ManagementObjectCollection moc = mos.Get();
foreach (ManagementObject mo in moc)
{
serial = mo["SerialNumber"].ToString();
}
return serial;
}
catch (Exception)
{
return serial;
}
}
你怎么说?我应该尝试挖掘并找到从卡中获取mac地址而不是虚拟地址的代码,还是应该切换到主板?而且我不需要结合任何东西,我只需要在目标计算机上不会轻易改变的东西。
答案 0 :(得分:2)
如果您可以使用主板,网卡和硬盘驱动器中的值组合,效果会更好。
您可以查看此文章:How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...)
答案 1 :(得分:2)
我认为类似于以下的方法会尽可能安全
一个例子(我认为C#从现在开始)除非获得许可否则无法运行,将会制作一些基本方法extern
。您将发送所需的程序集以响应有效的许可证,或者回退到“Gotcha!”警告。
答案 2 :(得分:0)
使用微软提供的东西。他们使用硬件标识符的组合。 MAC很糟糕,因为它们通常可以更改。 Microsoft必然会有一些独特的instlalation标识符。
答案 3 :(得分:0)
我个人会做以下事情,
获取许多硬件密钥。
允许其中一个(或甚至两个)更改,同时保持许可证有效。
不要使用WMI 我估计至少1/10不起作用。您需要绕过WMI并使用Windows API获取这些硬件详细信息。
开发类似的东西,它跟踪10种不同的东西(包括软件属性)和一些允许更改的逻辑。在第一个版本中,使用WMI表面看跌了。