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

 WASM Phorum —› WASM.RESEARCH —› IsDebuggerPresent?

<< . 1 . 2 . 3 . 4 . >>

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


Дата: Апр 2, 2004 21:09:06

В Olly весьма проблематично ;-)


Дата: Апр 2, 2004 21:09:18

А о трассировке тут речь не идет - таким же макаром можно отлавливать и call IsDebuggerPresent и ставить 0 в eax ;)
Задача то в том, чтобы отловить патч IsDebuggerPresent.


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

Max
> Задача то в том, чтобы отловить патч IsDebuggerPresent.

???

Ты напиши тестовое приложение и прицепи в топик мы попробуем, согласен?


Дата: Апр 2, 2004 21:25:30

Asterix
> Задача то в том, чтобы отловить патч IsDebuggerPresent.
???

Объясняю, с чего все началось?
С того, что отладчит запускает прогу в suspended режиме, патчит структуру (PEB что-ли, или как оно там...), и делает resume. После этого делает resume и усе, IsDebuggerPresent всегда возвращает 0, и прога курит...
Можно еще конечно kernel32.dll патчить, но это сути не меняет.

Так вот я просто и говорю, что меряя время эксепшена, можно сделать, что прога совсем даже не курит :)
В данном, конкретном случае!

Вариант с трассировкой - это вариант, но им точно также можно отлавливать и вызов IsDebuggerPresent - нахрена тогда патч делать?

Ты напиши тестовое приложение и прицепи в топик мы попробуем, согласен?
Да без проблем, токо оно на делфях написано, что некоторые не любят (косо посматривая на Володю :))
И экзешник весит дофига (т.к. VCL там).
За выходные может перепишу это под консоль...


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

но им точно также можно отлавливать и вызов IsDebuggerPresent

А вот хрен там. Вариантов масса. И звать этот код можно по разному, и самому алгоритм переписать и т.д., и т.п. Словом, патчить PEB выглядит куда лучше!

А Дельфи я не люблю.


Дата: Апр 2, 2004 23:33:39

Max

Я ничего не понял, чего там отладчик патчит, Olly например ничего не патчит точно, патчат только плагины ;-)
Насчёт Дельфи я и сам начинаю потихоньку посматривать в её сторону, но только без VCL, API кодинг + диалоговые окна в ресурсах + asm во вставках :-) , не смейтесь, ну нет у меня С++..
Я имел ввиду простой примерчик, без каких либо окон, ну типа проверил по твоему методу, ага.. отладчик обнаружен, выдаем мессагу, если не обнаружен выдаем другую..
не думаю что она будет большая ;-)

[ volodya: А Дельфи я не люблю.]
Ты просто не умеешь её готовить :-)))


Дата: Апр 3, 2004 15:08:59

[ volodya: Когда-то мы с Four-F в этом уже ковырялись... ]

Смутно припоминаю, что отладчик коннектится к какому-то из этих портов.

\Windows\ApiPort
\Windows\SbApiPort
\DbgUiApiPort

Порты слушает csrss и вся отладка через него идет посредствоп посылки LPC мессаг - отладчик посылает в порт мессагу, csrss принимает и что-то делает, потом шлет отладчику ответ. Т.е. фактически непосредственно отлаживает csrss, если я ничего не напутал.


Дата: Апр 3, 2004 17:12:25

Max
Задача то в том, чтобы отловить патч IsDebuggerPresent.
Правильно меня понял.

Никакой защиты я писать не собираюсь, просто меня заинересовало почему эта мысля применение не нашла в зашитах?
Вообще я хотел спросить следующее как например Оля создает процесс, с какими параметрами, я ведь могу и из защищаемой программы создать еще один процесс в режиме отладки, а потом проверить IsDebbugerPresent...

А про замеры времени выполнения, мне кажется тут сильно от CPU зависит, и делать такое обнаружение отладчика не эффективно, а главное ИМХО не везде будет работать


