Уникальная идентификация ПК на основе программного/аппаратного обеспечения

StackOverflow https://stackoverflow.com/questions/3636115

Вопрос

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

Это для приложения Windows, использующего wxWidgets, но подойдет Win32 или другой вариант.

Я думал о MAC-адресе, но как насчет ноутбуков, которые могут автоматически отключать сетевую карту в режиме энергосбережения?я наткнулся GetCurrentHwProfile но это не совсем похоже на то, что я хочу?

Это было полезно?

Решение

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

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

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

Другие советы

Одна идея у меня было некоторое время, чтобы это было использовать CryptProtectdata. как способ определить машину. За спиной в этом API Microsoft сделала то, что вы ищете. Я никогда не проверял это, хотя мне интересно, если это на самом деле жизнеспособно.

В основном вы бы кодируете постоянную волшебную ценность с CryptProtectData с участием CRYPTPROTECT_LOCAL_MACHINE, И в результате результат твой машинный идентификатор.

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

Как насчет использования серийного номера жесткого диска, на котором установлена ​​Windows?

Функция ПолучитьОбъемИнформацию() даст вам такой серийный номер.Чтобы получить доступ к идентификатору, назначенному поставщиком жесткого диска, вместо идентификатора, назначенного Windows, вы можете использовать класс Win32_PhysicalMedia.

Чтобы определить диск, на котором установлена ​​Windows, вы можете расширить переменную «%windir» с помощью функции ExpandEnvironmentStrings().

Другой вариант, если позволяет ваша архитектура, — использовать UuidCreate() для генерации случайного GUID во время установки и постоянного сохранения его в реестре.Этот GUID затем можно использовать в качестве идентификатора, пока сохраняется реестр.Новая база данных реестра обычно рассматривается как новая установка.

Третий вариант — использовать известный сервер, назначающий идентификаторы.После запуска программное обеспечение могло искать идентификатор в реестре и, если он не был найден, связывалось с сервером и предоставляло ему его MAC-адрес, имя хоста, серийный номер жесткого диска, SID компьютера и любое количество идентифицируемой информации (ключей).

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

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

  1. GetVolumeInformation извлекает даже не близко к уникальному идентификатору .....
  2. Для использования любого оборудования Serial проблематично, поскольку производители не обязаны поддерживать его всегда и особенно, чтобы сохранить его во всем мире уникальным
  3. Getcurrenthwprofile извлекает GUID, но это ценность, затронутое несовершеннолетним! Изменения оборудования ...
  4. Используя ключ продукта ... принесет вам иметь дело с украденным программным обеспечением - там много пиратских установок по всему миру.
  5. Создание собственного руководства и сохранение его в реестре (в любом месте) не предотвратит дублирование с помощью клонирования изображения ....
    и т. Д. ... С моей точки зрения View Лучший способ сочетается: Volume ID + Mac's List + Machine Sid + Matcher Name. И, очевидно, управлять лицензионной политикой на стороне сервера; 0)

С уважением Микель.

Для довольно мертвого теста головного мозга я использую код продукта ОС и имени компьютера - оба извлечены из реестра. Не совсем безопасно, но все равно все делает безопасность.

редактировать

Ответить на вопрос Джона о каких ключах я читаю:

Программное обеспечение Microsoft Windows NT Centreversion ProductiD

Система currentControlset Control Computername Computername Computer

Как насчет использования серийного номера ЦП. Я помню, как Microsoft используется для предоставления API для этого, которая будет запустить необходимый код ассемблера и вернуть вас всевозможные данные о процессоре, включая серийный номер. Не уверен, что ли это будет работать с amd чипсами или нет, я думаю, что это была конкретная.

Конечно, ID CPU безопасен и достаточно статичен !!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top