Генерация идентификатора оборудования в Windows - PullRequest
16 голосов
/ 26 мая 2009

Каков наилучший способ создания уникального идентификатора оборудования в Microsoft Windows с C ++, который не легко подделать (например, с помощью изменения MAC-адреса)?

Ответы [ 6 ]

16 голосов
/ 26 мая 2009

Windows хранит уникальный Guid для каждой машины в реестре по адресу:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid
1 голос
/ 08 мая 2013

Существует множество «хитростей», но единственный реальный «физический ответ» - «нет, решения нет».

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

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

Если ваша проблема заключается в том, что вы не можете идентифицировать экземпляр программного обеспечения или лицензию, вам, вероятно, лучше сосредоточиться на другом виде решения: вы продаете лицензии «пользователям» (деньги есть у пользователя, а не у его компьютера). !), а не на свои «машины» (чтобы пользователи могли свободно менять их в любое время, когда они нуждаются / любят без вашего разрешения, поскольку вы не лицензируете оборудование или ОС ...), поэтому ваша проблема не в том, чтобы определить машина, но ПОЛЬЗОВАТЕЛЬ (учтите, что одна и та же машина может быть хостом для многих пользователей и что один и тот же пользователь может работать на разных машинах ..., вы не можете предполагать / навязывать соотношение 1: 1, не сталкиваясь с каким-либо проблем рано или поздно, когда эта идиома, если найден, больше не подходит).

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

Как видите, ответ в основном зависит от причины вашего вопроса, а не от самого вопроса.

1 голос
/ 12 августа 2012

Раньше это был серийный номер процессора, но сегодня существует много типов материнских плат, и этот фактор не является точным. MAC-адрес может быть легко подделан. Это оставляет нас с серийным номером внутреннего жесткого диска. Смотрите также: http://www.codeproject.com/Articles/319181/Haephrati-Searching-for-a-reliable-Hardware-ID

0 голосов
/ 07 января 2011

Вот программа (также доступна как DLL ), которая может считывать и показывать идентификатор вашего компьютера / оборудования: http://www.soft.tahionic.com/download-hdd_id/index.html

0 голосов
/ 27 мая 2009

Использование Win32 System HDS API. Не читайте реестр, это не имеет никакого смысла.

0 голосов
/ 26 мая 2009

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

...