Как поле BeingDebugged вызывается в блоке среды процесса - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу понять, как именно работает API «IsDebuggerPresent». Насколько я понимаю, API проверяет структуру TEB, затем переходит к смещению PEB, а затем проверяет наличие в нем флага BeingDebugged.

Что я не смог найти, так это то, что вызывает этот флаг в ядре ОС.

1 Ответ

0 голосов
/ 01 мая 2018

Поскольку мы знаем, что IsDebuggerPresent может обнаруживать только отладчик пользовательского режима, а не другие виды отладчика (например, отладчик ядра), то это, скорее всего, означает, что этот флаг установлен где-то внутри функции DebugActiveProcess .

Чтобы убедиться в этом, вы можете выполнить быструю настройку. Откройте следующее

  1. Блокнот (мы будем отлаживать это приложение)
  2. Ollydbg или другой dbger (прикрепить к блокноту)
  3. Средство просмотра памяти, например, HeapMemView (прикрепите его к блокноту, чтобы посмотреть флажок peb)
  4. Другой экземпляр отладчика для подключения к первому экземпляру OllyDbg.

Так что, если вы остановите точку на DebugActiveProcess и отследите ее, вы увидите, что она в конечном итоге достигнет NtDebugActiveProcess. После того, как он входит и выходит из пространства ядра, устанавливается флаг BeingDebugged.

Если вы хотите пойти глубже, вам нужно будет иметь возможность использовать отладчик ядра и знать, как правильно его настроить, иначе вы просто в конечном итоге сломаете свой компьютер.

Я мог бы написать более подробный ответ, когда у меня будет время в будущем

...