DMA

Интеграция с DMA/FPGA-картами

Интеграция DMA

Больше информации, примеров и скриптов — здесь

DMA (Direct Memory Access) — это технология, которая позволяет читать и записывать данные напрямую в память компьютера, в обход как CPU, так и операционной системы. Благодаря этому можно получать доступ к памяти любого процесса, даже если он защищён античитом или такими механизмами, как:

  • Kernel Patch Protection (KPP),
  • Hypervisor Protected Code Integrity (HVCI),
  • user-mode hooks,
  • Secure Boot / VBS / Credential Guard и т. д.

В EyeAuras используется LeechCore — open-source библиотека от Ulf Frisk, которую широко считают стандартом для работы с DMA-устройствами на базе PCIe/Thunderbolt/FPGA. Она используется в популярных проектах вроде PCILeech, а также в отладчиках, forensic-инструментах, системах автоматизации и утилитах для низкоуровневого анализа памяти.


Что это даёт?

С DMA вы получаете:

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

И всё это доступно через обычный scripting в EyeAuras — без необходимости изучать HDL, внутренности PCIe, виртуализацию или писать собственные драйверы.


Схема #1 — игра и бот на разных ПК

Схема draw.io
Нажмите на схему для увеличения.

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

  • ПК, на котором запущена игра, остаётся нетронутым — на него не устанавливается никакое ПО, нет подозрительных процессов или драйверов.
  • DMA-устройство (например, FPGA-плата) маскируется под SSD, Wi‑Fi-адаптер или другое PCIe-устройство.
  • На втором ПК запускается EyeAuras, который взаимодействует с игровой машиной полностью извне.

Такую схему очень сложно обнаружить, поэтому её обычно используют в security research и при разработке ботов для сред с высоким уровнем защиты.

Схема #2 — игра и бот на одном ПК

Схема draw.io
Нажмите на схему для увеличения.

Этот вариант менее безопасен:

  • Всё работает на одной машине.
  • Античит может обнаружить EyeAuras, DMA-устройство или драйвер.

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


Пример использования

С точки зрения scripting ничего не меняется. Используется тот же интерфейс IMemory:

csharp
using EyeAuras.Memory; //required for Memory-related operations
using EyeAuras.Memory.MPFS; //required for DMA

var processList = LCProcess.FPGA().GetProcesses(); //get list of processes by reading it via DMA device
Log.Info($"Processes: \n\t{processList.DumpToTable()}"); // dump process list to the log

А вот так можно открыть процесс и прочитать значение из памяти через DMA-устройство:

csharp
using EyeAuras.Memory; //required for Memory-related operations
using EyeAuras.Memory.MPFS; //required for DMA

var process = LCProcess.FPGA().ByProcessName("game.exe");
var playerHp = process.Memory.Read<int>(process.Memory.BaseAddress + 0x1C4);
if (playerHp < 30)
{
    Log.Warn($"Low HP: {playerHp}");
}
  • CoreMem теперь может указывать на memory interface, работающий через DMA.
  • playerBase может быть как виртуальным, так и физическим адресом — вам не нужно об этом беспокоиться.
  • EyeAuras автоматически берёт на себя трансляцию адресов, повторы запросов, paging и управление memory backend.

Требования к оборудованию

Для использования DMA вам понадобится FPGA-плата, совместимая с LeechCore.

Хорошая новость: по состоянию на 2025 год 99% распространённых FPGA-плат совместимы. Достаточно прошить подходящую firmware и подключить устройство.

Популярные варианты:

  • Screamer M.2 / Thunderbolt (популярный вариант plug-and-play)
  • Xilinx SP605 / KC705 / AC701
  • Lecroy bridges, FT601 devices, STM32 custom builds и т. д.

Техническая реализация в EyeAuras

Интеграция DMA построена на backend-слое IMemoryBackend, который поддерживает:

  • Чтение и запись через физические и виртуальные адреса
  • Поддержку как x64-, так и x86-процессов
  • Автоматическую переинициализацию и восстановление после ошибок
  • Горячее переключение между DMA и ReadProcessMemory во время выполнения — удобно для отладки и fallback-сценариев