Как я могу однозначно идентифицировать машину на C?

Я хочу однозначно идентифицировать машину в C.

Ниже приведены источники, у которых есть серийные номера, но их уникальность или наличие не гарантируется (например, съемный жесткий диск или сетевая карта).

  • ЦП: я использую инструкцию cpuid, однако серийный номер не реализован ни для одного процессора, кроме Pentium 3, т.е. не имеет значения. Я могу использовать сигнатуру процессора, но она не будет уникальной для каждого процессора.
  • HDD:?
  • BIOS:?
  • системная плата: ?
  • MAC-адрес: через вызовы системных функций.

Для всех вопросительных знаков, как мне получить серийные номера на C? Если вы ответите системно-зависимым решением, укажите как Windows / * nix. Также для Windows не используйте WMI.

Спасибо!


person chacham15    schedule 16.09.2011    source источник
comment
Вы хотите шпионить за пользователями вашей программы?   -  person Jens Gustedt    schedule 16.09.2011
comment
Как наличие серийных номеров означает шпионаж?   -  person chacham15    schedule 16.09.2011
comment
Просто потому, что вы можете отслеживать индивидуальное поведение. Представьте, что вы реализуете это в веб-браузере. Затем это можно было бы использовать для отслеживания всех веб-доступов с помощью этого браузера с определенного компьютера, независимо от того, под каким веб-идентификатором он себя представляет. Таким образом, это может быть легко использовано для нарушения конфиденциальности.   -  person Jens Gustedt    schedule 16.09.2011
comment
Ах, видите, вот где вы делаете ошибку. Этот код является исполняемым файлом на стороне клиента. Нет необходимости в серийных номерах, сама программа могла бы отслеживать все использование компьютера с помощью ключевого журнала, если бы это было ее целью.   -  person chacham15    schedule 16.09.2011
comment
Нет, я не думаю, что совершил ошибку. Я хорошо знаю концепцию печенья. Файлы cookie (по крайней мере, в принципе) могут быть удалены пользователем, и вежливое программное обеспечение спрашивает нас, разрешаем ли мы их хранить. Использование cpuid для таких вещей является вредоносным, поскольку я не могу легко изменить свой cpuid, поскольку я могу удалить файл cookie.   -  person Jens Gustedt    schedule 16.09.2011
comment
Я хочу аутентифицировать только одну машину, а не другую. Проблема с файлом cookie заключается в том, что его можно скопировать, что является дырой в безопасности. Более того, все, что можно удалить, можно скопировать. Видите проблему?   -  person chacham15    schedule 16.09.2011
comment
Нет, у меня есть решение: серийные номера. Я как раз объяснял Йенсу необходимость ...   -  person chacham15    schedule 16.09.2011


Ответы (1)


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

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

Использование этого подхода специально для активации программного обеспечения защищено патентом, который активно применяется, поэтому будьте осторожны с тем, что вы делаете. Если вы действительно хотите сделать это для защиты своего программного обеспечения, возможно, лучше использовать коммерческое решение. Некоторые вполне доступны. Google "активация программного обеспечения" для вариантов.

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

Жесткий диск Windows http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx < / а>

Жесткий диск Linux http://www.webmasterworld.com/forum40/957.htm

BIOS Windows http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx

BIOS Linux http://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/

MAC-адрес Windows C ++: получить MAC-адрес сетевых адаптеров в Vista?

MAC-адрес Linux http://www.linuxquestions.org/questions/programming-9/linux-determining-mac-address-from-c-38217/

person Eric J.    schedule 16.09.2011
comment
Что касается ссылок на окна, я специально заявил, что нет WMI. Что касается ссылки на linux bios, то это версия, а не серийный номер. - person chacham15; 16.09.2011
comment
@Eric J. Я ценю ваше упоминание о существующем патенте! Есть идеи, когда он истечет? - person Dave; 05.12.2013
comment
@supertwang: Это патент, заканчивающийся на 216, принадлежащий Uniloc. Не уверен в сроке годности. См. en.wikipedia.org/wiki/Uniloc. - person Eric J.; 05.12.2013