Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос VMProtectIsDebuggerPresent/VMProtect Loader AntiDebug

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
23 Авг 2021
Сообщения
594
Реакции
63
знаю, надеяться на ответ здесь смысла особого нет, но все же, авось повезет
через что вмп детектит наличие hwbp или же откуда он берет информацию о dr регистрах?
 
вмп не читает регистры напрямую, он их выгружает из контекста потока через сисколлы (GetThreadContext или напрямую NtGetContextThread)
 
Смотри, отладчик(дебаг) получает GetThreadContext, после чего ставит брейкпоинт по определенному адресу, SetThreadContext.

А Vmp получает GetThreadContext и смотрит на регистры dr, если они изменены, то он детектит отладчик
Вроде так
 
вмп не читает регистры напрямую, он их выгружает из контекста потока через сисколлы (GetThreadContext или напрямую NtGetContextThread)
нет, он еще откуда-то их читает, не только через это апи, я проверял
 
вмп не читает регистры напрямую, он их выгружает из контекста потока через сисколлы (GetThreadContext или напрямую NtGetContextThread)
А Vmp получает GetThreadContext и смотрит на регистры dr, если они изменены, то он детектит отладчик
Вроде так
Откуда вы эту информацию взяли ? Есть исходники протектора в конце концов. Интересующий парт для ОПа:
C++:
Expand Collapse Copy
{
    size_t drx;
    uint64_t val;
    CONTEXT *ctx;
    __try {
        __writeeflags(__readeflags() | 0x100);
        val = __rdtsc();
        __nop();
        return true;
    }
    __except (ctx = (GetExceptionInformation())->ContextRecord,
        drx = (ctx->ContextFlags & CONTEXT_DEBUG_REGISTERS) ? ctx->Dr0 | ctx->Dr1 | ctx->Dr2 | ctx->Dr3 : 0,
        EXCEPTION_EXECUTE_HANDLER) {
        if (drx)
            return true;
    }
}
Добавление 0x100 в EFLAGS устанавливает TrapFlag (TF) и триггерит исключение SINGLE_STEP для следующей инструкции. Оно в этом же SEH-обработчике ловится в блоке except, берётся сохранённая информация о регистрах и флагах на момент возникновения исключения и читаются дебаг регистры.

Остальные фишки антидебага у вмп строятся уже на мануальных сисколах NtQueryInformationProcess и всяких ловушках в аргументах этой функции (address misalign, просто невалид адрес или несуществующий хендл процесса).
 
Назад
Сверху Снизу