Народ, я тут закачал дему моего интерактивного декомпилера. Что скажете? Правда, доки лень писать. Хотя, кому они нужны, и так разберетесь.
http://wasm.ru/forum/index.php?action=vthread&forum=5&topic=5107&page=0#5 Наконец-то , я было хотел напоминать , что уже сентябрь заканчиваеться
http://shulgaaa.at.tut.by/screen.jpg , что-то не пашет линк . А как екзешку в этот декомпилер загнать , чтоб попробывать , только .dc открывает ?
http://shulgaaa.at.tut.by/screen.png вот рабочий линк.. нашел методом .. подумав.. т.к http://shulgaaa.at.tut.by/screen_s.png
Ну, во-первых, тестировать прогу рано, т.к. половина инструкций еще не реализована. Там явных багов тьма, не говоря о недостающих фичах. Во-вторых по поводу exe-шников. Я в readme.txt упомянул, что парсер выдран, поэтому, нет смысла пытаться скормить софтине что-нибудь помимо родимых .dc-шников (кто не знает, это то же самое что .doc для M$ Worda). Зато смело можно терзать прилагаемый сэмпл, пока она(прога) не форматнет ваш винчестер (шутка). А если без шуток, то для ввода данных я собираюсь написать плагин к детищу дяди Ильфака. Таким макаром юзер сможет выбирать интересующий код и данные вместе со всеми потрохами (типа лэйблов и аттрибутов) и отправлять далее в декомпилер на перемолку. Ведь сами понимаете, писать еще один интерактивный дизассемблер - это ж столько гемммороя, когда есть готовый. Лучше сконцентрироваться на вылизывании ядра декомпилера. Ну вы меня поняли...
я б накорябал сполпинка такое если бы придумал как НАЗЫВАТЬ переменные и метки. ну в самом деле, нафига декомпилить если все имена типа @kaamghcvd(аля борланд цпп4.5)
andruha123 Загрузив прилагаемый .dc в Revenge.exe и внимательно посмотрев различные представления (assembled, unfold, etc) и сопоставив код между ними, могу сказать, что Andrey Shulga поработал очень хорошо. Он отслеживает историю преобразований переменных и т.п. Т.е. анализирует не только control-flow, но и data-flow. Только пока непонятно, сколько нужно потратить ручного труда, чтобы из бинарного кода получился такой результат? Если почти все, что представлено в demo файле, сгенерила программа (естественно, кроме вменяемых наименований переменных и функций. это дело человека.), то это одно дело. Если нужно много указывать "руками", то другое. Как, например, определяется стиль вызова функций (pascal, cdecl, etc)?
Значит, все что представлено, было получено после перемола прогой сырых ассемблерных листингов, взятых из дизассемблера. Ручная доводка свелась к следующему: <ol type=1> <li> Удаление лишних(продублированных) структур путем их слияния. Поскольку, декомпу скармливается произвольный материал (в любой последовательности), то при анализе типов данных некоторые указатели на структуры не трассируются в одно место. Это и приводит к генерации лишних структур. В принципе, без структур вообще можно обойтись, код будет компилируем, хотя и зас..н приведением типов. <li> Были переименованы имена функций, структур, их полей, некоторых глобальных и локальных переменных в осмысленные (тут я особо не мудрил, т.к. у меня есть оригинальные исходники того проекта, don't worry - it's open-source). </ol> На все у меня ушло ~4 часа. Я даже не стал править блочную организацию функций (if, else, switch, &&, ||). Все это заложено в авто-анализе, хотя, чтобы, например, превратить goto [eax] в switch(..), достаточно одного нажатия кнопки. По поводу типов вызовов функций (calling conventions) - тут все тоже до-безобразия просто. Но об этом как нибудь потом.
andruha123 Вещь мега-рульная - excellent work - но когда можно будет грузить реальный код, или генерировать эти самые dc файлы? Что за проект? Можно линк?
уже года полтора назад попал на сайт, посвященный сабжу, все ждал приятно видеть, что хоть как-то оживает. надеюсь проект все же реализуется, очень интересный. (особенно нравится восстановление с++ классов, из скрина видно, что вроде Andromeda это умеет) только вот в одиночку непросто все это воплощать в жизнь, мне кажется это слишком сложно. и распространять вы его как собираетесь ? платно/бесплатно ? может стоит помощников поискать ?
Точно. Это не часики на трейбаре. Толковые помощники не помешали бы. Проект реально осуществим, и у меня есть куча идей как это сделать. Жаль, что на новой работе у меня может не оказаться свободного времени на это, поскольку до сих пор проект продвигался на чистом энтузиазме и по возможности...