Больше информации, примеров и скриптов — здесь
DMA (Direct Memory Access) — это технология, которая позволяет читать и записывать данные напрямую в память компьютера, в обход как CPU, так и операционной системы. Благодаря этому можно получать доступ к памяти любого процесса, даже если он защищён античитом или такими механизмами, как:
В EyeAuras используется LeechCore — open-source библиотека от Ulf Frisk, которую широко считают стандартом для работы с DMA-устройствами на базе PCIe/Thunderbolt/FPGA. Она используется в популярных проектах вроде PCILeech, а также в отладчиках, forensic-инструментах, системах автоматизации и утилитах для низкоуровневого анализа памяти.
С DMA вы получаете:
ReadProcessMemory, но фактически всё идёт через физическую шину PCIe.И всё это доступно через обычный scripting в EyeAuras — без необходимости изучать HDL, внутренности PCIe, виртуализацию или писать собственные драйверы.
Это основной и самый безопасный вариант. Игра и бот запускаются на разных компьютерах, соединённых через DMA-устройство.
Такую схему очень сложно обнаружить, поэтому её обычно используют в security research и при разработке ботов для сред с высоким уровнем защиты.
Этот вариант менее безопасен:
Однако на практике DMA часто настолько далека от обычной поверхности детекта для игры и античита, что это просто никто не проверяет. В таких случаях этот вариант вполне рабочий и при этом заметно проще в настройке.
С точки зрения scripting ничего не меняется. Используется тот же интерфейс IMemory:
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-устройство:
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 может быть как виртуальным, так и физическим адресом — вам не нужно об этом беспокоиться.Для использования DMA вам понадобится FPGA-плата, совместимая с LeechCore.
Хорошая новость: по состоянию на 2025 год 99% распространённых FPGA-плат совместимы. Достаточно прошить подходящую firmware и подключить устройство.
Популярные варианты:
Интеграция DMA построена на backend-слое IMemoryBackend, который поддерживает:
ReadProcessMemory во время выполнения — удобно для отладки и fallback-сценариев