Мысли о работе античитов (CS:GO Faceit, Escape from Tarkov и остальные игры…)

Все современные античиты банят по HWID (как говорится — по железу). В данной статье изложены мысли по работе античитов (BattlEye, EAC, FaceIT Client, VAC). Это не совсем технический обзор в плане выкладок кода (их практически не будет), это обзорная статья — показывающая те или иные нюансы работы античитов. А так же правильное оборудование — чтобы бан по железу — вам казался мифом.

Что такое HWID?

HWID — это абстрактный термин, так или иначе состоящий из серийников определенного оборудования. Различные античиты используют различные методы вычисления HWID (определённый список оборудования). Например, для EAC HWID включает в себя серийный номер монитора, а FaceIt нет. Поэтому спуфер должен быть написан под конкретный античит (т.к. есть и различие в их работе , с точки зрения кода). Так же в HWID зачастую включается и ip адрес (его я тоже рекомендую менять, при получения бана). Список оборудования, имеющее серийные номера:

  1. Серийные номера жестких дисков
  2. MAC адрес сетевой карты
  3. Информация, содержащаяся в SMBIOS (серийный номер, GUID, модель материнской платы, серийные номера модулей памяти)
  4. Серийные номера мониторов
  5. Видеокарты Nvidia имеют уникальный UUID, видеокарты Radeon не содержат серийного номера (UUID)
  6. MAC адреса устройств в сети (например, роутера)

Так же в HWID включается и информация о системе (нас это не особо интересует, т.к. правильное решение — это переустановка чистой ОС после получения бана по железу):

  1. Ключи реестра windows
  2. Filesystem UUIDs (такие как volume guids и disk ids)
  3. boot GUID/bcdedit UUIDs
  4. и так далее…

Использовать ли спуфер?

Всегда можно пойти и купить приватный спуфер, но никто вам не даст гарантии, что он не будет обнаружен античитом. Все селлеры будут утверждать — что у нас все ок, он не детектится и тд и тп. Оно и понятно. Но в любом случае вопрос детекта — это лишь вопрос времени. И даже если вы сами его написали или модифицировали готовый — это лишь временное решение (вы же не хотите контролировать\реверсить каждый апдейт античита). Из публичных спуферов рекомендую rainbow (он достаточно понятен и код простой) — он запускается до ОС (это даже не драйвер). Но, естественно, его нужно модифицировать.

Чистая установка Windows

При бане по железу вы всегда должны делать чистую установку Windows, все эти манипуляции нужно делать до установки античита. При установке вы всегда должны удалять старый раздел с ОС (для того, что бы сгенерировались новые GUID\UUID разделов). Вообще, я рекомендую для игры иметь отдельный SSD — благо они не дорогие, но об этом ниже). В установщике Windows это должно выглядеть как «Неразмеченное место» — и заново создать раздел. Так же нельзя заходить в старые учетные записи steam, discord и прочее (да, да, описываемые выше античиты это анализируют). Всё не нужное оборудование должно быть запрещено к установке (например, внешние USB HDD, веб-камеры и прочее не нужное для игры) через политики администрирования. Давать лишнюю информацию для анализа античитом — не следует. Т.к. если нет инициализации устройства — нет и его серийного номера. Например, у меня есть дополнительное оборудование, да и в моей материнской плате есть и WiFi и Bluetooch — а они имеют свои MAC адреса, я просто запрещаю их установку (можно, конечно, отключить данные модули в BIOS, но это лишние телодвижения). SSD M.2 — так же не имеют возможности отключения в bios — их установку тоже нужно запрещать (у меня отдельный SATA SSD для подобных игр).

ID оборудования можно взять в «Диспетчере устройств»

О жестких дисках

Я использую отдельный SATA SSD с чистой Windows. Речь идет о таких SSD, которые имеют публичные прошивки. Список серийный номеров жестких дисков можно посмотреть командой

C:\Users\user>wmic diskdrive get model,name,serialnumber
Model                           Name                SerialNumber
ADATA SU150                     \\.\PHYSICALDRIVE0  3L972L86Q51E
Samsung SSD 980 EVO Plus 500GB  \\.\PHYSICALDRIVE1  0035_385A_96B2_3331.
WD Elements 21A3 USB Device     \\.\PHYSICALDRIVE2  2SG9P1D4

