FastAnimate плагин для Olly

Тема в разделе "WASM.PROJECTS", создана пользователем vital, 2 ноя 2006.

  1. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    В попытке потрейсить ASProtect родилась идея автоматизировать немного функцию Animate Into. Основная мысль в том, чтобы автоматически вычислять границы циклов и входить в функции один раз только для того, чтобы убедиться, что они возвращаются в точку вызова. Прикрепленный плагин для Olly и производит данные действия.

    В данный момент есть еще идея отлавливать call и ret которые фактически не несут смысловой нагрузки вызова функции и возврата из нее, а применяются для односторонней передачи управления.

    Испытывалось это все на калькуляторе упакованном UPX. Исходники пока выкладывать не хочется - хочется их немного причесать :)
     
  2. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    Добавлен отлов CALL и RET, которые применяются для односторонней передачи управления.

    Появился диалог настроек, позволяющий регулировать поток сообщений, выводимых в лог, выводить все пройденные инструкции в файл и задавать точку останова, так как обычные бряки работу плагина не останавливают.

    Последнюю версию выложил наверху.
     
  3. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    Немного подробнее о том, что делает плагин.

    Плагин анализирует каждую выполняемую инструкцию, обращая особое внимание на rep, call, ret и различные jmp. Конструкции rep и все инструкции кроме вышеперечисленных просто выводятся в файл (если необходимо) и прошагиваются.

    Инструкции call ищутся в двух списках: "untrustedCall" и "trustedCall". Инструкции попавшие в первый список, анализируются так же, как если бы они были jmp. Инструкции попавшие во второй список прошагиваются с занесением в файл. Все остальные call заносятся в стек вызовов плагина, при этом запоминается предполагаемая точка возврата и значение esp.

    Инструкции ret ищутся в списке "untrustedRet". Попавшие в этот список инструкции анализируются также как и jmp. Для остальных производится поиск соответствующего вызова в списке вызовов и по результатам этого поиска заполняются списки untrustedRet (ret, используемые для передачи управления как jmp), untrustedCall (call, используемые для односторонней передачи управления) и trustedCall (обычные вызовы функций).

    Инструкции jmp, передающие управление вперед просто прошагиваются. Инструции jmp, передающие управление назад проверяются на наличие цикла. Для этого статически анализируются все инструкции от адреса перехода jmp до самого jmp. Выявляются исполняемые участки кода и инструкции, которые передают управление вперед за границы цикла. На все предполагаемые выходы из цикла ставятся бряки. Управление передается выполняемой программе. После остановки на брейкпоинте анализ продолжается с текущей инструкции.

    Плагин также переходит в режим пошагового выполнения при обработке исключения и не выходит из него до возвращения в программу из обработчика.

    Выполнение trustedCall вызовов без захода внутрь функции, а также вычисление границ циклов и позволяет достаточно быстро протрейсить приложение до нужной точки, при этом все выполненные инструкции можно сохранить в файл. По ходу работы плагин выводит в лог OllyDbg диагностические сообщения, уровень подробности которых можно регулировать. Так как пока плагин не останавливается на бряках поставленных юзером, в опции внесено поле для ввода адреса остановки.

    Выполнение плагина можно остановить с помошью меню отладки выбрав пункт пауза или нажав F12. Один шаг алгоритма можно выполнить выбрав пункт Step в меню плагина или нажав Alt+S.
     
  4. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Скачал.
    Если сегодня будет время обязательно протестирую на Alladin eToken. Это такая система авторизации по токенам.
    Там исполняемый файл как-то зашифрован Upx и Yoda Crypter.
    Толи исполняемый файл зашифрован сначала upx, а потом Yoda Crypter, то ли наоборот, то ли там что-то свое очень похожее на это.
    Но распаковать мне его удалось только вручную. Никакие унпакеры его не взяли.
    И это было очень трудно.
    Посмотрим как поведет себя твой плагин. :)
     
  5. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    Спасибо, буду рад любым результатам :) Сам пока пытаюсь понять как правильнее обрабатывать исключения внутри трассируемой программы. Сейчас с исключениями все довольно криво. В частности, обработчик исключения не трассируется.
     
  6. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Начнем с того, что у меня его не получилось даже распаковать.
    Ты чем же это такой ZIP создал
     
  7. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    vital
    А я на MSR такое для себя делаю :)
    Miller Rabin
    Кстати архив действительно забавный :)
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Скачался и распаковался нормально. Юзайте Save as..
     
  9. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    Все может быть, хотя никто до сих пор не жаловался :) Выложил пожатый чисто ZIPом - накладок быть не должно.
     
  10. vital

    vital New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    6
    Я пытался по максимуму использовать уже существующие средства, такие как дизассемблер OllyDbg. Хотелось как можно быстрее получить работающий инструмент. Хотя алгоритмы лежащие в основе плагина могут быть легко перенесены под любой отладчик/дизассемблер предоставляющий подходящий интерфейс. Мне было бы интересно обменяться опытом на этой почве. Могу выложить описания алгоритмов, которые я использую (на это потребуется немного времени :)).
     
  11. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Ну незнаю, я гонял прогу:
    Код (Text):
    1. model flat
    2. .code
    3. sta:
    4. mov ecx,manymanymany
    5. _1:
    6. mov [0],eax
    7. loop _1
    8. end sta
    в итоге получалось 30к итераций / 1 сек. (мне этого крайне мало) waitfordebugevent--continuedebugevent на системах от 9х до ХР, и процах дурон800-сортон-2000+ (с TF флагом аналогичная ситуация).... Вобщем загвоздка не в железе, а в системе, поэтому пришлось придумывать и искать альтернативные пути, один из к-х на MSR и кстати который хорошо уживается с отладчиками 3-го кольца.
    К большому моему сожалению, отсутсвием фантазии я не страдаю, а вот писать проги для себя не умею (она самая мешает): то там так сделать, то там переделать... вобщем проект стоит на месте и есть куча разрозненного кода :)
    -----
    ЗЫ по поводу архива посмотри аттач :) очень забавно :)
    ЗЗЫ я старался, скриншотил, а архив подменили :) , т.е. я хотел сказать, что прилепил скриншот к старой версии архива.