|
|
| Посл.отвђт | Сообщен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 трассировать тоже будет нельзя Бляха-муха, да что за фразы такие. МОЖНО. Только осторожно :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086 |