Например, я люблю SSD, которые выпущены на основе микроконтроллера SM2258XT — они стоят достаточно дешево (2000-2500 рублей, всегда можно заказать их на aliexpress или купить на Яндекс маркете). Так же они отлично перепрошиваются, единственный нюанс, который нужно учесть — это установленные модули памяти (т.к под свои типы банков памяти — свои прошивки, но в случае с SM2258XT — прошивок море). Сами прошивки можно взять тут. Разбираете SSD — смотрите маркировку на чипах памяти, находите прошивку, замыкаете перемычку на SSD — для перевода его в отладочный режим — и накатываете новую прошивку прямо из под windows (на usbdev.ru — есть подробные инструкции). На этапе прошивки можно указать новый серийный номер, а так же сменить информацию о производителе.

Пример разобранного SATA SSD на микроконтроллере SM2258XT
Пример изменения серийного номера SSD
Достаточно дешевый SSD на основе SM2258XT

О сетевых картах и MAC адресах

Я рекомендую отключить встроенную сетевую карту и использовать внешнюю. Т.к. если мы захотим поменять MAC адрес встроенной — нам придется делать полный дамп с микросхемы BIOS, редактировать и заливать заново. А количество перезаписи чипа BIOS — ограничено. Мы же будем использовать те сетевые карты, которые поддерживает перепрошивку посредством ethtool. Например, я использую «ASIX AX88772B»

ASIX AX88772B

Для перепрошивки мне понадобиться linux и ethtool. Для начала убедимся, что у нас нужная сетевая карта (а то вдруг китайцы сделали ребрендинг :)) . Я использую usb stick с debian-based системой для этого.

$ sudo ethtool -i eth0
driver: asix
version: 22-Dec-2011
firmware-version: ASIX AX88772B USB 2.0 Ethernet
expansion-rom-version: 
bus-info: usb-0000:00:14.0-2
supports-statistics: no
supports-test: no
supports-eeprom-access: yes
supports-register-dump: no
supports-priv-flags: no

Как мы видим — все окей, у нас нужная сетевая карта, да и есть поддержка supports-eeprom-access. Проверим текущий MAC адрес (сейчас он 00:50:b6:33:c5:e5):

$ ip a show dev eth0
9: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:50:b6:33:c5:e5 brd ff:ff:ff:ff:ff:ff

Посмотрим что у нас в EEPROM (прошивке) сетевой карты:

$ ethtool -e eth0
Offset		Values
------		------
0x0000:		15 5a ec 75 20 12 29 27 00 50 b6 33 c5 e5 09 04 
0x0010:		60 22 71 12 19 0e 3d 04 3d 04 3d 04 3d 04 80 05 
0x0020:		00 06 10 e0 42 24 40 12 49 27 ff ff 00 00 ff ff 

Как видите, ethtool возвращает некоторые двоичные данные в шестнадцатеричном формате, которые представляют собой содержимое EEPROM устройства. 9-й байт в первой строке (смещение 0x08) — это первый байт MAC-адреса. Прежде чем продолжить, сделайте резервную копию EEPROM на случай, если что-то пойдет не так. Дамп можно создать командой:

$ ethtool -e eth0 raw on > eeprom-backup.bin

Для начала проверим, верно ли мы выбрали смещение

$ ethtool -e eth0 offset 0x08 length 6
Offset		Values
------		------
0x0008:		00 50 b6 33 c5 e5

Да, все верно, по этому адресу у нас действительно находится наш MAC адрес. Сама команда для записи в EEPROM выглядит следующим образом:

$ ethtool -E eth0 magic <N> offset <N> value <N>

magic — это константа от вендора, она обязательна для внесения изменений в прошивку, её значение можно подсмотреть в исходниках linux (смотри константу AX_EEPROM_MAGIC в asix.h). Теперь мы можем прописать новый MAC в EEPROM сетевой карты

$ ethtool -E eth0 magic 0xdeadbeef offset 0x08 value 0x00
$ ethtool -E eth0 magic 0xdeadbeef offset 0x09 value 0x11
$ ethtool -E eth0 magic 0xdeadbeef offset 0x0a value 0x22
$ ethtool -E eth0 magic 0xdeadbeef offset 0x0b value 0x33
$ ethtool -E eth0 magic 0xdeadbeef offset 0x0c value 0x44
$ ethtool -E eth0 magic 0xdeadbeef offset 0x0d value 0x55

Готово, удостоверимся что все окей

$ ethtool -e eth0 offset 0x08 length 6
Offset		Values
------		------
0x0008:		00 11 22 33 44 55
$ ip a show dev eth0
10: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff

Да, действительно все окей. Наша сетевая карта имеет новый железный MAC адрес, который храниться в её EEPROM. И никакие спуферы нам не нужны 🙂

О материнской плате и её серийных номерах

