5

好的,所以我使用 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地址而不是虚拟地址的代码,还是应该切换到主板?而且我不需要组合任何东西,我只需要在目标计算机上不会轻易改变的东西。

4

4 回答 4

2

如果您可以使用主板、网卡和硬盘驱动器中的值的组合,那就更好了。

您可以查看这篇文章:如何获取硬件信息(CPU ID、主板信息、硬盘序列号、系统信息……)

于 2012-08-02T10:25:02.847 回答
2

我认为类似于以下的方法将尽可能安全

  1. 您为用户提供软件的许可证密钥,与客户姓名或公司等相关联
  2. 用户在程序中输入此数据
  3. 每次启动程序时,它都会“打电话回家”发送许可信息
  4. 如果许可证(由您的系统)验证为有效,则该软件将收到一些实际使其能够运行的数据。否则无论如何它都不起作用(某些部分会丢失)。

除非获得许可,否则无法运行的一个示例(我从现在开始考虑 C#)将是制作一些基本方法extern。您将发送所需的程序集以响应有效许可证,或回退到“Gotcha!” 警告。

于 2012-08-02T10:50:35.127 回答
0

为此使用微软提供的东西。它们使用硬件标识符的组合。MAC 不好,因为它们通常可以更改。微软必然有一些唯一的安装标识符。

Windows 唯一标识符?

于 2012-08-02T10:27:39.653 回答
0

我个人会做以下事情,

  1. 抓住一些硬件钥匙。

    1. UUID
    2. 序列号
    3. 硬盘序列号
    4. 物理 MAC 地址(有关如何执行此操作的提示,请参见我的解决方案
  2. 允许其中一个(甚至两个)更改,同时保持许可证有效。

  3. 需要重新激活您的许可证。
  4. 跟踪客户的重新激活次数,并在您怀疑之前拥有某种最大值。

不要使用 WMI我估计至少有 1/10 次它不起作用。您将需要绕过 WMI 并使用 Windows API 获取这些硬件详细信息。

个人开发了类似的东西,它跟踪 10 种不同的东西(包括软件属性),并带有一些允许更改的逻辑。在第一个版本中使用 WMI 失败了。

于 2012-08-02T10:55:16.340 回答