Дата: Апр 3, 2004 18:18:48

[ nice я ведь могу и из защищаемой программы создать еще один процесс в режиме отладки, а потом проверить IsDebbugerPresent...]

:-)))


Дата: Апр 3, 2004 19:09:13

Смутно припоминаю, что отладчик коннектится к какому-то из этих портов

Только к этому - \DbgUiApiPort


Дата: Апр 5, 2004 15:51:07

Вообщем вот!
Сорцы и два откомпиленных экзешника в комплекте.
Только если у кого определять отладчик будет неустойчиво - не надо сразу кидать в меня камни! По уму, надо бы собрать статистику времени на разных процах/осях, и соответственно вычислять значение threshold в tester.dpr.
Я проверял на трех машинах:
1. i815 P3-666MHz
2. i845 P4-2.4GHz
3. i865 P4-2.8GHz
Ось на всех win2k

З.Ы. Компилиться должно под любой версией делфи... теоретически :)

_1763943143__ring3.rar


Дата: Апр 5, 2004 16:14:51

Кароче народ, полемика конечно на эту тему бесконечна, что по мне , то , думаю, без модуля режима ядра защите делать нефиг, чего не говорить,...а вот там ещё тот вопрос, как эту кухню приготовить, но вот вариантов больше однака


Дата: Апр 5, 2004 16:55:12

Max

Я не понял логику работы программы, вернее мне не понято зачем два модуля, что за странные данные она выводит..
Разве нельзя просто написать ОДНО приложение, запустив которое под OllyDbg я получил бы MessageBox о том что дебаггер найден, зачем мне цифровые значения смысл которых понимает только автор программы ;-)


Дата: Апр 5, 2004 18:52:53

Asterix
Объясняю...
Первый модуль (Tester.exe) - прога, которая проверяет наличие отладчика.
Второй модуль (Tracer.exe) - это сам отладчик 3-го кольца, который запускает на выполнение в режиме отладки Tester.exe.

построено все это на следующем принципе:
1. Если отладчик создает процесс с флагом DEBUG_PROCESS, то впоследствии от вызовет WaitForDebugEvent.
2. Если отладчит вызывает WaitForDebugEvent, он оповещается обо всех исключениях, происходящих в отлаживаемой проге.
3. Очевидно, что время обработки исключений чистой проги и проги под отладчиком будет разным (т.к. происходит переключение в контекст отладчика), что мы и пытаемся зафиксировать в модуле Tester.exe.

Для этого замеряется время срабатывания обработчика исключения (Te) и некоего паттерна (Tp), чтобы было с чем сравнивать время обработчика. Делается все это в процедуре Measure. В качестве паттерна выбрана просто одна команда cpuid.
Решение о наличии отладчика, грубо говоря, принимается на основе того, что Te > Tp*k, где k-некий коэффициент.

Модуль Tester.exe выводит на экран информацию о текущих,минимальных,максимальных значениях Te, Tp, и типа статистику "Debugger detected XXX times of YYY".

Как я уже писАл, все это очень упрощено - решающее правило необходимо совершенствовать на базе серии экспериментов, плюс статистический анализ серии замеров прикрутить.


Дата: Апр 5, 2004 19:51:00

Max

Я уже догадался, что один модуль запускает второй в режиме дебаггера, но не кажется ли тебе что это получается синтетический тест, т.е. реальный дебаггер имеет кое-какие полезные фичи(например Olly), которые по моему мнению позволят уйти от такой проверки(здесь я не имею ввиду плагины), поэтому и просил тебя набросать именно такую тест программку что я описАл выше, а там посмотрим и поэкспериментируем.

> "Debugger detected XXX times of YYY"

Т.е. дебаггер обнаружен XXX число раз что-ли?

ЗЫ: логику работы отладчика я знаю, что там чего запускает и с какими флагами и чего ожидает ;-)

<< . 1 . 2 . 3 . 4 . >>


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