- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 658
- Реакции
- 18
Разбор полетов по поводу того, что на самом деле творит EasyAntiCheat_EOS.sys в ядре при старте. Прогнал драйвер через эмулятор, разложил все по фазам и вытащил техническое мясо. Краткая суть: почти вся логика сидит под их собственной VM, а как только проходят первичные анти-дебаг гейты, драйвер начинает веером рассылать мониторинг по модулям, сертификатам и памяти.
Технические данные билда:
Самое интересное здесь — проверка 0xC5 через NtQuerySystemInformation для детекта гипервизора. Если возвращается NULL, значит гипервизор не светится.
Имейте в виду: то, что DriverEntry отработал, еще не значит, что вы победили. Вся реальная слежка живет в воркерах, которые крутятся даже после завершения сетапа. Если есть идеи, как элегантно патчить их кастомную VM в секции .sec7 без BSOD-а, пишите в тред.
Как считаете, обход через эмуляцию исключений SEH все еще актуален при таких проверках?
Технические данные билда:
Код:
Binary: EasyAntiCheat_EOS.sys (37MB)
DriverEntry: RVA 0x173188
VM section: .sec7 at RVA 0x267000 (33.3MB)
Worker thread entry: RVA 0x19054
Сразу после DriverEntry EAC пишет пачку диагностических ключей в реестр:
Пишут туда статус сервиса, время инициализации, базовый адрес драйвера и его размер. Это им нужно, чтобы при следующем запуске понять, на каком этапе все упало, и слить инфу на свои сервера.
Код:
\Registry\Machine\Software\Wow6432Node\EasyAntiCheat_EOS
Пишут туда статус сервиса, время инициализации, базовый адрес драйвера и его размер. Это им нужно, чтобы при следующем запуске понять, на каком этапе все упало, и слить инфу на свои сервера.
После этого исполнение улетает в секцию .sec7. Это кастомная ВМка EAC:
- 1025 уникальных адресов хендлеров.
- Почти 70% хендлеров — обычный диспетчерский роутинг.
- Константно держит структуру контекста на 54 QWORD (GPR, XMM, флаги и состояние ВМ).
Тут EAC проверяет, не сидите ли вы под отладчиком:
3a. INT 1 Single-Step (Основной гейт)
Драйвер намеренно триггерит INT 1 и ожидает, что SEH (структурная обработка исключений) передаст управление в локальный хендлер. Если отладчик сожрет прерывание сам — инициализация стопается с ошибкой
. Никаких потоков и устройств создано не будет.
3b. RDTSC Тайминги
Пролетает серия проверок RDTSC с рандомным числом циклов. Замеряют дельту между вызовами. Если задержка слишком большая (привет, VM и тяжелая инструментация) — вы в списке подозреваемых.
3c. INT 3 Breakpoint
То же самое, что с INT 1, но через брейкпоинт. Юзается как при старте, так и рандомно в цикле мониторинга.
3a. INT 1 Single-Step (Основной гейт)
Драйвер намеренно триггерит INT 1 и ожидает, что SEH (структурная обработка исключений) передаст управление в локальный хендлер. Если отладчик сожрет прерывание сам — инициализация стопается с ошибкой
Код:
STATUS_DRIVER_UNABLE_TO_LOAD (0xC000026C)
3b. RDTSC Тайминги
Пролетает серия проверок RDTSC с рандомным числом циклов. Замеряют дельту между вызовами. Если задержка слишком большая (привет, VM и тяжелая инструментация) — вы в списке подозреваемых.
3c. INT 3 Breakpoint
То же самое, что с INT 1, но через брейкпоинт. Юзается как при старте, так и рандомно в цикле мониторинга.
ЕАС начинает агрессивно сканировать окружение:
- SystemModuleInformation: Вызывает NtQuerySystemInformation по несколько раз подряд, чтобы получить стабильный список всех загруженных модулей.
- HWID-фингерпринт: Делает более 500 вызовов HalGetBusDataByOffset, читая PCI-конфиг (VendorID/DeviceID), плюс забирает RAW данные SMBIOS через WMI (серийники материнки, биоса и т.д.).
- Черный список драйверов: Прогоняет около 4674 сравнений строк. Ищут все: от VBoxGuest.sys и vm3dmp.sys до dbk64.sys (Cheat Engine) и PROCMON23.sys.
- Проверка BCD: Смотрят значение BcdOSLoaderBoolean_AllowPrereleaseSignatures, чтобы понять, включен ли у вас тестовый режим подписи драйверов.
Создается 5 воркер-тредов с энтрипоинтом
. Даже если основная DriverEntry вернет управление системе, эти ребята остаются жить и делать грязную работу.
Чего они мониторят:
Код:
drv+0x19054
Чего они мониторят:
- Агрессивный обход всех хранилищ сертификатов (ROOT, AuthRoot, CA). Около 1000 запросов значений в реестре.
- Проверка integrity дискового драйвера и FLTMGR.SYS (ищут инлайн-хуки).
- Сканирование процессов и потоков через PsLookupProcessByProcessId и PID-вокинг.
- Чтение памяти через MmCopyVirtualMemory — ищут заинжекченные куски кода, трамплины и мануал-мап.
Самое интересное здесь — проверка 0xC5 через NtQuerySystemInformation для детекта гипервизора. Если возвращается NULL, значит гипервизор не светится.
Имейте в виду: то, что DriverEntry отработал, еще не значит, что вы победили. Вся реальная слежка живет в воркерах, которые крутятся даже после завершения сетапа. Если есть идеи, как элегантно патчить их кастомную VM в секции .sec7 без BSOD-а, пишите в тред.
Как считаете, обход через эмуляцию исключений SEH все еще актуален при таких проверках?