我在许可过程中创建了一个小硬件锁。在安装之前会生成(希望)唯一的硬件ID,并将其编码为许可证文件的一部分。每当我的应用程序启动时,都会重新生成硬件密钥并将其与已注册的密钥进行比较。
实际上,硬件密钥是指基于the solution by Alex Sutu的第一个CPU,BIOS和主板信息。
到目前为止一直很好 - 现在,系统在虚拟环境中运行,其中新的CPU动态链接 - 因此CPU的顺序发生变化。使用无效的密钥,软件不再运行 - 我想要和期望的,而不是我的客户。因此,我必须稍微改变一下这个过程。
据我所知,Windows 7(甚至以前的版本)在其激活/注册ID中具有某种强大功能 - 较小的硬件更改并未使激活/许可无效 - 这就是我想在我的模仿许可背景。
我找到了一点解释here - 这让我想到了以下一般过程:
注册:
启动应用程序时:
实际上,使用WMI查询生成硬件ID需要很长时间(有点介于4到8秒之间)。
static string identifier(string wmiClass, string wmProperty)
{
string result = "";
var mc = new ManagementClass(wmiClass);
var moc = mc.GetInstances();
foreach (var mo in moc)
{
if (result == "")
{
try
{
result = mo[wmProperty].ToString();
//Only get the first one
break;
}
catch
{
}
}
}
return result;
}
示例电话:
string retVal = identifier("Win32_Processor", "UniqueId");
所以我有点不确定,是否考虑更多的ID是正确的选择。
因此最后的问题: 这是创建强大的硬件许可的实用方法还是我错过了一点? 其次,如果这是最先进的技术,我的WMI是正确的还是有更好的方法?
提前多多感谢!
答案 0 :(得分:0)
您的方法通常是正确的。收集不同的标识符,安全地存储它们并颁发许可证。只要只有少数标识符发生了变化,您就可以将存储更新为新值,但仍然运行应用程序。
截至收集硬件信息时,您可以开始以锁定模式加载应用程序"。一旦硬件标识符可用,您检查许可证并异步解锁应用程序。这样您就不会受到通信延迟的限制 - 我使用这种方法对远程服务器进行许可验证。