📎 Больше информации, примеры и скрипты — здесь
DMA (Direct Memory Access) — это технология, которая позволяет считывать или записывать данные напрямую в оперативную память компьютера, минуя CPU и операционную систему. Это делает возможным доступ к памяти любого процесса, даже если он защищён античитами и механизмами вроде Kernel Patch Protection (KPP), Hypervisor Protected Code Integrity (HVCI), User-mode hooks и т.д.
В EyeAuras используется LeechCore — открытая библиотека от Ulf Frisk, признанная стандартом в области работы с PCIe/Thunderbolt/FPGA DMA-устройствами. Она лежит в основе популярных проектов вроде PCILeech и используется для создания отладчиков, исследовательских утилит, форензики и автоматизации.
С DMA ты получаешь:
ReadProcessMemory
, но за кулисами идёт работа с реальной шиной PCIe.Это основной сетап, в котором игра и бот запущены на разных ПК, он ориентирован на безопасность и в целом с ним сложно бороться разработчикам античитов - на том компьютере где запущена игра нет ничего инкрементирующего, кроме самой подключенной платы, которая мимикрирует под SSD/WiFi-карту или любое другое PCI-E устройство.
Этот сетап не гарантирует безопасность, так как античит может задетектить как EyeAuras, так и наличие платы/драйверов к ней. НО! Во многих играх DMA находится настолько за пределами досягаемости разработчиков игры и античита, что об этом даже никто не думает. И тогда такой сетап становится вполне приемлимым.
С точки зрения скрипта, всё выглядит так же, как при использовании обычного IMemory
интерфейса. Пример:
var playerHp = CoreMem.Read<int>(playerBase + 0x1C4);
if (playerHp < 30)
{
Log.Warn($"Low HP: {playerHp}");
}
Всё: CoreMem
теперь может быть DMA-драйвером, playerBase
— это физический адрес или виртуальный с трансляцией, но тебе об этом даже думать не надо. EyeAuras всё скроет.
Для полноценной работы потребуется FPGA-плата, совместимая с LeechCore - в наше время 99% плат совместимы с LC, так что промазать сложно.
EyeAuras реализует интеграцию с LeechCore через изолированный слой IMemoryBackend
, который поддерживает: