Декомпилятор для MFC приложений.

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

  1. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Кто-нибудь пытался создать аналог DeDe только для прог использующих MFC ?
    Лично я нашёл только одну утилиту и то – в зачаточном состоянии.
    Есть желание сделать что-то подобное. Вопрос в том, не хочу ли я создать велосипед, если нет – то интересно Ваше виденье такой утилиты.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Интересно, что такого специфического в MFC? IDA, кстати, распознаёт символы из библиотек MFC.
     
  3. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Quantum
    Ида довольно не плохо работает с сигнатурами MFC.

    Лично я больше связан с реверсом как таковым. Поэтому мне интересней узнать какие уведомления обрабатывает приложение, было бы неплохо это увидеть в самой студи... я имею ввиду воссоздание cpp и хидеров с классами, их вирт.функциями... а также воссоздание rc и resource.h

    То есть главная цель не дублировать работу Иды а дополнить её. Сама же навигациями по функциям и классам с помощью Visual Assist довольно привлекательная.
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    чего захотел :)

    код, генерируемый Delphi отличается от MFC (точнее сишного).

    Тут уже придется декомпилятор C/C++ писать
     
  5. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    rmn
    Я не хочу создавать именно чистый декомпилятор в виде кода на псевдосишке - цель была бы слишком фантастической :). Достаточно чтоб в хидере указывалось название функции полученое с "message map-a" и RVA. Дальше можно будеть и скрипт для Иды создать.

    Мне интересен именно Ваш взгляд на функциональность такой проги.
    Например: в студии открываеться ресурс диалога, вибыраеться кнопка и пользователь видит все функции которые обрабатываються даной кнопкой. Что то похожее именно на смысл DeDe - декопилятор самого кода посредственный, но воссоздание pas-файлов и dfm -прекрасная вещь.
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    под отличием в коде Dephi/C я имел в виду то, что в C символьная инфа не сохраняется в exe, как в дельфях. Так что, о именах функций, классов, переменных забудь.
     
  7. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Я вообщето в курсе :)

    Речь немного о другом:
    1) найти vtbl address и разобрать по функциям (получаем например GetMessageMap, OnNotify...)
    2) message map - определить обработчики уведомлений (если WM_DESTROY - то дать название функции OnDestroy...)

    То есть классы унаследованые от стандартных разобрать (пусть и с горем пополам) можна. А значит и дать им осмысленные названия, а значит и воссоздать хотя бы классы диалогов (для начала).
     
  8. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    DelExe
    http://reng.ru/tools/010/art.html
     
  9. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    ssx
    Спасибо. Направление движения вижу чётче.
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DelExe
    Наверное это было бы удобно, чтобы не бегать по таблицам методов. Кстати, DeDe не является декомпилятором, даже посредственным, и pas-файлы не воссоздает, хотя очень много полезной информации и дает.
     
  11. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    Между прочим это весьма реально...
    Visual C++ компилит код всегда одинаково :)
    Я бился 3 часа и смог востановить класс из проги так, что он компилировался почти байт-в-байт как в EXE :)
     
  12. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    CnCVK
    Что ты имеешь в виду под словом одинаково? И что, сложность кода не зависит от оптимизации?

    Самое сложное в декомпиляторе - проанализировать структуру кода и выявить конструкции if, if-else, loop, switch, если использовалась оптимизация. Декомпилировать линейные участки легче, хотя и здесь тоже есть свои сложности.
     
  13. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    а кто нибудь видел, что ms vc++ 7.0 делает из:
    Код (Text):
    1.     extern int a[256];
    2.     int s = 0;
    3.     for(int i = 0; i < 256; ++i)
    4.         s += a[i];
    при максимальной оптимизации? Это же просто кошмар какой-то... глядя на код догадаться довольно трудно, что вначале все было так просто...
     
  14. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    А ты попробуй что-нибуть изменить
    код сразу изменится :)
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ustus
    ms vc++ всегда этим отличалась (изготовлением фарша из исходного кода)
     
  16. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DelExe
    Кстати, в связи с твоим пожеланием открывать ресурсы и показывать их на экране, у меня вопрос: как ты будешь отображать контролы, не являющиеся "знакомыми" для Дельфи? К примеру, навороченный лист-бокс, унаследованный от стандартного (и даже не прямой потомок стандартного)?
     
  17. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    [offtop]
    crypto
    Это очень качественный фарш :) - в смысле быстро работает. Системные программисты у мелкософта сильные, в отличии от прикладных :[]
    [/offtop]
     
  18. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    В помощь будущим декомпиляторам.
    https://www.openrce.org/articles/full_view/23
     
  19. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    crypto
    Отображать можно как простой контрол, а в конструкторе класса передавать ID ресурса. Другими словами - подход такойже как и при нормальном использовании стиля MFC в студии: потомков станд.класса много, конструктор через ":m_ID(ID)" принимает идентификатор контрола.
    Хотя, безусловно, я согласен - наглядности в ресурсах контрол иметь не будет. Но с другой стороны - это абсолютно прозрачно именно для реверса.
    Насчёт Дельфи - не совсем понял о чём речь. Суть в том что хидера и cpp открываються именно в VC.

    reverser
    Благодарю.
     
  20. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    reverser
    Двигается народ потихоньку :) Хотя многое и так уже известно.
    DelExe
    Подумал, что ты на Дельфях это будешь реализовывать.