|
|
| Посл.отвђт | Сообщен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 число раз что-ли? ЗЫ: логику работы отладчика я знаю, что там чего запускает и с какими флагами и чего ожидает ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |