Вопрос

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

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

Решение

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

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid

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

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

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

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

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

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

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

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

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

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

Используйте API-интерфейсы HDS системы Win32.Не читайте реестр, это вообще не имеет смысла.

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