Логотип
Главная | Статьи | Hardware Breakpoints для обхода антиотладки
Hardware Breakpoints для обхода антиотладки

Hardware Breakpoints для обхода антиотладки

13 марта, 2026

25

Hardware Breakpoints (аппаратные точки останова) – это мощнейший инструмент, который позволяет не просто отлаживать программы, но и обходить антиотладочные защиты, ставить невидимые хуки и перехватывать системные вызовы – всё это без единого изменения байта в памяти процесса. Разберём от основ до боевых техник.

Теория: DR0–DR7 и как это работает

В процессорах x86/x64 есть 8 отладочных регистров специального назначения – DR0–DR7. Схема простая:​

  • DR0-DR3 – хранят адреса, по которым установлены breakpoint’ы (до 4 одновременно)
  • DR6 – флаги статуса: какой именно регистр сработал
  • DR7 – регистр условий: тип (execute/write/read+write) и размер (1/2/4/8 байт) для каждого бряка

Как только процессор обращается к адресу из DR0–DR3 нужным образом – генерируется исключение EXCEPTION_SINGLE_STEP (INT 1h), и управление уходит в обработчик. Никакого 0xCC в коде, никаких следов — чистая аппаратная магия.​

Сравнение software vs hardware breakpoints:

ПараметрSoftware (INT3)Hardware (DR0–DR3)
ПринципВставляет 0xCC в кодИспользует регистры CPU
Макс. количествоНеограниченно4 штуки
Изменяет код✅ Да❌ Нет
Тип триггераТолько executeExecute / Write / Read+Write
Видим антиотладкеЧерез CRC/сканирование памятиГораздо сложнее детектировать
Применение в хуках❌ Нет✅ Да

Как установить: WinAPI + прямая работа с контекстом

Единственный легальный способ на Windows – через GetThreadContext / SetThreadContext или NtGetContextThread / NtSetContextThread. Никакого прямого доступа к DR-регистрам из usermode нет – только через структуру CONTEXT.​

Боевое применение 1: невидимый хук без патча памяти

Классическая задача – перехватить функцию (например, MessageBoxA) без изменения её байтов, чтобы обойти CRC-проверки антиотладки:

Боевое применение 2: обход AMSI через hardware hook

AMSI (Antimalware Scan Interface) – любимый барьер. Стандартный патч AmsiScanBuffer давно детектируется. Hardware breakpoint – чисто и без следов:​

Боевое применение 3: перехват syscall через Nt-функции

Античиты и EDR часто хукают ntdll.dll функции через NtSetContextThread. Хардварный бряк на Nt-функцию позволяет перехватить вызов до попадания в хук EDR и выполнить прямой syscall:

Как антиотладка детектирует hardware BP

Защита тоже не дремлет. Вот основные методы детекта:

Контрмеры против детекта

Детект защитыОбход
NtGetContextThread читает DRПерехватить саму NtGetContextThread через HW BP и подменить возвращаемый контекст (обнулить DR поля)
ThreadHideFromDebuggerСтавь BP до вызова этой функции, или используй отдельный поток
Хук DbgUiRemoteBreakinИнжекть свой VEH-обработчик напрямую, без аттача отладчика
Проверка EFLAGS.TFHW BP не выставляет TF – в отличие от single-step trace

Готовый инструмент: минимальный HW-BP фреймворк

Итог для пентестера

Hardware breakpoints – это Swiss Army Knife для обхода защит, потому что работают ниже уровня антиотладки: они не трогают байты в памяти, не поднимают флаги CRC-проверок и позволяют перехватить буквально любую функцию в любом модуле. Четыре регистра – это всё, что тебе нужно, чтобы распутать даже серьёзно упакованный протектор.