Подтвердить что ты не робот

С# Создание уникального идентификатора на основе идентификаторов оборудования

Я создаю лицензию, специфичную для машины. Лицензия основана на следующих элементах:

  • MAC-адрес
  • Серийный номер процессора
  • Объем компьютера Последовательный номер диска0

Я предполагаю, что если 2 из 3 соответствуют, то моя лицензия действительна. Таким образом, может появиться новая сетевая карта, и лицензия все еще действительна и т.д.

Является ли это хорошим подходом или у меня возникнут проблемы с тем, что это не соответствует или не меняется регулярно?

Я пытаюсь получить уникальный идентификатор для компьютера, чтобы я мог проверить лицензию.

Пожалуйста, дайте мне знать, как это выглядит или у вас есть лучшее решение!

Еще раз спасибо!

** ЗДЕСЬ, ЧТО Я ПРИНИМАЮ С **

В итоге я использовал только VolumeSerial, CpuId и VideoControllerDescription.

    public enum HardwareProfileComponents
    {
        ComputerModel,
        VolumeSerial,
        CpuId,
        MemoryCapacity,
        VideoControllerDescription
    }

    public static Dictionary<string, string> HardwareProfile()
    {
        var retval = new Dictionary<string, string>
                         {
                             {HardwareProfileComponents.ComputerModel.ToString(), GetComputerModel()},
                             {HardwareProfileComponents.VolumeSerial.ToString(), GetVolumeSerial()},
                             {HardwareProfileComponents.CpuId.ToString(), GetCpuId()},
                             {HardwareProfileComponents.MemoryCapacity.ToString(), GetMemoryAmount()},
                             {HardwareProfileComponents.VideoControllerDescription.ToString(), GetVideoControllerDescription()}
                         };
        return retval;

    }

    private static string GetVideoControllerDescription()
    {
        Console.WriteLine("GetVideoControllerDescription");

        var s1 = new ManagementObjectSearcher("select * from Win32_VideoController");
        foreach (ManagementObject oReturn in s1.Get())
        {
            var desc = oReturn["AdapterRam"];
            if ( desc == null) continue;
            return oReturn["Description"].ToString().Trim();
        }
        return string.Empty;
    }


    private static string GetComputerModel()
    {
        Console.WriteLine("GetComputerModel");
        var s1 = new ManagementObjectSearcher("select * from Win32_ComputerSystem"); 
        foreach (ManagementObject oReturn in s1.Get())
        {
            return oReturn["Model"].ToString().Trim();
        }            
        return string.Empty;
    }

    private static string GetMemoryAmount()
    {
        Console.WriteLine("GetMemoryAmount");
        var s1 = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
        foreach (ManagementObject oReturn in s1.Get())
        {
            return oReturn["Capacity"].ToString().Trim();
        }
        return string.Empty;
    }

    private static string GetVolumeSerial()
    {
        Console.WriteLine("GetVolumeSerial");
        var disk = new ManagementObject(@"win32_logicaldisk.deviceid=""c:""");
        disk.Get();

        string volumeSerial = disk["VolumeSerialNumber"].ToString();
        disk.Dispose();

        return volumeSerial;
    }

    private static string GetCpuId()
    {
        Console.WriteLine("GetCpuId");
        var managClass = new ManagementClass("win32_processor");
        var managCollec = managClass.GetInstances();

        foreach (ManagementObject managObj in managCollec)
        {
            //Get only the first CPU ID
            return managObj.Properties["processorID"].Value.ToString();
        }
        return string.Empty;
    }
4b9b3361

Ответ 1

Вот довольно приличная статья о том, как MS это сделала с Windows XP. Возможно, не совсем то, что вы ищете, но это отличная точка перехода.

Развернуть объяснение Windows XP

Какое оборудование проверяет Windows?

Система проверяет эти десять категорий аппаратного обеспечения:

  • Адаптер отображения
  • Адаптер SCSI
  • Адаптер IDE (фактически, материнская плата)
  • Сетевой адаптер (NIC) и его MAC-адрес
  • Объем оперативной памяти (т.е. 0-64mb, 64-128mb и т.д.).
  • Тип процессора
  • Серийный номер процессора
  • Устройство жесткого диска
  • Серийный номер тома жесткого диска (VSN)
  • CD-ROM/CD-RW/DVD-ROM

Ответ 2

Не совсем ответ, а слово предостережения. Я работал в компании-разработчике программного обеспечения, которая выполняла аналогичный механизм лицензирования, и она была... хрупкой. Особенно на ноутбуках. Рассмотрим:

  • При переключении между проводной и беспроводной сетью на ноутбуке у вас будет отдельный MAC-адрес на каждом интерфейсе.

  • При изменении MAC-адреса могут быть преимущества. например, некоторые провайдеры кабельного интернета в штатах глупо связывают ваш MAC-адрес с вашей учетной записью, и, возможно, придется подключить их компьютер прямо к кабельному модему, а затем клонировать их MAC-адрес маршрутизатора, если их маршрутизатор должен умереть.

  • Если пользователь загружался с другого жесткого диска (например, флеш-накопителя или USB-накопителя), изменилось бы то, что сообщалось как первый диск?

И это было задолго до дней виртуализации товара. Теперь подумайте, что вы можете переключать настройки и перезагружать свою виртуальную машину и иметь: различный объем оперативной памяти, жесткий диск другого размера, тип типа виртуального жесткого диска (IDE, SCSI, возможно, несколько интерфейсов контроллера SCSI). И вы можете подключать CD/DVD-устройства с горячей заменой и изменять настройки NIC с помощью мыши.

Поэтому я не говорю "не делай этого" точно, но я попрошу вас протестировать этот механизм на столько машин, сколько вы можете, и я буду предлагать, чтобы ваш у пользователей будет очень мало терпения, если они не смогут запустить программное обеспечение, за которое они заплатили.

Вы рассматривали аппаратные ключи?

Ответ 3

Я обнаружил, что MAC-адрес сейчас не стоит проверять. Каждый компьютер имеет более одного сетевого адаптера, любой из которых может быть внешним устройством, которое может или не может присутствовать в любой момент времени. Мы выкатили систему, которая много лет уделяла много внимания MAC-адресу, и это в конечном итоге стало катастрофой обслуживания клиентов.

С другой стороны, относительно редко можно заменить ваш процессор, материнскую плату, контроллеры шины/диска или основной жесткий диск.