Сейчас на форуме: vsv1, r0lka, -Sanchez-, testrev1337, johnniewalker, Kybyx (+4 невидимых) |
eXeL@B —› Крэки, обсуждения —› Идея отладчика на основе принципа API-шпиона |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 17 февраля 2010 21:45 · Поправил: DenCoder · Личное сообщение · #1 В голову хорошая идея пришла. Хотя, если точнее, она уже давно формировалась и частично реализовывалась, но сейчас сформировалась до нового уровня. Я не прочь поделиться ей на обсуждение. Идея отладчика, в основу которого положены не бряки, а апи хуки и инжект dll-модуля. А также возможность загружать программы из-под такого отладчика. Смысл идеи в том, что dll-модуль, внедрившись в усыпленный перед этим процесс, получает от приложения-сервера (своего рода отладчика) команды на перехват тех или иных функций, установку пре- и/или пост-обработчиков. Приложение-сервер получает от этого модуля всю нужную информацию от такого модуля и, в частности, по требованию может приостановить работу отлаживаемого таким образом приложения с помошью функции NtSuspendProcess. Важное преимущество пост-обработчиков перехватываемых функций - способность выявлять весь набор стековых аргументов в тех случаях, когда функции не ebp-based, то есть не используют регистр ebp для сохранения указателя фрейма. Но, конечно, никакого выигрыша при конвенциях __fastcall и __cdecl. Здесь все же придется анализировать обращения к стеку за пределами адреса возврата и первые чтения регистров без их инициализации в начале функции. Но такое уже делал для трассировщика команд Spectrum'а. Нетрудно добавить дизассемблер в такой отладчик, такой модуль с анализом логической структуры функции наподобие Graph View в Ida 5.5 Pro уже разработан 3 года назад. Зачастую не нужно передавать весь листинг программ, передаваться и анализироваться будет только то, что мы захотим, и мз отдельного потока, экономя время на выполнение программы и наше. А накопленный листинг можно сохранять. Как идея? ----- IZ.RU |
|
Создано: 17 февраля 2010 22:47 · Поправил: mak · Личное сообщение · #2 Идея не новая , это класс так называемых Стилс Дебугеров , основноые реализации сделаны под линукс , но на вин32 уже есть лодеры подобного типа, хотя по сравнению с линуксоидовскими возможностями слабоваты , есть только трасирующее ядро и все. П.С. Попробуй напиши , есть связки реализаций неплохие с хуком на уровне ядра. Но думаю это до первого выхода в сеть , так как потом появятся методы детекции. Для опыта написать самое то. ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 17 февраля 2010 23:09 · Личное сообщение · #3 |
|
Создано: 17 февраля 2010 23:20 · Личное сообщение · #4 ну как раз по тестам скорости трасирования и отладки превышает нормальный отладчик во много раз , например подобные лодеры , не нуждаются в патче времени замерителей , а также не детектятся антиотладкой. Можно сдетектить хук , но хуки также по типу стилс реализованы. То есть на практике лодеры работают на ура , но опять до поры до времени , если появится против них что то конкретное. В сети нет на паблике подобной конструкции , поэтому о методах анти говорить рано. Один из методов такой конструкции , эмуляция брэйкпоинтов называется ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 18 февраля 2010 00:28 · Поправил: DenCoder · Личное сообщение · #5 |
|
Создано: 18 февраля 2010 09:24 · Личное сообщение · #6 Я не знаю, на каком принципе построены эти как бы называемые стелс хуки и т.д., потому что про них разговор не предметный, а на уровне бабушка сказала. Но отлавливать нужное сообщение длл, потом гнать сообщение серверу отладки, а потом гнать результат обратно, как описано в первом посте, будет наверняка медленнее дебаг апи, которое и так тормозное. |
|
Создано: 18 февраля 2010 10:37 · Личное сообщение · #7 |
|
Создано: 18 февраля 2010 11:16 · Личное сообщение · #8 |
|
Создано: 18 февраля 2010 12:34 · Личное сообщение · #9 В этом отладчике будет реализован анализ только тех функций, которые нам нужны и которые хотим перехватить. Логический анализ большой функции занимает времени меньше 10 мс. Один раз распарсеннный asm-код отправляется серверу отладки, что не дольше, чем запись лога в файл. Анализ кол-ва параметров для cdecl- и fastcall-функций делается на основе проверки поля Direction некоей структуры, которая формируется для каждой команды на этапе дизассемблинга, что лучше производить серверу отладки и должна быть возможность отключения анализа. На каждом следующем перехвате только аргументы функции должны оправляться серверу. Кроме того, анализ можно отключать и указывать аргументы функции, их тип и способ передачи самому, если они известны. Для каждого перехвата функции можно настроить, должно ли отлаживаемое приложение ждать команды от сервера. Возможность выбора включения/отключения паузы нужна для мониторинга интерксующих нас глобальных и локальных переменных. Пре- и пост-обработчики функций позволят сравнить что было до и что после. Дебаг апи задерживает отлаживаемое приложение уже фактом отладки. Апи хуки - только фактом перехвата нужной нам функции. Да, про стелс апи хуки тоже ничего не слышал... Но как вариант такого хука пришла идея ставить защиту от исполнения на первый байт команды, чтобы генерировалось исключение при исполнении. Для перехвата такого исключения нужно втиснуть в стек каждого потока указатель на свой SEH-обработчик. ----- IZ.RU |
|
Создано: 18 февраля 2010 12:52 · Поправил: DenCoder · Личное сообщение · #10 •CreateProcess •OpenProcess •OpenThread •CreateToolhelp32Snapshot •SuspendThread / ResumeThread •ReadProcessMemory / WriteProcessMemory •GetThreadContext / SetThreadContext Про CreateRemoteThread автор обсидиана забыл? Потом CreateToolhelp32Snaphot (придумали оболочку для новичков) уступает по объему информации функции NtQuerySystemInformation... ----- IZ.RU |
|
Создано: 18 февраля 2010 12:55 · Личное сообщение · #11 |
|
Создано: 18 февраля 2010 13:01 · Поправил: DenCoder · Личное сообщение · #12 ...и как код приложения анализировать тогда? Снятием дампа функции. А трассироваться будут только факты вызовов нужных нам функций, их аргументы и возвращаемые значения. С возможностью паузы. Пошагового выполнения нет. Хотя можно приделать как варианты и Hardware breakpoints, и INT 3... Но в основном, если мы не ищем трудноуловимый баг или не изучаем ассемблер( ), а нужно быстро что-то найти, то хватает выполнения блоками, такими как функция. Было бы неплохо в дизассеблированном листинге подсвечивать asm-код по типу блока. Здесь я тоже не нахожу информации в интернете, буду лепить своими словами: Каждую функцию можно разбить на блоки кода по нескольким типам. Широко распространен тип разбивки по условным и безусловным переходам. Но для анализа без отладки хорош и способ разбивки по типу обращений к одному из регистров. Это трудно представить, но в идеале бы было, что в одной плоскости код разбит по переходам, во всех остальных - по использованию регистра. ----- IZ.RU |
|
Создано: 18 февраля 2010 13:46 · Личное сообщение · #13 Я стараюсь исходить из принципа "Глянул - быстро понял". Новая Ida Pro 5.5 тому хороший пример с возможностью Graph View, но еще пока в далеке от идеала. И честно не знаю, насколько максимально можно приблизиться к этому принципу, если размер экрана монитора ограничен, количество мест в комнате, да и слотов для видеоадаптеров для установки еще мониторов - тоже, галографические технологии пока не доступны рядовому гражданину, а на плоскости можно изобразить максимум трехмерную конструкцию. Разноцветная подсветка тоже плохо перспективна, так как при комбинациях больше, чем из 2-х цветов, наш глаз уже будет не рад... Поэтому приходится "фокусировать" отладку, чтобы быстрее понять, что к чему... ----- IZ.RU |
|
Создано: 18 февраля 2010 14:50 · Личное сообщение · #14 Пользуйся кнопкой Правка, а. Эта разбивка называется Базовые блоки, и ей 100 лет уже. Что это за отладчик, который не даёт шагать, а фигачит сразу блоками, которые могут быть по несколько килобайтов. А если это алго, который надо разобрать? Короче, бред какой-то. Автор, хочешь набить шишку/поиграться пару месяцев от нечего делать-вперёд. Не совсем тогда понятно, зачем на форуме продолжать упираться и говорить, что всё круто. |
|
Создано: 18 февраля 2010 15:10 · Личное сообщение · #15 |
|
Создано: 18 февраля 2010 15:14 · Личное сообщение · #16 |
|
Создано: 18 февраля 2010 16:24 · Поправил: HiEndsoft · Личное сообщение · #17 DenCoder пишет: В этом отладчике будет реализован.... Вы сами понимаете что это имеет чисто академический, но отнют/дь не практический интерес. Оно это надо? Archer пишет: Автор, хочешь набить шишку/поиграться пару месяцев от нечего делать-вперёд. Не совсем тогда понятно, зачем на форуме продолжать упираться и говорить, что всё круто. В точку. DenCoder пишет: В голову хорошая идея пришла.... Отладчик типа того что предлогает афтор топега должен опираться на исключения а не на тупорылые хуки.Посему мне кажется нужно закрыть этот бредотопег или в "вопросы новЕчков" ----- продавец резиновых утёнков |
|
Создано: 18 февраля 2010 16:35 · Поправил: DenCoder · Личное сообщение · #18 HiEndsoft, с чего такие выводы? До телепата тебе точно далеко. theCollision, не понял фразу "изменения детализации лога до детализации после трэйсера". Запутанное выражение. Напиши, пожалуйста, яснее! Если Archer топик закроет, можешь в личку. Archer, учту пожелания. А в остальном в последнее время, даже если это обфусцированый криптоалго, пошаговая трассировка мне не нужна. F4 - респект, возможность этого и должна быть. За разъяснения спасибо, приношу извинения за некоторую мою неграмотность! ----- IZ.RU |
|
Создано: 18 февраля 2010 16:53 · Поправил: cppasm · Личное сообщение · #19 DenCoder пишет: Снятием дампа функции. А трассироваться будут только факты вызовов нужных нам функций, их аргументы и возвращаемые значения. Как ты факт вызова пользовательской функции в пользовательском коде обнаружишь при помощи API хуков? DenCoder пишет: Я стараюсь исходить из принципа "Глянул - быстро понял". Новая Ida Pro 5.5 тому хороший пример Ты дизассемблированный код какой-нибудь CRC32 или MD5 видел? Много ты там "быстро поймёшь"? DenCoder пишет: А в остальном в последнее время, даже если это обфусцированый криптоалго, пошаговая трассировка мне не нужна. Т.е. ты силой мысли сразу определяешь что делает функция на три страницы в дазассемблере? Ну-ну... |
|
Создано: 18 февраля 2010 16:58 · Поправил: HiEndsoft · Личное сообщение · #20 DenCoder пишет: с чего такие выводы? До телепата тебе точно далеко. А Вы дебагер хотите на телепатии построить?(и в будущем на ВЫ, пли3!) Я так понимаю начинающий товарищЬ только что прочитал Рихтера про сплайсинг и пару статей MSRema - так звезды померещились. + Ваш дневник бред. Если не так - должно меня забанить. ----- продавец резиновых утёнков |
|
Создано: 18 февраля 2010 17:43 · Личное сообщение · #21 cppasm пишет: Как ты факт вызова пользовательской функции в пользовательском коде обнаружишь при помощи API хуков? некоторые хукеры умеют логгировать и такое cppasm пишет: Ты дизассемблированный код какой-нибудь CRC32 или MD5 видел? канонические алгоритмы как раз быстро анализируются, но самопальные алгоритмы, нападобие перечисленных действительно с первого взгляда не изучишь. |
|
Создано: 18 февраля 2010 17:45 · Поправил: DenCoder · Личное сообщение · #22 cppasm Хук передает управление в наш код... Короче, почитай статьи, которые советует HiEndsoft. На этом форуме и не только полно ссылок. CRC32... А тебе уже снится? В качестве примочки к тулзе, если заявленная идея выиграет, будет сделано все, что можно и по принципу "Глянул - быстро понял". Насчет пошаговой трассировки ты пропустил дальше контекст "F4 - респект, возможность этого и должна быть." Видимо, ты уже зациклился на всем пошаговом... HiEndsoft До хуков кстати сам дошел еще 5 лет назад, читая только документацию по Win32 API на буржуйском от постащика Borland C++ Builder. Потом понадобилось одному знакомому открыть звездастый пароль... А идеи дизассемблера начали рождаться еще за год до этого. У меня тогда еще и интернета не было. Только книжки по asm, по C и Win32. А через три года попался в руки API-шпион и было желание его пореверсить... Помогли исходники W32Dasm 4 года назад, найденные на диске одного из номеров журнала ][аkep. Жаль не всегда возможно заниматься тем, что нравится. Ну проигрывает в некоторых вопросах Debugging API. API Hook - в других. Ну и что с того? Приведите мне ссылку, плиз, идеального отладчика, который к тому же ни кем не брошен. И как ВЫ судите о том, новичок человек или нет? По рангу на этом форуме? ----- IZ.RU |
|
Создано: 18 февраля 2010 18:43 · Поправил: cppasm · Личное сообщение · #23 DenCoder пишет: Хук передает управление в наш код... Повторяю вопрос для тех кто на бронепоезде - как ты определишь факт вызова пользовательской функции при помощи API хуков? Короче спорить бесполезно - начинай писать, там сам увидишь. DenCoder пишет: Насчет пошаговой трассировки ты пропустил дальше контекст "F4 - респект, возможность этого и должна быть." И что ты со своим F4 увидишь при анализе самописного криптоалго? DenCoder пишет: Приведите мне ссылку, плиз, идеального отладчика, который к тому же ни кем не брошен. Идеального для каких целей? Olly нормальный отладчик, но только usermode. Для ядра WinDBG есть. Или ты лучше написать собрался? n0name пишет: канонические алгоритмы как раз быстро анализируются Это если не первый раз (если опыт есть). В любом случае модификаций можно вагон сделать. |
|
Создано: 18 февраля 2010 19:29 · Личное сообщение · #24 cppasm Под пользовательской функцией ты имеешь ввиду функции внутри exe или dll к нему отлаживаемого приложения? Сами будем выбирать, на что нам хук ставить. Факт вызова того, на что хук поставили! Можно, конечно, сделать чтоб от старта программы как в OllyDbg анализировался код и везде хуков понаставить, но все то нам и не надо. У меня уже есть версия dll, которая логирует обращения к методам COM-объектов. Вот только к аргументам методов в случае способа передачи через регистры не применял еще анализ asm-кода. Про F4. Кому нравится, жмите все время F7 или F8. Я выбираю ближайший jcc или call. В подрутине смотрю, нужна нам она или нет. Еще в ольке полезная функция - Call Tree. Пробежавшись по всем ветвям, можно примерно представить что делает эта субрутина и сделать вывод, нужна она нам или нет. А криптоалго вообще лучше на листочке раскладывать на математические выражения, чтобы понять, как он работает. Олю бросили, а WinDbg не отлаживает ядро локально!!! ----- IZ.RU |
|
Создано: 18 февраля 2010 19:30 · Личное сообщение · #25 |
|
Создано: 18 февраля 2010 19:42 · Поправил: DenCoder · Личное сообщение · #26 Clerk, ну а что именно не нравится? В определении отладичка не сказано, что он обязан юзать Debugging API и определенно именно INT 3 или аппаратные точки останова. Прошу всех по существу писать и, желательно, приводя осмысленные аргументы за или против, как это делают mak, Archer, RSI, cppasm, LazzY. ----- IZ.RU |
|
Создано: 18 февраля 2010 20:50 · Поправил: Vol4ok · Личное сообщение · #27 идея будет хороша, если будет рабочая реализация. Все эти идеи имеют свойство быстро перегорать когда начинаешь их реализовывать. DenCoder Реальность такова, что никто тут на этом форуме вам в реализации вашей идеи помогать не будет (К.О.). Скорее всего вам придется работать одному. Если вы напишете первую минимальную юзабельную версию хотбы за 2 месяца, то я буду считать вас крутым кодером. Но прежде чем решится на такое надо хорошо подумать, а располагаете ли вы таким количеством свободного времени? Не забывая конеш про обстоятельство, что работать придется бесплатно. Обсуждение же идеи которая никем не будет реализована - бессмысленное занятие. |
|
Создано: 18 февраля 2010 22:24 · Личное сообщение · #28 DenCoder пишет: Олю бросили С каких соображений? Вторую версию допиливают потихоньку. DenCoder пишет: WinDbg не отлаживает ядро локально Отлаживает, другое дело что удалённо удобнее - хотя бы с использованием виртуалки. Microsoft (R) Windows Debugger Version 6.9.0003.113 X86 Copyright (c) Microsoft Corporation. All rights reserved. // .......... ******************************************************************************* WARNING: Local kernel debugging requires booting with kernel debugging support (/debug or bcdedit -debug on) to work optimally. ********************************************************************** ********* Windows XP Kernel Version 2600 MP (2 procs) Free x86 compatible Product: WinNt, suite: TerminalServer SingleUserTS Kernel base = 0x804d7000 PsLoadedModuleList = 0x8055c700 Debug session time: Wed Jul 30 22:04:03.484 2008 (GMT+3) System Uptime: 0 days 0:37:00.156 lkd> DenCoder пишет: Под пользовательской функцией ты имеешь ввиду функции внутри exe или dll к нему отлаживаемого приложения? Сами будем выбирать, на что нам хук ставить. Факт вызова того, на что хук поставили! Загрузил ты в отладчик приложение. На что ставить хуки? С API понятно - есть таблица импорта и т.д., используемые API определить можно. На какие функции в коде ты будешь ставить точки останова (всё-таки это не хуки) и как узнаешь адреса, если трассировать отладчик не умеет? Т.е. по сути это будет отладчик с возможностью ставить точки останова на API и всё. Урезанный очень по возможностям. Возьми ту же Ольку и попробуй что-нибудь поотлаживать используя только точки останова на API. |
|
Создано: 18 февраля 2010 22:43 · Личное сообщение · #29 Сколько людей херней страдают, лучше бы написали хороший гуи-фронтенд к BOCHS, было бы больше пользы. ----- PGP key |
|
Создано: 18 февраля 2010 22:45 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
eXeL@B —› Крэки, обсуждения —› Идея отладчика на основе принципа API-шпиона |