Что такое ДМА читы?

DMA (Direct Memory Access) читы - это особый класс внешних читов, их ключевая особенность заключается в том, что они запускаются "вне" атакуемой системы. Взаимодействие с игрой происходит через отдельное устройство - DMA-карту, которая имеет доступ к физической памяти компьютера и может выполнять операции чтения/записи.

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

Как это работает на практике

Предположим, что у нас есть игра, запущенная на Windows x64. Обычно внешние читы используют ReadProcessMemory для получения данных, в этом случае вам не нужно иметь дополнительное оборудование - всё работает в рамках одной операционной системы. В случае, если вы хотите использовать DMA подход вам будет необходимо купить ещё один компьютер и самое главное - дма карту. Она подключается к основной системе через PCIe, Thunderbolt или другой интерфейс, а её контроллер обращается напрямую к адресному пространству. Вся работа с данными происходит на втором компьютере, на который они передаются через USB-кабель подключенный к DMA карте.

Что такое DMA-карта

Физически это интегральная печатная плата с чипом FPGA от компании Xilinx. По её интерфейсу сразу видно, каким образом она должна быть подключена к ПК.

Полноразмерная DMA карта для интерфейса PCI-E
Полноразмерная DMA карта для интерфейса PCI-E

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

DMA карта в M.2 форм-факторе
DMA карта в M.2 форм-факторе

Стоимость таких устройств варьируется от 90$ до 600$ за самые быстрые модели.

Соединение со вторым компьютером

DMA-карта сама по себе не выполняет сложные вычисления. Она подключается к управляющему компьютеру через высокоскоростной интерфейс. На этом компьютере происходит:

  • обработка данных, полученных из памяти игры
  • просчёт логики чита и отправка изменений на карту
  • визуализация функций чита и интерфейса

Архитектура делится на два слоя:

  • аппаратный - DMA-карта и контроллер, считывающий память
  • программный - софт на управляющем ПК, интерпретирующий данные и выполняющий действия

Требования ко второму компьютеру

Обязательным критерием при покупке второго ПК является наличие порта USB 3.0, именно третьей версии, иначе - скорость передачи данных будет страдать и вы получите маленькое количество кадров в оверлее. Так же не стоит брать полный хлам, потому что некоторые читы сами по себе требуют не мало вычислительной мощности для обработки информации. В общем случае это может быть обычный ноутбук, полноразмерный ПК или мини-пк.

Разработка читов для dma карт

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

Ограничения по скорости

Поскольку при написании external чита вы упрётесь в скорость ReadProcessMemory на реализации далеко не первой функции, чего нельзя сказать о разработке под DMA.
В этом случае нужно сразу понимать какие данные предстоит обрабатывать и применять соответствующие архитектурные решения, потому что скорость чтения/записи значительно ограничена. Как следствие при отсутствии оптимизации вы получите 3-5 FPS на вашем оверлее. Один из более эффективных способов оптимизации, который должен использоваться с первой строчки кода - Scatter Reading. Это такая техника, при которой данные запрашиваются не множеством запросов к карте, а формируются в один большой и запрашиваются одновременно. Но, это не решение всех проблем и софт с хорошим функционалом и приемлемой производительностью не написать без хорошего архитектурного решения.

Физическая память

DMA-карты работают на уровне физической памяти. Виртуальные адреса, которые использует процесс игры, не совпадают с физическими адресами в RAM. Это вынуждает нас постоянно преобразовывать физические адреса в виртуальные.
К счастью, эта задача уже решена во множестве библиотек для разработки под дма. Например, в библиотеке DMALibrary от Metick

Античиты

