Поскольку мы знаем, что IsDebuggerPresent может обнаруживать только отладчик пользовательского режима, а не другие виды отладчика (например, отладчик ядра), то это, скорее всего, означает, что этот флаг установлен где-то внутри функции DebugActiveProcess .
Чтобы убедиться в этом, вы можете выполнить быструю настройку. Откройте следующее
- Блокнот (мы будем отлаживать это приложение)
- Ollydbg или другой dbger (прикрепить к блокноту)
- Средство просмотра памяти, например, HeapMemView (прикрепите его к блокноту, чтобы посмотреть флажок peb)
- Другой экземпляр отладчика для подключения к первому экземпляру
OllyDbg.
Так что, если вы остановите точку на DebugActiveProcess
и отследите ее, вы увидите, что она в конечном итоге достигнет NtDebugActiveProcess. После того, как он входит и выходит из пространства ядра, устанавливается флаг BeingDebugged.
Если вы хотите пойти глубже, вам нужно будет иметь возможность использовать отладчик ядра и знать, как правильно его настроить, иначе вы просто в конечном итоге сломаете свой компьютер.
Я мог бы написать более подробный ответ, когда у меня будет время в будущем