Сейчас на форуме: Rio, -Sanchez-, artyavmu, CDK123, sashalogout (+8 невидимых) |
eXeL@B —› Софт, инструменты —› Декомпилятор С++ |
Посл.ответ | Сообщение |
|
Создано: 11 июля 2011 22:12 · Личное сообщение · #1 Пришло время вернуться к отложенному проекту CppSourcer (начало работы Отличия от предыдущей версии 2.00: - Оптимизирован движок декомпилятора на основе положительного опыта, полученного в результате работы над VMSweeper. - Плагин собран на VisualStudio 2008 под IDA 5.7 - Исправлено значительное число мелких ошибок. Ограничения текущей 2.01 бета версии: 1. Обработка только exe файлов. 2. Наличие полной или частичной отладочной информации. 3. Протестирован пока только на файлах, созданных VisualStudio 6.0 Планы на ближайшее и не очень будущее: 1. Протестировать плагин на остальных версиях VS 2. Сделать декомпиляцию других типов файлов. 3. Сделать полную декомпиляцию файлов с минимальной отладочной информацией. 4. Реализация декомпиляции без отладочной информации. Если есть желающие оказать помощь в реализации проекта, то я могу создать SVN раздел для совместной работы. В прилагаемом пакете сам декомпилятор и тестовый пример с оригинальными и декомпилированными исходниками. 5998_11.07.2011_EXELAB.rU.tgz - CppSourcer2beta01.rar ----- Everything is relative... | Сообщение посчитали полезным: Airenikus, _ruzmaz_, obfuskator, daFix, Jonny, 4kusNick, Gideon Vi, VodoleY, HandMill, Ultras, DimitarSerg, sendersu, OnLyOnE, ClockMan, [Nomad], reversecode, stas_02, SReg, kampaster |
|
Создано: 11 июля 2011 22:58 · Поправил: reversecode · Личное сообщение · #2 попробовал на славноизвесном msdis140.dll/pdb на десятке функций что я попробовал был одинаковый exception собственно вопрос - может отключить на даном етапе pdb инфо и пофиксить анализатор что бы он банальный псевдо листинг выводил? правда не знаю как устроен твой декомпиль и можно ли это может там все так завязано что нитак нисяк ну msdis140 не совсем такая и моя, просто это единственная либа хорошо попадающая под возможности соурсера |
|
Создано: 12 июля 2011 09:37 · Личное сообщение · #3 reversecode пишет: собственно вопрос - может отключить на даном етапе pdb инфо и пофиксить анализатор что бы он банальный псевдо листинг выводил? Не нужно опережать время, ограничения текущей версии я привел, твой файл под них не попадает, да и ИДА версии 6.1 - вопросы будут приниматься, рассматриваться и решаться в пределах того что реализовано. И не нужно приводить листинги исключений, которые никакой полезной информации не несут. В будущем дойдет очередь и до этого файла..., а сейчас, если есть желание действительно помочь необходимо выполнить следующее: 1. Протестировать сурсер на предложенном примере с другими версиями ИДА на разных осях и сообщить отличия от выложенных результатов. (Сделано на WinXP SP3 с ИДА 5.7) 2. Скомпилировать из выложенных исходников тестовые примеры под другие версии VisualStudio (7.0, 2003, 2005, 2010, под 2008 сделаю сам) и проверить на соответствие образцу. Когда эта работа будет сделана перейду к реализации п.2 из первого поста и начну с твоей либы... ----- Everything is relative... |
|
Создано: 12 июля 2011 22:12 · Личное сообщение · #4 |
|
Создано: 12 июля 2011 23:19 · Личное сообщение · #5 1.В каком виде выкладывать результаты сравнений? Лучше на примере. Если имеются отличия от оригинала, то выкладывай в архиве всю папку созданную декомпилятором. Под VS 2010 SP1 есть несколько ошибочек при компиляции, позже выложу лог, если надо. Если ошибки эти - str = vDN_UNKNOWN + vDName("::") + str; в двух местах, то лог не нужен - обнаружил их при компиляции в VS 2008. ЗЫ: Под WinXP SP3 c ИДА 6.1 сурсер работает нормально. ----- Everything is relative... |
|
Создано: 13 июля 2011 10:30 · Поправил: Ultras · Личное сообщение · #6 Тестовый проект: ---------------------------------------------- - Проект Cryptest (Debug build, Win32) из Crypto++ 5.6.1 (свободно скачивается с http://www.cryptopp.com и быстро компилируется). - Студия 2008 - IDA 6.1 *RDW* - Win2k3 SP2 По F3(весь проект) или F5(отд. ф-ия) ида вылетает с эксептом. На выходе успевают создасться 3 файла(All*.log) в ErrorLogs, но об ошибке в них ни слова, поэтому их не заливал. По времени файла и по содержимому, такое ощущение что не до конца заполнился AllTypes.log --------------------------------------------- ----- .[ rE! p0w4 ]. |
|
Создано: 13 июля 2011 12:26 · Поправил: C/Kashmir · Личное сообщение · #7 Win7 + IDA 6.1 - Вылет по F5, F3 не реагирует, дамп под 250 MB Win7 + IDA 5.5 Позже поставлю IDA 5.2 |
|
Создано: 13 июля 2011 16:29 · Личное сообщение · #8 Благодарю всех откликнувшихся. Можно подвести предварительные итоги: 1. Плагин стабильно работает на WinXP SP3 под IDA 5.7 и IDA 6.1 (нужен результат под IDA 5.2 и IDA 5.5, их у меня нет, т.к. давно уже снес). 2. На Win2000 имеются незначительные ошибки < 1% от декомпилированного кода. На Win7 вообще ничего не работает. Действий по этим вопросам предпринимать пока не буду, рекомендую не использовать указанные системы. 3. Компиляторы: - VC6 - образец декомпиляции - VC2008 - первоначально ситуация была аналогична этой По времени файла и по содержимому, такое ощущение что не до конца заполнился AllTypes.log , устранил, декомпиляция проходит, но кол-во недекомпилированных функций составляет 20%, на чем сейчас и работаю. Хотелось бы получить информацию по декомпиляции именно этого тестового примера а не каких либо других на VC > 6 версии и < 2008 версии, на 2010 версии пока работать то же не будет. ----- Everything is relative... |
|
Создано: 13 июля 2011 16:44 · Поправил: gena-m · Личное сообщение · #9 |
|
Создано: 13 июля 2011 16:51 · Поправил: C/Kashmir · Личное сообщение · #10 WinXP SP3 IDA 5.2/5.5 - стабильно, Win2k3 SP2 IDA 5.2/5.5 - стабильно, результат тот же, кроме одного |
|
Создано: 13 июля 2011 17:05 · Поправил: reversecode · Личное сообщение · #11 ida 52 xp sp2 http://rghost.ru/14483511 ida 55 xp sp2 http://rghost.ru/14483671 на обоих есть варнинги в логах Code:
но на ida 5.5 есть еще и Code:
ошибок вроде нет листинги .cpp на diff не сравнивал 2 Vamit, а повесь деком на другой хоткей? F6 к примеру, что бы с ильфаковским не мешалось |
|
Создано: 18 июля 2011 21:05 · Личное сообщение · #12 CppSourcer 2.02 beta Добавлено: 1. Собран с использованием IDA SDK 6.1 2. Окно About при вызове плагина. 3. Изменено управление декомпиляцией: - F2 декомпиляция одиночной функции - Ctrl+F2 декомпиляция всей программы 4. Вывод версии линковщика декомпилируемой программы в файл AllModules.log 5. Вывод версии декомпилятора в создаваемые cpp и h файлы. 6. Обработка модификации SEH пролога функции с ___security_cookie. 7. Обработка регистрового вызова виртуальных функций. Скомпилируйте, плиз, тестовый примерчик под VC 2010... 1f91_18.07.2011_EXELAB.rU.tgz - CppSourcer2_02_beta.rar ----- Everything is relative... | Сообщение посчитали полезным: _ruzmaz_, Airenikus, obfuskator, res, DimitarSerg, 4kusNick, sendersu |
|
Создано: 18 июля 2011 23:23 · Личное сообщение · #13 |
|
Создано: 19 июля 2011 02:00 · Поправил: sendersu · Личное сообщение · #14 Vamit пишет: - F2 декомпиляция одиночной функции - Ctrl+F2 декомпиляция всей программы ето ж кнопки Ida (set breakpoint & break execution) как переопределить их? Vamit пишет: Скомпилируйте, плиз, тестовый примерчик под VC 2010... http://rghost.net/15027551 WinXP SP3 Eng Prof, IDA61 x32, игрался с тестовым примером + CppSourcer2_02_beta VS2008sp1 тест. прож. не собирается (2 ошибки) upd: Vamit пишет: Если ошибки эти - str = vDN_UNKNOWN + vDName("::") + str; в двух местах, то лог не нужен - обнаружил их при компиляции в VS 2008. CppSourcer.log: Info: Loading debug info... ++ Decompile WinMain (area: 0x0043E0E0-0x0043E1AF) Error: Trace: Instruction not found! ++ 2) стоя на _tmain, F2: файл __tmainCRTStartup.rpt Info: Decompile: Function __tmainCRTStartup (area: 0x004401B0-0x0044038A) Error: Stack: Out of stack! (1/--112) Error: Stack: Out of stack! (1/--112) //===================== UNHANDLED EXCEPTION ===================== idag.exe caused a EXCEPTION_ACCESS_VIOLATION in module CppSourcer.plw at 001B:041816D6 EAX=0000001E EBX=0012F5B8 ECX=01080160 EDX=0000000F ESI=01080160 EDI=0619BD60 EBP=00000000 ESP=0012F590 EIP=041816D6 FLG=00010202 CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000 //========================== CALLSTACK ========================== //=============================================================== декомпилил разные функи, в конце концов упала сама Ида... (во всех случаях ошибка Error: Stack: Out of stack! (x/-y) |
|
Создано: 19 июля 2011 07:49 · Личное сообщение · #15 |
|
Создано: 19 июля 2011 09:34 · Личное сообщение · #16 ето ж кнопки Ida (set breakpoint & break execution) как переопределить их? Блин, в дебагер-то я и не заглянул.... Предложите свои пару кнопок на декомпиляцию. sendersu пишет: декомпилил разные функи, в конце концов упала сама Ида... (во всех случаях ошибка Error: Stack: Out of stack! (x/-y) Если речь идет про тестовый пример скомпиленный VC2010, то ничего удивительного, до него я ещё не дошел, для чего и просил скомпилить проект под него... буду смотреть... Пока могу сказать, по аналогии с VC2008, что критически влияют на обработку разновидности или новые типы прологов функций по которым определяется тип стека, размер локальных переменных, обработчики исключений, что в итоге и приводит к указанному сообщению. ----- Everything is relative... |
|
Создано: 19 июля 2011 10:10 · Поправил: sendersu · Личное сообщение · #17 Vamit пишет: Если речь идет про тестовый пример скомпиленный VC2010, то ничего удивительного повторюсь, но речь конечно же идет о VS2008sp1 о чем упопянул в посте 2010- ето другая часть поста главный вопрос- Иде надо позволять грузить пдб-ку или нет? наглядный пример вс2008сп1, дебаг версия примера (с фиксом 2 ошибок - мож уже стоит их поправить в 1ом посте? или ето такая мини задачка для отсеивания ламо?) Code:
F2 дает Code:
|
|
Создано: 19 июля 2011 11:15 · Поправил: Vamit · Личное сообщение · #18 главный вопрос- Иде надо позволять грузить пдб-ку или нет? Пусть грузит, декомпилю хуже от этого не будет, но зато самому для проверки работать удобней... с фиксом 2 ошибок - мож уже стоит их поправить в 1ом посте? или ето такая мини задачка для отсеивания ламо? Пытался добавить вложение в старый пост, увы... или я это делать не умею, или это не предусмотрено правкой... Выкладываю здесь оригинальные исходники примера без ошибок с конфигурацией проекта под VC 2008. Теперь о проверках: 1. VC2010, после добавления в анализ этой версии компилятора проект декомпилировался успешно без ошибок и аналогично проекту, скомпиленному под VC2008. 2. sendersu Мне непонятно почему у тебя проект под VC2008 дает ошибки, у меня он декомпилируется полностью успешно, но имеются вариации исходного кода относительно VC6, но по большему счету они не критичны и отображают отличия в формировании asm кода разными компиляторами. Код же созданный VC2010 полностью аналогичен коду созданному VC2008. Но есть одно но - в приведенном листинге ИДА видно, что была попытка декомпиляции библиотечной АПИ функции _exit, которая не является функцией проекта, все результаты декомпилиции таких функций (а так же стабов всех типов) не гарантируются и при пакетной обработке файла декомпилятор их пропускает. Есть и второе но - в readme о нем упомянуто, что не всегда декомпиляция одиночной функции (F2) может дать правильный результат, это зависит от многих факторов (в частности декомпиляция функции с вызовом вирт. функции для которой ещё не распознана таблица вирт. функций класса (т.е. не декомпилированы конструктор с декструктором) приведет к ошибке), а в случае пакетной обработки (Ctrl+F2) при декомпиляции этой же функции ошибки не будет. fd14_19.07.2011_EXELAB.rU.tgz - OriginalSrcUnDecoratorVC2008.rar ----- Everything is relative... |
|
Создано: 19 июля 2011 12:34 · Поправил: sendersu · Личное сообщение · #19 Vamit пишет: OriginalSrcUnDecoratorVC2008.rar нету файла UnDecoratorMsvc.cpp (найти можно в 1ом посте) Vamit пишет: Мне непонятно почему у тебя проект под VC2008 дает ошибки, у меня он декомпилируется полностью успешно мне тоже мож какие идеи есть? upd: на другой машинке VS2008 завелось с пол оборота..... Info: ---------- Statistic ---------- Info: Decompiled functions - 131 Info: Error in functions - 0 Info: Created .cpp files - 2 Info: Created .h files - 1 буду искать разницу, пока идей нету насчет _exit - согласен, недочитал |
|
Создано: 22 июля 2011 11:18 · Поправил: Vamit · Личное сообщение · #20 При декомпиляции этой функции встретил непонятную мне ситуацию с аргументами на этом участке кода: Code:
по адресам 1040167E - 1040168F осуществляется вызов конструктора класса ostrstream, который имеет следующую декларацию: ostrstream(char *_Ptr, streamsize _Count, ios_base::openmode _Mode = ios_base::out); Как видно у него три аргумента, а откуда появляется 4 аргумент (строка 1040167E)? Причем это не аргумент последующей виртуальной функции (строка 104016B9), т.к. вот её декларация - virtual void FormatAddr(std::basic_ostream<char, std::char_traits<char> >&, unsigned long long); ХексРей 1.5 дает следующее представление кода Code:
что так же противоречит декларации вызова конструктора. Помогите разгадать загадку... ----- Everything is relative... |
|
Создано: 22 июля 2011 12:44 · Поправил: r_e · Личное сообщение · #21 Vamit Разгадка [url=здесь]http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/3d73f571-48e5-46ce-b623-3211e030f808[/url] Пользуйся cl /Faoutput.asm ----- старый пень | Сообщение посчитали полезным: Vamit |
|
Создано: 22 июля 2011 12:47 · Личное сообщение · #22 это скорее больше подскажет IOSTREAM.H Эти ссылочки может помогут: Или настройки компилятора были введены на оптимизацию, или так задумано, но больше к хидерам склоняюсь в этом случаи |
|
Создано: 22 июля 2011 13:57 · Личное сообщение · #23 r_e пишет: Разгадка [url=здесь]http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/3d73f571-48e5-46ce-b623-3211e030f808[/url] Вот теперь это то , дополнительный скрытый параметр в конструкторе класса, производного от виртуального класса, добавляет компилятор, который говорит конструктору инициализировать ему (значение 0) или не нужно инициализировать (значение 1) базовый виртуальный класс. res пишет: это скорее больше подскажет IOSTREAM.H А это ничего не подскажет, всё что там есть давно пройдено... ----- Everything is relative... |
|
Создано: 22 июля 2011 17:31 · Поправил: Vamit · Личное сообщение · #24 Ещё один вопрос в продолжение реализации виртуальных классов, в той же функции (пост #20) в строках 104016CD - 104016D4 идет получение указателя на базовый виртуальный класс. А дальше пошли мои догадки: - В edx загружается адрес таблицы виртуальных классов. Где она находится и что из себя представляет? - В строке 104016D1 из таблицы берется смещение размещения виртуального базового класса в производном. Почему индекс смещения 4? - В строке 104016D4 получают абсолютный адрес базового виртуального класса и далее идет вызов метода класса. И где вообще можно почитать про реализацию кода с виртуальными базовыми классами? Желательно с множественным виртуальным наследованием. Интересует именно реализация кода, а как всё это строится на С++ я знаю... ----- Everything is relative... |
|
Создано: 22 июля 2011 17:37 · Личное сообщение · #25 |
eXeL@B —› Софт, инструменты —› Декомпилятор С++ |