Mac或主板作为许可用途的唯一标识符?

时间:2012-08-02 10:23:53

标签: c# .net visual-studio-2010 hardware

好的,所以我使用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 个答案:

答案 0 :(得分:2)

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

您可以查看此文章:How To Get Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information , ...)

答案 1 :(得分:2)

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

  1. 您向用户提供该软件的许可密钥,该密钥与客户的姓名或公司
  2. 用户在程序中输入此数据
  3. 每次启动该程序时,它都会“发送电话回家”发送许可信息
  4. 如果许可证(由您的系统)验证有​​效,软件将收到一些实际上能够运行的数据。否则无论什么都行不通(某些部分会丢失)。
  5. 一个例子(我认为C#从现在开始)除非获得许可否则无法运行,将会制作一些基本方法extern。您将发送所需的程序集以响应有效的许可证,或者回退到“Gotcha!”警告。

答案 2 :(得分:0)

使用微软提供的东西。他们使用硬件标识符的组合。 MAC很糟糕,因为它们通常可以更改。 Microsoft必然会有一些独特的instlalation标识符。

Windows Unique Identifier?

答案 3 :(得分:0)

我个人会做以下事情,

  1. 获取许多硬件密钥。

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

  3. 需要重新激活许可证。
  4. 跟踪客户的重新激活次数,并在您出现疑问之前最多进行某种重新激活。
  5. 不要使用WMI 我估计至少1/10不起作用。您需要绕过WMI并使用Windows API获取这些硬件详细信息。

    开发类似的东西,它跟踪10种不同的东西(包括软件属性)和一些允许更改的逻辑。在第一个版本中,使用WMI表面看跌了。