Сейчас на форуме: tyns777 (+4 невидимых) |
eXeL@B —› Программирование —› Отладчик посредством Debug API и EXCEPTION_PRIV_INSTRUCTION |
Посл.ответ | Сообщение |
|
Создано: 20 апреля 2010 20:04 · Личное сообщение · #1 Всем доброго здравия! Пишу утилиту для извлечения ASProtect.dll из упакованных файлов. Знаю, что аналогичная уже есть у deroko, но мне ненравиться, что работает она не со всеми версиями, да и как она работатет - тоже не нравится. У себя я реализовал простенький отладочный цикл посредством Debug API - ставяться бряки, читается память, контекст и т.д. Но решил вместо стандартных int3использовать привелигированную инструкцию CLI. И всё бы ничего, да долько стали происходить в отлаживаемом приложении какие-то странные вещи. Я ставил в Ольге бряк на VirtualAlloc и смотрел, какой код будет вызван после того, как эта функция отработает. Смотрел значение контекста на момент срабатывания бряков. Также сделал вывод из своей тулзы тех же значений. И что самое удивительное - они НЕ СОВПАДАЮТ. Более того, после четвёртого срабатывания бряка в ESI я должен иметь адрес некоей важной структуры, и в Ольке это действительно так, но вот в моей тулзе значения остаются прежними для всех первых четырёх срабатываний. Я сохранил лог работы моей тулзы. Аналогичный лог для Ольги можно получить, для чего я выкладываю подопытную программу, на которой тестировал свою тулзень. Как вы можете увидеть, логи не совпадают. В чём возможная причина? Буду признателен за любую помощь, так как уже всё перепробовал и передумал. d72a_20.04.2010_CRACKLAB.rU.tgz - protected.rar ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 21 апреля 2010 06:18 · Личное сообщение · #2 |
|
Создано: 21 апреля 2010 07:45 · Личное сообщение · #3 ARCHANGEL пишет: Пишу утилиту для извлечения ASProtect.dll из упакованных файлов. А чем не нравится мой скрипт "Создание файла Asprotect_dll.osc"? Ведь он позволяет получить ASProtect.dll со всеми восстановленными подпрограммами, которые содержат эмулированные инструкции. Утилита от deroco как раз не позволяет этого сделать, поэтому выполнить полный анализ ASProtect.dll без восстановленных эмулированных инструкций, попросту невозможно. |
|
Создано: 21 апреля 2010 22:53 · Поправил: ARCHANGEL · Личное сообщение · #4 Av0id Поток только один - тот, который загрузчиком создаётся. Аспр же дополнительных не порождает, насколько мне известно. Но, тем не менее, всё это предусмотрено - обрабатываются события CREATE_THREAD_DEBUG_EVENT и EXIT_THREAD_DEBUG_EVENT, при которых в массив добавляются либо удаляются оттуда дескриптор и идентификатор потока. Отладочные события пропускаю через DBG_CONTINUE, ведь если бы это было не так, то программа, упакованная аспром, не смогла бы запуститься. А она запускается нормально - отображается главное окно. INT 4 - двухбайтовая, она не годится. Попробовал заменить CLI на HLT - результат тот же. vnekrilov Скрипт нравится, но это - скрипт. А так - скорость работы, удобство использования, интерактивность - всё это плюсы отдельного приложения. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 22 апреля 2010 08:19 · Личное сообщение · #5 |
|
Создано: 22 апреля 2010 13:35 · Личное сообщение · #6 Archer Если имеется ввиду, что ExceptionAddress при int3 на единицу больше, чем адрес, по которому расположена инструкция, то да. В случае с привилегированными инструкциями в этом-то и плюс - не нужно декрементировать EIP. И потом - я же говорю - программа, упакованная аспром, запускается под моим "отладчиком", значит учтено. Но почему такие странные вещи творятся с контекстом? Пробовал делать SuspendThread перед чтением контекста - результат тот же. Сейчас выложу скомпилированную утиль, чтоб прояснить некоторые моменты. 323f_22.04.2010_CRACKLAB.rU.tgz - Release.rar ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 22 апреля 2010 16:52 · Личное сообщение · #7 |
|
Создано: 22 апреля 2010 16:56 · Личное сообщение · #8 |
|
Создано: 22 апреля 2010 17:36 · Личное сообщение · #9 |
|
Создано: 22 апреля 2010 18:12 · Личное сообщение · #10 |
|
Создано: 30 апреля 2010 20:26 · Личное сообщение · #11 Блин, ну что такое - крокодил не ловится, кокос не растёт! Заменил постановку бряков на стандартную - int3, а всё равно фигня какая-то происходит и прерывается вообще не там, где ольга. Как такое может быть? Может, проблема в том, что я вначале снимаю бряк, потом вызываю ContinueDebugEvent, а потом снова ставлю бряк? Если да, то как это исправить? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 30 апреля 2010 22:08 · Личное сообщение · #12 |
|
Создано: 30 апреля 2010 22:37 · Личное сообщение · #13 |
|
Создано: 30 апреля 2010 22:45 · Личное сообщение · #14 |
|
Создано: 30 апреля 2010 22:59 · Личное сообщение · #15 Вначале хочу сказать: "Спасибо, Archer! За 8 дней ты единственный проявил интерес к моей проблеме". Теперь по делу. Archer пишет: От момента, пока ты вызвал ContinueDebugEvent, и до установки бряка потоки могут пролететь мимо места бряка N раз. Тогда мне не ясно, почему у меня в логе срабатываний не меньше, чем в логи Ольки, а наоборот - в сотни раз больше? Ведь если подумать, то, ну, ладно, предположим, что пока я снова бряк поставлю - поток действительно может проскочить, но у меня тогда будет ущербный лог, а он - избыточный! ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 30 апреля 2010 23:16 · Личное сообщение · #16 Но можно организовать работу бряка следующим образом --------------------------Exception handler--------------------------------- 1.Брякнулись 2.Восстановили комманду 3.Выполнили свой обработчик 4.sti(не стоит забывать о случаях, когда комманда выполняется не однократно. Например комманда rep, если не ошибаюсь) 5.Ставим бряк обратно 6.run ---------------------------------------------------------------------- ------------ Тогда точно не должно быть пропусков ----- Research For Food |
|
Создано: 01 мая 2010 08:43 · Личное сообщение · #17 |
|
Создано: 12 мая 2010 23:07 · Поправил: ARCHANGEL · Личное сообщение · #18 |
eXeL@B —› Программирование —› Отладчик посредством Debug API и EXCEPTION_PRIV_INSTRUCTION |
Эта тема закрыта. Ответы больше не принимаются. |