IsDebuggerPresent

Материал из Справочник исследователя программ
Описание функции
BOOL WINAPI IsDebuggerPresent(void);
Функции не передаётся никаких параметров, в ответ она говорит, запущен процесс под отладчиком (EAX = 1) или нет (EAX=0). Функция экспортируется из модуля kernel32.dll
Внутренности функции
MOV EAX, DWORD PTR FS:[18] ; EAX = offset TIB MOV EAX, DWORD PTR DS:[EAX+30]; EAX = offset PEB MOVZX EAX, BYTE PTR DS:[EAX+2]; EAX = Peb.BeingDebugged
Переменная влияет на многие механизмы, один из которых - отладочный вывод. Функция DbgPrint() проверяет это поле, если оно обнулено сообщение доставляется отладчику ядра, иначе генерируется исключение DBG_PRINTEXCEPTION_C(0x40010006), которое обрабатывает пользовательский отладчик. Это позволяет локально обрабатывать отладочный вывод(например посредством VEH перенаправить его в консоль).
Защита от обнаружения
Вручную изменить на 0. Или использовать плагины для OllyDbg - например HideDbg