· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› IsDebuggerPresent?

. 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Апр 2, 2004 06:02:26

Как надо создавать процесс, что бы данная ф-ия приняла не нулевое значение?


Дата: Апр 2, 2004 06:48:23

Пнуть бы тебя за то, что этот топик всем уже осточертел.
Во-первых, не приняла, а вернула. Во-вторых, поле PEB.BeingDebugged заполняется в ядре на основе изначально переданных флагов. Как минимум в двух функциях ntoskrnl.exe. Если ты захочешь пропатчить ntoskrnl, то быстро узнаешь, что такое WFP - поиск по ключевому слову в форуме - я уже поднимал эту тему. Когда ты уберешь WFP (что само по себе не слишком тривиально) и пропатчишь ntoskrnl, то с удивлением увидишь, что программы вообще под отладчиком более не запускаются. Подозреваю, что это поле проверяется и при генерации LPC-сообщений отладчику. Так что пользуйся плагинами или зануляй это поле автоматически.
И СКОЛЬКО МОЖНО УЖЕ ПОДНИМАТЬ ЭТУ ИЗБИТУЮ ТЕМУ???


Дата: Апр 2, 2004 09:31:40

volodya
Пнуть можно, но не в пах :)
Сейчас объясню какая идея меня мучит:
Я думал, что если в своеё защищаемой программе создать процесс в режиме отладки, а потом проверить состояние флага=0 или нет, то можно с уверенность сказать, что стоит или IceExt(SoftIce) или IsDebuggepPresentHide(Olly/SoftIce).
Правда твой ответ отбил у меня пока желание лезть туда.


Дата: Апр 2, 2004 11:55:42

SoftIce не трогает это поле никогда, так что в отношении него тебя ждет неудача =)


Дата: Апр 2, 2004 12:37:16

Dr.Golova
А как IceExt обходит это???


Дата: Апр 2, 2004 18:55:34

nice

Тебе ж сказали, что айса это поле не волнует. Айс не опирается на LPC-сообщения, как это делают отладчики 3-кольца.


Дата: Апр 2, 2004 18:56:54

nice
А как IceExt обходит это???
А никак. Он в ринг0 работает.

2All
Определить наличие ринг3 отладчика можно легко и без IsDebuggerPresent. Я это сам придумал, но думаю, что я не первый.
Фишка в том, что ринг3 отладчик ОБЯЗАТЕЛЬНО нотифицируется виндой при возникновении эксепшенов в отлаживаемой проге. А что при этом происходит? А происходит переключение контекста на процесс отладчика, вызов его обработчика, потом переключение контекста обратно. Понимаете к чему я клоню? Нет? Ну тогда ой :)


Дата: Апр 2, 2004 19:37:46

ринг3 отладчик ОБЯЗАТЕЛЬНО нотифицируется виндой

Да ну? Я бы побоялся подобных утверждений :)
А вообще, если честно, я не понял, что ты имел в виду.
Как ты планируешь определять что было переключение в контекст? Что на цепочке сообщений кто-то сидит до тебя? Ты яснее говори :)


Дата: Апр 2, 2004 19:55:00

volodya
Ты яснее говори :)
Да просто читают все это нехорошие люди, да на ус мотают :)

Да ну? Я бы побоялся подобных утверждений :)
Если процесс создается с флагом DEBUG_PROCESS, при вызове WaitForDebugEvent тебе будет приходить EXCEPTION_DEBUG_EVENT. И повлиять на это ты не можешь.

Как ты планируешь определять что было переключение в контекст?
Меряем время выполнения эксепшена, типа так...
   rdtsc
   xor eax,eax
   mov [eax],eax
   rdtsc

Эксперимент показывает, что нормально это занимает порядка 2000 тактов. Под отладчиком примерно 200000 тактов. Цифр точно не помню, давненько проверял, но разница в 10 раз есть точно.
Кстати, при работе под vmware эффект аналогичный :)


Дата: Апр 2, 2004 20:09:46

Нашел! В смысле тестовую прогу свою...
Вообщем на моем P4 2.8GHz показывает следующее:
без отладчика ~35000 тактов,
под отладчиком ~4000000 тактов.
Ощутимо, не правда ли?

под vmware эффект аналогичный :)
имел в виду, что прога без отладчика, но под vmware ведет себя примерно как под отладчиком без vmware. Так что таким макаром можно и vmware отлавливать (под VPC не проверял).


Дата: Апр 2, 2004 20:13:59

Max

Вариант с rdtsc примерно так же легко и обходится.

Если процесс создается с флагом DEBUG_PROCESS, при вызове WaitForDebugEvent тебе будет приходить EXCEPTION_DEBUG_EVENT. И повлиять на это ты не можешь.

Могу, могу. Только надо разобраться как. Там запутано. Ядро посылает LPC сообщение на smss.exe (забыл уже), а вот эта штука его и редиректит. Надо разбираться. Когда-то мы с Four-F в этом уже ковырялись...


Дата: Апр 2, 2004 20:48:10

Вариант с rdtsc примерно так же легко и обходится
И как это? Учитывая, что отладчик в ринг3?


Дата: Апр 2, 2004 20:58:26

Если ты трассируешь программу, то сможешь отловить опкод rdtsc, подправить EIP и запихнуть в eax/edx по нолику (хи, или псевдослучайному числу из определенного диапазона).


Дата: Апр 2, 2004 21:00:45

Что тут нового, в смысле подхода?
Это всё-равно что напихать в прогу int3 и поставить SEH, трассировать тоже будет нельзя ;-)


Дата: Апр 2, 2004 21:05:39

трассировать тоже будет нельзя

Бляха-муха, да что за фразы такие. МОЖНО. Только осторожно :)

. 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086