Античиты используют следующую информацию о материнской плате, которая хранится в SMBIOS (речь идет о достаточно новых материнских платах — я использую плату от MSI на X570 чипсете, для своих плат — пишите в комментариях или гуглите сами) — в скобочках ключи значения, которых мы должны изменить (рекомендую использовать реальные значения для ключей BP, BPH, IV, ID):

  1. BIOS Version ( IV )
  2. BIOS Release Date ( ID )
  3. System Product ( SP )
  4. System Serial Number ( SS )
  5. System UUID ( SU )
  6. Baseboard product ( BP, BPH )
  7. Baseboard Serial Number ( BS, BSH)

От вендора есть конфигурационная утила AMIDEWIN64 (которая входит в состав AMI Flasher), для изменения информации содержащийся в SMBIOS на лету.

Информация содержащаяся в SMBIOS

Например, что бы поменять System Serial Number, мы запускаем AMIDEWINx64.exe со следующими параметрами

AMIDEWINx64.EXE /SS "45356251341234236"

Все вышеперечисленные ключи строковые — и не несут какого-либо негативного эффекта (серийники можно вбить произвольные, но для BS, IV, ID, IVN — рекомендую использовать реальные значения — т.к, например, с точки зрения античитов, это может быть воспринято за анамалию в данных — и это лишние внимание от аналитиков). Был спуфер, который забивал все эти данные рандомными значениями — и именно по этому отлетел на faceit. Наша главная задача на данном этапе замаскироваться под легитимную материнскую плату. Для остальных вендоров материнских плат есть подобные утилы — для ASUS точно видел на форуме unknowcheats). И да, важно поменять все серийные номера из списка.

О серийных номерах модулей памяти

С серийными номерами оперативной памяти все сложнее. Получить их можно следующей командой:

C:\>wmic memorychip get devicelocator, serialnumber
DeviceLocator  SerialNumber
DIMM 0         A18E1085
DIMM 1         A38E2768
DIMM 0         D44E5C5F
DIMM 1         1365DA25

Faceit AC их не проверяет. Серийные номера старых модулей памяти (DDR3) и для новых некоторых вендоров заполнены нулями (видимо по этому большинство античитов не берется это анализировать, избегая возможного false positive детекта). Их же подменить можно только через спуфер (опять рекомендую rainbow). Если подчистить код спуфера, оставив только функциональность для смены серийников модулей памяти, там получиться 200-230 строк кода.

О серийных номерах мониторов

Серийные номера мониторов для детекта пока используется только в EAC. Сам серийный номер монитора хранится в защищённой EDID области памяти в EEPROM монитора. Посмотреть его можно с помощью утилы MonitorInfoView.

MonitorInfoView позволяет узнать серийные номера в так же информацию в EDID области

Тут все зависит от вендора, у большинства мониторов изменить серийный номер нельзя (без разборки и модификации монитора). Некоторые мониторы позволяют редактировать EDID, но только при входе в сервисный или Burn-In режим (с помощью зажатия определенных клавиш). Сам софт который вызволяет менять EDID доступен тут. Выложу его ниже что бы был на сайте.

Если же прошивка не удаётся, значит у вас стоит защита от записи в данную микросхему. Единственный выход — это разбирать монитор. Рассмотрим на примере ASUS VG248QE — остальные мониторы (например BENQ XL2411T и пр) схожи по алгоритму действий. Разбираем монитор

Процесс разборки монитора — часть 1
Процесс разборки монитора — часть 2

Необходимо найти правильный чип EDID для DVI (в моем случае — монитор подключен через DVI). Правильный чип, который вам нужен, находится сразу за разъемом DVI. Это крошечный 8-ногий чип, и на нем написано «ATML» в качестве первых нескольких букв. Для фанатов электроники это микросхема DVI I2C EEPROM, Atmel 24C02C. Их два, один для HDMI, другой для DVI. Однако нам нужно только модифицировать один для DVI , или сразу оба.

Процесс разборки монитора — часть 3

Отсоедините контакт защиты от записи микросхемы. Это контакт № 7 микросхемы Atmel. Если порт DVI обращен к вам, эта ножка будет третьей слева. Совет для новичков в области электроники: номера контактов часто отсчитываются против часовой стрелки от контакта № 1, обозначенного белой точкой на микросхеме. Если у вас такой же чип, как на скриншоте, правильный пин будет на противоположном краю от белой точки, и будет прямо над надписью «ATML».

Процесс разборки монитора — часть 4 — размыкаем ножку

