"Очередной" декомпилятор?!..

Тема в разделе "WASM.RESEARCH", создана пользователем mrhx, 11 окт 2006.

  1. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    В общем, месяц-полтора назад было время и я начал писать эмулятор/отладчик/дизассемблер/декомпилятор PE файлов под Win32. Потом отвлекся на пару-другую недель на другие проекты. Причем когда я писать начал, я что-то не смог найти упоминания о подобных программах, а тут к Вам сюда захожу, оказывается пара похожих прог уже есть. Хм, есть у кого идеи в плане перспективности моего двухнедельного творения?:
    * сама загружает EXE-PE файл в память.
    * поддерживает свою собственную виртуальную память в которой и находиться созданный target-процесс.
    * сама начинает интерпретировать asm-инструкции, попутно дизассемблируя код (десятки видов команд понимает, полностью адресацию).
    * сама вызывает WinAPI-функции так, что в любой момент можно просмотреть/подменить любые данные.
    * позволяет трейсить код полностью пошагово.
    * позволяет в конце работы генерировать Сишный исходник (ну пока эта часть не особо работает, только генерирует функции, переходы между ними, условия, без содержимого).

    Другими словами этот инструмент дает полный контроль над заданной программой,
    в любой момент можно подменять любые данные.

    Начал ее писать тренируясь на одной большой проге, но потом перешел к HelloWorld на VC++6.0, она ее полностью интерпретировать может))но поддерживает гораздо больше WinAPI и инструкций процессора.

    Как кто думает это достойная тема? Или уже такое есть и ненадо?
     
  2. UMan

    UMan New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    15
    Адрес:
    Ukraine
    запакуй
    HelloWorld на VC++6.0 аспром
    и посмотри может ли она её
    если да, то как по мне - мега тема
     
  3. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Ok... Вечером попробую.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Выложил бы её, так бы посмотрели и сказали что каво.
    А так идея заслуживает внимания.
     
  5. Dimson

    Dimson New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2005
    Сообщения:
    59
    Адрес:
    Russia
    Идея переспективная. Только вот есть масса проблем, о которых многие говорят и пишут. Большинство из них в общем случае неразрешимы. (По крайней мере за две недели :))) )
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    mrhx
    Я пишу подобную программу (назвал ее IDD - Interactive Delphi Decompiler). Программа предназначена для подробного анализа исполняемых файлов, написанных на Дельфи (версии 3 - 7). Сейчас практически закончена часть, которая сканирует файл с целью извлечения максимального количества полезной информации. Следующая часть будет уже связана с декомпиляцией. Соб-но, алгоритмы анализа кода я в основном разработал, но они еще не протестированы в достаточно полном объеме.
    К сожалению, тянуть одному такой проект (в свободное от работы время) тяжело. Поэтому в ближайшее время я все-таки наверное представлю для обозрения нулевую версию с существенными ограничениями. Может кто-то захочется присоединиться или помочь советами, в общем там видно будет. (Программа написана на Билдере версии 5).

    Занимаюсь реверсингом приличное время, не две недели :), решил, что пора свое ноу-хау оформить в виде IDD.
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    crypto
    Есть похожие наработки. Если что, поучаствую.

    У тебя есть описание форматов типов данных в образе программы?
    Конкретно - структур, массивов, множеств. Основная часть есть в typinfo.pas, но не вся...
     
  8. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Ну блин, так и я не две недели :)
    Это я эту прогу преимущественно за две-три недели написал.
    Две недели чисто ее писал, а третью в свободное от работы время опять же.

    Насчет идеи прогу ASProtect-ом обработать, что-то у меня дома был версии 1.2,
    но он ни фига не работает -- виснит под XP. Щас другой скачаю...
     
  9. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Я выложил ознакомительную версию своей проги.
    Качать с моего сайта:
    http://mrhx.narod.ru/
    Программа называется mew 0.1a

    Насчет ASProtect: обрабатывал версией 1.35 (вроде последняя с их сайта).
    Но к сожалению из-за недоработок в моей тулзе, она не смогла загрузить запакованный helloworld (там ASProtect создал какие-то секции нулевой длинны, а у меня проверок нету на это :)
     
  10. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    сори за оффтоп: вообще-то "mew" это пакер такой ;)
     
  11. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Да, к сожалению кто-то уже занял это замечательное название из 3х букв :dntknw:
    ...а ведь я его так долго придумывал :)
     
  12. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Кстати может кто знает, я вчера всетакие запустил свою тулзу на упакованном helloworld, она выполнила несколько инструкций, а потом ASProtect начал там обращаться к памяти 0x4???????, пытался оттуда прочитать кажеться. Я еще не разбирался, но пока что моя прога незнает о таких адресах памяти. Никто не знает что там быть должно ?

    На это сообщение не обращайте внимания - у меня бага была в коде :)

    Моя прога уже проходит этап распаковки ASProtect (или частичной распаковки).
    Правда потом все равно возникает ошибка :) Но скоро и ее поправлю...
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    rmn
    У меня создана, скажем так, база знаний по Дельфи. И есть идеи, как ее еще расширить (в случае необходимости).
     
  14. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    Вот я продвинулся немного и возник вопрос существенный про загрузку Win PE программ,
    ответа на который у меня нет:
    Что Win помещает в стек сразу перед запуском файла?
    Дело в том, что ASProtect обращается к предыдущему двойному слову в стеке по сравнению с тем, что было когда программа запустилась.
    Оттуда у меня береться адрес 7C816D4F.. хм.. довольно большой адрес, непонятно что это?
    Далее and eax(7C816D4F), FFFF0000
    получаем 7C810000.
    Затем начиная с этого адреса ищеться слово 5A4D - что это?? 8)
    Причем шаг поиска 10000h
    Вообще первый раз слышу чтобы чтолибо помещалось в стек до программы,
    думал только для DLL такое есть.
    Есть предположение что это уже вообще не стек, а следующая область памяти,
    но это странно, нельзя же на это завязываться, что она будет именно за стеком...
    Ктонибудь может помочь?

    ...5A4Dh это 'MZ' - там что заголовок программы храниться?? 8))
     
  15. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Это адрес внутри kernel32.dll, а
    есть поиск базы kernel32.dll не используя GetModuleHandle
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Писал загрузчик и не знаешь таких констант :\
    Выравнивание. Секцию можно размешать только по выравненным адресам.
     
  17. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    rmn
    Спасибо, теперь понятно. Заработала эта часть.
    ASProtect нашел начало модуля kernel32,
    потом долго что-то делал с этими адресами,
    видимо искал некую функцию, потом нашел и попытался перейти
    на адрес в этом модуле. Дальше пока у меня поддержки таких вещей нет.

    n0name

    Я не сразу сообразил -- секунд через 20 после того как сообщение отправил :))
    Насчет выравнивания, да, оказалось Windows закружает по кратным 0x10000 адресам.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну это не windows загружает, а просто если ты NtMapViewOfSection вызовешь с BaseAddress не кратным 10000h он будет ругатся =)
     
  19. mrhx

    mrhx New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    63
    ASProtect почти сдался мне :))
    Три дня искал ошибку из-за которой обращение к несуществующей памяти происходило.
    Оказалось инструкцию LOOP слегка неверно выполняю (мда уж ))
    ASProtect после конкретных тормазов, видимо связанных с какойто распаковкой/расшифровкой своих данных, начал импортировать себе через GetProcAddress кучу API, в том числе даже из wsock32 (вот нафига??). На этом пока все остановилось.
     
  20. zag2art

    zag2art New Member

    Публикаций:
    0
    Регистрация:
    4 ноя 2005
    Сообщения:
    40
    crypto
    Делись :) Я тож хочу... Да и в проекте бы поучаствовал