Античиты давно не стоят в стороне и с разной степенью эффективности ведут борьбу с этим типом атаки. Больше всего усилий прилагают разработчики Vanguard и FACEIT AC, второе место делят BattlEye и Easy Anti-Cheat, ну а про VAC даже смысла говорить нет.
Одна из механик, которую используют разработчики античитов это влияние на значение CR3 - контрольного регистра. Он играет ключевую роль в виртуальной памяти, о которой я говорил ранее. Если коротко: это регистр, который говорит процессору, где находится таблица страниц текущего процесса и античиты могут применять различные техники, чтобы помешать вам взаимодействовать с виртуальной памятью. Ну и помимо этого ещё может применяться шифрование указателей, с которым, в некоторых случаях, проще бороться, используя обычный internal-подход.

Прошивка

Тут мы плавно и логично переходим к ещё одной составляющей - прошивке карты. Если быть точнее, то в этом контексте это код, который управляет картой. Он влияет на то, как она определяется в основной системе. Следовательно от прошивки зависит то, какие анти-читы она может обходить и насколько долго вы сможете избегать бана.
При текущем состоянии рынка стоимость прошивки под тир-1 античиты по типу Vanguard или FACEIT AC может кратно превышать стоимость карты. Доходит до того, что код, эмулирующий устройство, занимает места больше, чем сама полезная нагрузка прошивки. Это может приводить к тому, что прошивка попросту не помещается в распаянную на карте память.
При этом необходимость в прошивке полностью зависит от античита, в некоторых случаях всё будет работать с паблик-прошивкой с GitHub.

Ручные баны

В некоторых играх существуют системы репортов, которые позволяют разработчикам видеть и вручную проверять игру подозрительных игроков. Всем нам давно известен патруль в CS, который позволяет группе-людей выносить вердикт о использовании или не использовании подозреваемым какого-либо софта. В этом случае не имеет значения какой чит будет использован - internal, external или DMA. Сюда же можно отнести систему репортов в Rust, но тут уже решение выносят сами разработчики или отдельные люди в их команде.

Поведенческий анализ

В некоторых играх реализована полностью автономная логика, которая при достижении игроком "не человеческих" показателей, без участия разработчика, выдаёт блокировку. Как и в предыдущем, так и в этом случае проблемы заключаются не в DMA карте или её прошивке, такие условия существуют и будут существовать, если задача - избегать блокировки, то придётся мириться с ними.

Бан за модификацию памяти

Существуют различные методики, которые позволяют отследить изменение значений "из вне". Это может касаться углов поворота персонажа или секций кода, которые проверяются античитом. В этом случае, даже если изменения были внесены DMA картой - они будут обнаружены в памяти. В таком случае придётся либо избегать записи памяти, либо искать отвечающую за это логику в анти-чите и разбираться с ней. Это точно так же работает с логикой AIM'а и для этого была придумана вещь под названием KMBox - подключается примерно по такой же логике и позволяет программно управлять мышкой. То есть это отдельное устройство, которое покупается в дополнение к DMA карте, если того требует ситуация в конкретной игре.

Обязательная совместимость

Сейчас на современных материнских платах есть различные функции безопасности типа VT-d, IQMMU, NX-bit и Secure Boot. Эти функции могут мешать или полностью делать невозможным функционирование DMA карты. Разработчики пользуются этим, заставляя пользователей включать их. Например Battlefield 6 не запуститься без Secure Boot, но на самом деле это не критично на данный момент для этой игры.

Как выбрать DMA карту?

Есть разные карты, на разных чипах. Самые распространённые на чипах 35T и 75T. Второй вариант дороже, но они имеют практически одинаковую производительность, в некоторых случаях 75T может быть медленнее чем 35T из-за прошивки. Есть нюанс - по некоторой информации на версии с чипом 75T обычно больше памяти для прошивки, что несомненно является плюсом. Существует много разных поставщиков этих карт, некоторые из них сознательно препятствуют установке кастомных прошивок - таких поставщиков нужно обходить стороной. Один из очевидных плюсов - это наличие у поставщика поддержки и комьюнити сервера в Discord.

Заключение

DMA карты не являются бюджетным способом обхода античитов, точно так же и не являются ключом от всех дверей.
Это инструмент и подход к разработке, который нужно использовать с умом, а умом, как и картой - нужно обладать, так что рекомендую чаще читать мои материалы.