Теперь нам необходимо разомкнуть одну ножку, есть два варианта:

  1. Метод паяльника: рекомендуется использовать паяльник для электроники с тонким жалом. Нагрейте нужную посадочную ножку до тех пор, пока припой не расплавится, и согните её вверх с помощью жала паяльника (или другого остроконечного металлического инструмента). Не перегревайте.
  2. Метод ножика: этот метод опасен и легко наносит случайные повреждения. Тем не менее, это работает, если вы будете осторожны. Используйте свежее новое лезвие. Осторожно и медленно, с легким нажимом, отрежьте ножку № 7, аккуратно пропиливая его, пока она не прорежется. Медленная резка менее опасна, чем резкая (где внезапное скольжение может привести к разрыву нескольких ножек).

Примечание для фанатов электроники: в техническом описании ATMEL 24C02C говорится, что контакт в идеале должен быть подключен к земле, однако, оставить контакт неподключенным тоже работает.

Все — теперь мы спокойно можем писать в EDID область памяти. Данный контакт отвечал за readonly режим работы данной микросхемы памяти. Остается только собрать монитор, снять дамп EDID через EDIDWriter — модифицировать его — серийник монитора хранится открытым текстом — изменить серийник можно в любом hex редакторе. Ну и прошить EDID модифицированным дампом.

О серийных номерах видеокарт

В данный момент видеокарты от Nvidia имеют UUID, но вот вот будут и серийные номера. Получить их можно следующим образом:

Получение информации о UUID и Serial Number через nvidia-smi.exe

Серийник и UUID можно поменять только перепрошивкой чипа. Но можно и заспуфать. Я бы этим занялся, но к сожалению у меня Radeon, который не имеет данной проблемы. На текущий момент серийные номера видеокарты использует только EAC.

О рабочем окружении ПК

Не лишним будет поменять мак адресс роутера, а так же его имя (UPnP / SSDP USNs). И не заходите в старые учетные записи discord, steam….

Послесловие

Я сторонник железной смены серийников, т.к это проще для меня. После бана по железу смена серийных номеров, установка чистой Windows, смена ip — у меня занимает порядка двух часов. Спуфер тоже используется, но только для зануления серийных номеров модулей памяти (faceit ac — их не проверяет, а вот EAC — да).

9 комментариев

  1. Интересная статья с точки зрения того, как устроена система античита. Но не понятно, зачем подробный разбор, как обойти бан по железу. В прекрасной России будущего забаненный читер должен ломать голову не о том, как обойти бан, а о том, как соскочить на условку вместо реального заключения.

    1. Я играю с софтом на faceit уже порядка 3-х лет, в EFT-Valorant — уже больше года. В данной статье — я лишь описал концепты, но будет и статья с техническими моментами. Бана по HWID — не существует для просветленных. Речь не о политике — а о гиках вроде меня — тех кто понимает как работает система. Я не за читеров (тут скорее интерес пободаться с серьезными конторами — играть роль атакующего), пусть пишут нормальную серверную часть — что бы читеров было меньше.

  2. Хорошо бы ещё это все работало в Steam, Faceit и прочем, а то есть стойкое ощущение, что читаки сейчас просто перезаходят между аккаунтами, даже Винду не сносят

    1. Это все и работает для faceit — для него переустановка чистой Windows обязательна (можно патчить определенные ключи реестра, uefi uuid и пр — но никто не даст гарантии что после апдейта античита — что ни будь новое не понадобиться, реально проще и быстрее всё переустановить), а так же смена ip, серийников жестких дисков, ид-шников материнской платы. Для EFT можно даже windows не переустанавливать. EAC — более жестокий — там приходится делать ещё несколько телодвижений. Для faceit — возьмите пример с mr.silent’ом — я отыграл 10 игр — первую мы проиграли по просьбе Даниила (и записали ролик), а в остальных я жестил — и аккаунт до сих пор не в бане.

  3. Классная статья. Никогда не думал, что античит настолько продвинут. А не проще ли например играть через облако? Например арендовать сервер с видео и ставить чит. По идее это проще наверное, чем прошивать железо?

    1. Те игры которые подразумевают собой киберспорт — не доступны в облаке (тот же nvidia geforce now). Но всегда можно поднять пропатченную vmware esxi — купить ещё один GPU (у многих мат плат два PCIE слота) — и пробросить вторую видеокарту в виртуальную машину — можно и так играть

  4. Жесть полнейшая, я как раз вляпался в эту историю с баном по железу от EAC в Rust, 2 года как не могу поиграть, к сожалению денег нет на полное обновление компа , как назло у меня и видеокарта от Nvidia, и в мониторе нельзя сменить серийник. Но если с монитором всё понятно, открыл в hex редакторе дамп с моника, там каракули показывает и не разобрать где серийник, думал хотя бы видюху не придётся менять, теперь мои надежды на возвращение в Rust закрылись, а еще неделю назад читая форумы надежда теплилась, думал обновлю всё кроме видюхи и моника и начну играть….

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *