Какой хороший способ однозначно идентифицировать компьютер? - PullRequest
48 голосов
/ 23 марта 2009

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

Помимо использования MAC-адреса с сетевой карты, есть ли у кого-нибудь другие методы (которые работают как в Windows, так и в Mac OS X) для уникальной идентификации компьютера?

Ответы [ 15 ]

38 голосов
/ 23 марта 2009

Другое решение заключается в использовании технологии лицензирования с ключом . Это небольшое устройство, которое подключается к USB или другому порту ввода-вывода на хосте и служит уникальным физическим ключом для активации программного обеспечения.

Третье решение - предоставить менеджер лицензий . То есть, когда программное обеспечение запускается, оно запрашивает сервер в сети (либо в локальной сети клиента, либо в вашей компании, к которому осуществляется доступ через вашу компанию через Интернет), который подтверждает, что использование программного обеспечения клиентом является законным. Это хорошее решение для «одновременных лицензий», так что клиенты могут устанавливать ваше программное обеспечение на многих хостах, но вы лицензируете его для одновременного использования на ограниченном количестве хостов. FLEXnet Publisher является примером решения для управления лицензиями.

MAC-адрес сетевой карты - это решение, которое я использовал в прошлый раз, когда работал в компании, которая лицензировала программное обеспечение для работы на определенном хосте.

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

"Мы обновили наш сервер до гигабита сетевой адаптер, а теперь и лицензия не будет работать, потому что новый адаптер имеет другой MAC-адрес. "

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

Вам также необходимо доверить клиенту прекращение использования вашего программного обеспечения на старом компьютере (или сетевом адаптере), если вы дадите ему новый ключ. Если вы не могли доверять им в первую очередь повиноваться лицензии, как вы можете верить, что они выбросят старый ключ?

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

10 голосов
/ 23 марта 2009

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

С учетом сказанного посмотрите на то, что, возможно, сделали другие, и, возможно, улучшите (или возьмите часть) это. MAC-адрес, как вы уже сказали, возможно, подходит для использования. Я слышал, что Windows и другие программы используют информацию о жестком диске (серийный номер) - согласно на этом сайте , Windows Activation проверяет 10 различных элементов и превращает их в уникальный ключ.

9 голосов
/ 17 сентября 2015

лучший способ взять UUID с помощью C # в Windows

Лучший способ однозначно идентифицировать Windows-машину

public string GetUUID()
{
    var procStartInfo = new ProcessStartInfo("cmd", "/c " + "wmic csproduct get UUID")
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    var proc = new Process() { StartInfo = procStartInfo };
    proc.Start();

    return proc.StandardOutput.ReadToEnd().Replace("UUID", string.Empty).Trim().ToUpper();
}
5 голосов
/ 23 января 2017

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

Вещи, которые будут улучшены: -Объем памяти -MAC (можно подделать, подключить USB-адаптеры и т. Д.)

Вещи, которые не обновляются часто: -ЦПУ -BIOS -Motherboard

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

wmic cpu get DeviceId /format:value

Это захватит идентификатор процессора, вы можете запустить эту команду для:

1 - ЦП (процессор: DeviceID) 2 - Материнская плата (базовая плата: серийный номер) 3 - BIOS (биос: серийный номер)

если вы не получите хотя бы 2 заполненных значения, тогда возьмите

4 - Сетевой адаптер - (ник: MACAddress) 5 - RAM - (мемфизический: серийный номер)

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

Вы можете использовать схему обмена ключами Диффи-Хеллмана, чтобы пользователь генерировал пару секретных / импульсных ключей с идентификаторами своего оборудования в качестве полезной нагрузки, а затем передавал эту информацию на сервер регистрации, где сервер регистрации использовал бы открытый / закрытый ключ для расшифровки полезной нагрузки и вычисления регистрационного ключа для возврата конечному пользователю. Мне нравится использовать JWT, чтобы передавать вещи назад и вперед с помощью открытых ключей, включенных в полезную нагрузку JWT. Надеюсь, это поможет.

UUID был упомянут выше, и это отличная идея, которую вы можете получить, используя следующую команду из вашего windows cmd.exe:

wmic csproduct get UUID /format:value      

Отказ от ответственности. Эти команды работают только для Windows, я думаю, 2000 и выше, но вам нужно проверить, возможно, они доступны для систем ниже 2000, но в этот момент я действительно стараюсь не поддерживать эти устройства. Удачи.

на Mac:

system_profiler | grep "Serial Number (system)"

В Linux (debian):

sudo dmidecode -t system | grep "Serial Number"

У dmidecode и system_profiler есть другие компоненты, с помощью которых они могут получать серийные номера, похожие на wmic в Windows. Я не работаю с macs, поэтому не могу подтвердить список точных спецификаций, но создание списка LCD (наименее общего знаменателя) серийных номеров для деталей, к которым имеют доступ все три команды, составлено и подготовлено к наименее вероятным части, которые будут модернизированы или изменены. Тогда комбинация из первых 2-3 хэшированных чисел может сделать уникальный идентификатор машины, который немного более надежным и позволяет кросс-платформенное приложение активироваться даже на устройстве с обновленной операционной системой.

5 голосов
/ 23 марта 2009

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

Вот если бы это было реальное требование. Моей первой задачей было бы попытаться убедить клиента, что это плохая идея.

Причина в том, что эти схемы практически никогда не предотвращают взлом вашего кода. Они, однако, делают жизнь ваших настоящих клиентов тяжелее. Мне трудно думать о любой другой отрасли, которая пытается раздражать своих подлинных клиентов схемами, которые никогда не достигают их целей (кроме государственных услуг, конечно: -).

Если вы должны сделать это, я просто приложу все усилия для выполнения договорных обязательств (однако не говорите об этом вашему клиенту). Взяв MAC-адрес (или случайное число, если, $DEITY запретить, у компьютера не было сетевой карты) в качестве ключа запроса, и с помощью программы просто наберите XOR его со строкой ASCII, чтобы получить ключ активации, кажется подходящим подходом. Я бы также сохранил оба ключа, поскольку вы не хотите, чтобы программное обеспечение деактивировалось, если они просто меняют свою сетевую карту (или даже материнскую плату) - они по-прежнему видят это как тот же компьютер и не будут рады, если программное обеспечение перестанет работать.

Ваш код будет взломан независимо (если программа не является мусором, что, я уверен, не так) - этот метод даст вашим подлинным клиентам возможность перенести их программное обеспечение на другую машину, если компания вашего клиента как-то перестает отвечать на запросы (прекращает поддержку, уходит из бизнеса и т. д.).

Основная проблема со всеми схемами, основанными на уникальности аппаратного обеспечения, заключается в том, что заказчик может изменить этот аппаратный бит:

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

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

4 голосов
/ 23 марта 2009

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

Некоторые аппаратные компоненты - MAC-адрес, серийный номер жесткого диска, даже серийный номер материнской платы и т. Д. - являются хорошими источниками «уникальности», но, как вы, возможно, знаете, если клиент решит обновить часть, от которой зависит лицензия ... будьте готовы к некоторой поддержке клиентов. Также следует помнить, что некоторые части могут быть подделаны (MAC является одной из них).

Проверка лицензии онлайн - еще один хороший способ - вы можете управлять всем на стороне сервера и даже определять свои собственные правила для него (сколько лицензий на клиент / установку, параллелизм и т. Д.), Но важно отметить, что что происходит, когда соединение не может быть установлено?

2 голосов
/ 09 июня 2017

Откройте реестр и перейдите к

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography

Найдите ключ с именем «MachineGuid», этот ключ генерируется уникально во время установки Windows и не изменится независимо от замены оборудования (кроме замены загрузочного жесткого диска, на котором установлена ​​ОС). Это означает, что если вы хотите отслеживать установку для каждой ОС, это еще одна альтернатива. Он не изменится, если вы не сделаете новую переустановку Windows.

2 голосов
/ 06 февраля 2014

Как насчет использования уникального серийного номера MotherBoard?

1 голос
/ 21 марта 2016

как насчет хэширования всего, что имеет сгоревший SN, жесткий диск, proc, ram и т.д.

1 голос
/ 21 мая 2013

Можно создать серийный ключ, который пользователь должен ввести один раз. Он должен включать адрес электронной почты пользователя (что-то вроде someuser@mailprovider.com-9828372-398232). Это остановит многих людей от попыток подделать их или передать другим. Во время активации программное обеспечение должно проверять наличие в базе данных серийного ключа по онлайновой базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...