Какие аппаратные идентификаторы на самом деле считываются
Серийники платы и дисков, SMBIOS UUID, MAC-адреса, TPM, GPU UUID, ID томов и MachineGuid: где хранится каждый и что спуфер уровня ядра может и не может изменить.
Коротко
Программы считывают не один HWID, а связанный набор: серийные номера материнской платы и дисков, SMBIOS UUID, MAC-адреса, состояние TPM, GPU UUID, идентификаторы томов и MachineGuid. Спуфер уровня ядра может изменить то, что Windows сообщает о большинстве из них, но не значения в подписанной прошивке.
На странице10
- Существует ли единый HWID?
- Где хранится каждый идентификатор и можно ли его подменить?
- Что меняет спуфер уровня ядра?
- Чего спуфер уровня ядра изменить не может?
- Почему несовпадающие значения бросаются в глаза?
- Может ли один пропущенный идентификатор перечеркнуть остальные?
- Что выдаёт вас, кроме железа?
- Стоит ли править эти значения самому?
- Частые вопросы об аппаратных идентификаторах
- Источники
Существует ли единый HWID?
Нет. HWID — удобное сокращение для того, чего в виде одного значения не существует. Существует набор идентификаторов, каждый из которых считывается своим способом и имеет своё происхождение и срок жизни. Программа, которая хочет узнавать компьютер, читает несколько из них и сохраняет комбинацию, часто в виде общего хэша. Именно поэтому частичные изменения так слабы: оставшихся значений обычно хватает, чтобы набор совпал.
Где хранится каждый идентификатор и можно ли его подменить?
В последней колонке подменяемость означает то, что инструмент уровня ядра может изменить в ответах операционной системы. Это никогда не значит, что физическое значение внутри чипа перезаписано.
| Идентификатор | Где хранится | Как читается | Обычная подменяемость |
|---|---|---|---|
| Серийный номер материнской платы | Таблицы SMBIOS в прошивке платы | Win32_BaseBoard | Значение, которое отдаёт ОС, обычно подменяют. Значение, записанное в прошивке, — нет |
| UUID системы | Системная информация SMBIOS, задаётся при производстве | Win32_ComputerSystemProduct | Обычно подменяется на уровне ОС. Читается повсеместно, поэтому часто входит в набор |
| Серийный номер и версия BIOS | Прошивка платы | Win32_BIOS | Отдаваемое значение обычно подменяют; значение, не соответствующее модели платы, само по себе служит сигналом |
| Серийные номера дисков | Собственная прошивка накопителя, отдаётся по команде identify SATA или NVMe | Win32_DiskDrive, API накопителей | Значение, которое отдаёт ОС, обычно подменяют. Настоящий серийник накопитель всё равно помнит |
| Серийный номер и GUID тома | Метаданные файловой системы на разделе, создаются при форматировании | vol, Get-Volume, API томов | Меняется при форматировании и обычно генерируется заново. Читается легко, поэтому пропущенное значение так же легко даёт совпадение |
| MAC-адреса | EEPROM сетевого адаптера, а поверх него — слой переопределения на уровне ОС | getmac, Win32_NetworkAdapter | Отдаваемый адрес обычно подменяют. Зашитый адрес остаётся в адаптере |
| Идентификатор TPM и ключи аттестации | Чип TPM, ключи сертифицированы производителем | Win32_Tpm, API аттестации платформы | Подделать нельзя. Ключ, подписанный производителем, программно не выдумать, хотя состояние TPM можно сбросить или отключить само устройство — и у каждого варианта свои последствия |
| GPU UUID | Собственная прошивка видеокарты, отдаётся драйвером производителя | Утилиты и API драйвера производителя | Спуфер уровня ОС его обычно не меняет. Читается через драйвер производителя, а не через SMBIOS |
| MachineGuid в реестре | Значение реестра, создаваемое при установке Windows | Ключ Cryptography в HKLM | Чисто системное значение: меняется при чистой установке и обычно генерируется заново |
| Идентификаторы установки и продукта Windows | Реестр, записываются при установке и активации | Реестр и API лицензирования | Значения операционной системы, сбрасываются чистой установкой |
| Идентификация процессора | Сам процессор | CPUID | На потребительских процессорах сообщает модель, а не серийный номер конкретного экземпляра, поэтому это слабый идентификатор и решающим бывает редко |
| Серийный номер монитора в EDID | Собственная прошивка дисплея | API дисплеев и ключ дисплеев в реестре | Сам по себе не идентификатор компьютера, но он читается и никуда не девается, когда вы меняете комплектующие ПК |
Таблица показывает, где хранятся значения и как они читаются. Это не список того, что нужно править: почему — объяснено в предупреждении о ручной правке.
Что меняет спуфер уровня ядра?
Инструмент уровня ядра работает ниже API, которыми пользуются обычные программы. Когда клиент запрашивает у Windows серийный номер диска или платы, он получает тот ответ, который подставил инструмент. Это действительно сильный приём, потому что почти всё, что читает идентификаторы, читает их именно этими путями. Но больше ничего и не происходит: инструмент меняет ответ, а не чип.
Чего спуфер уровня ядра изменить не может?
Ему не поддаются три вида значений. Первый — всё, что хранится в подписанной прошивке, и прежде всего то, что сертифицирует TPM. Эти значения нельзя подделать, потому что подпись делается ключом, которого у инструмента нет. Второй — значения, которые читаются путём, не охваченным инструментом: например, идентификатор GPU, полученный через драйвер производителя, возвращается неизменённым. Третий — физические значения, и они остаются физическими. Накопитель по-прежнему знает свой серийник, а сетевой адаптер — свой зашитый адрес, что бы ни сообщала поверх них Windows. Инструмент, который утверждает обратное, описывает маркетинг, а не механизм.
Справка
Почему несовпадающие значения бросаются в глаза?
Набор идентификаторов, которые не сочетаются друг с другом, заметнее исходного. Представьте серийник платы от ноутбука на десктопном чипсете или серийник диска в формате, которым этот производитель никогда не пользовался. Точно так же выделяются несуществующая модель платы или значения, которые меняются при каждом чтении. Каждый такой случай — сам по себе узнаваемый паттерн, поэтому случайные значения — не то же самое, что безопасные. И поэтому правдоподобие значений, которые выбирает инструмент, важнее числа полей, которые он трогает.
Может ли один пропущенный идентификатор перечеркнуть остальные?
Если записанный набор состоял из восьми значений и семь из них теперь читаются иначе, восьмое всё равно может совпасть со старой записью. Совпадёт ли — зависит от того, как разработчик сопоставляет значения, а это не публикуется, так что исходите из того, что всё решает самое слабое звено. Это и есть практический довод проверять каждое значение, которое можно прочитать, а не доверять итоговому экрану.
Что выдаёт вас, кроме железа?
Люди покупают аппаратный инструмент в расчёте, что он справится и с этим, но он не справляется — как и любой другой локальный инструмент.
- Сам аккаунт и всё, что платформа записала за ним
- Почта и номер телефона, привязанные к этому аккаунту
- Способ оплаты, которым куплена игра или пополнен баланс платформы
- Ваш IP-адрес, провайдер и сеть, в которой вы играете
- Как вы играете: траектории прицела, тайминги, статистические выбросы, количество жалоб
- Список друзей и те, с кем вы ходите в пати
- Всё, что вы сами рассказываете о себе в публичных каналах
Внимание
Стоит ли править эти значения самому?
Нет. Не редактируйте эти значения вручную — ни в реестре, ни в прошивке платы. Ручная правка грозит тем, что компьютер перестанет загружаться, слетит активация и дело дойдёт до спора по гарантии. Кроме того, набор идентификаторов может стать настолько несогласованным, что будет заметнее исходного. Если хотите посмотреть, что сообщает ваш компьютер, в гайде по проверке есть команды, которые работают только на чтение. Изменения — работа инструмента, и делать их должен только инструмент, созданный для этого.
Частые вопросы об аппаратных идентификаторах
Какой идентификатор на самом деле используют античиты?
Это не публикуется, у разных разработчиков по-разному и со временем меняется. Всё, что гуляет по сети о конкретных весах, — выводы сообщества, поэтому рассчитывайте на весь набор, а не на одно значение.
Поможет ли замена диска против HWID-бана?
Рассчитывать на это нельзя. Если в записанный набор входили значения платы, UUID, MAC или TPM, новый диск меняет один элемент, а остальные по-прежнему совпадают.
Меняет ли чистая установка Windows мой HWID?
Она меняет значения операционной системы, такие как MachineGuid, идентификаторы установки и серийные номера томов, но не трогает ничего в прошивке. Сама по себе это не смена аппаратного отпечатка.
TPM — это проблема?
Это элемент, с которым сложнее всего разобраться честно, потому что его ключи сертифицированы производителем и подделать их нельзя. Что можно сделать с состоянием TPM, зависит от вашей платы и инструмента, но любой, кто заявляет, что подделывает аттестацию, преувеличивает.
Важна ли смена MAC-адреса, если я сижу через Wi-Fi?
У каждого адаптера, проводного или беспроводного, свой адрес, и прочитать можно любой из них. Проверьте все адаптеры, а не считайте, что виден только тот, через который вы подключены.
Источники
Кроме серийника EDID, таблица — результат работы на стенде: команда считывала эти значения на собственных компьютерах. Ни один разработчик античита не публикует, какие из них он использует.
- 01VESA E-EDID standard, release A2
серийный номер, который монитор хранит в собственных данных EDID
glenwing.github.io
Читать дальше
Не получилось? Откройте тикет в Discord
Все гайды