DotFix :: Портал разработки и защиты программ
Главная
Программы
Статьи
Разное
Форум
Контакты
Автор: GPcH. Дата публикации: 19.02.2006

Обзор декомпиляторов

Предисловие
Статья первоначально писалась для журнала СПЕЦ Xakep. И вышла в апрельском номере прошлого года, потому заранее извиняюсь за немного устаревшие данные. К примеру P32Dasm на данный момент уже довольно стабилен, а в VB Decompiler уже добавлено с того времени столько возможностей, что он уже по настоящему мощное средство для декомпилирования VB программ.

Методика восстановления исходного кода
Как часто у тебя бывало такое, когда теряешь исходники одной из своих разработок и не можешь их восстановить? Вот бы перевести EXE файл обратно в исходный код, да? Но знакомые либо не могут тебе ничем помочь, либо называют твои идеи бредом. Конечно, того что ТЫ написал в своей программе с точностью до байта уже не восстановить, но частично выдрать сорс из EXE все же можно. Об этом и пойдет речь в данной статье.

Введение
С чего же начала свою жизнь идея декомпиляции уже готовых программ обратно в исходник? Как ни странно - из-за наличия в этих самых экзешниках избыточной информации и однотипности своеобразных структур и операторов, используемых в языках высокого уровня, что позволило из машинных кодов откомпилированного файла выделить эти структуры и попытаться восстановить (хотя бы частично) исходный код. Как известно - лучше всего декомпилируются программы, которые выполняются не процессором, а виртуальной машиной. Можно привести множество примеров. Это и Java, и Visual Basic, и FoxPro. Список можно продолжать еще долго, я лишь назвал самые яркие и всем известные примеры. Причина упрощения написания декомпилятора в том, что инструкции виртуальных машин как правило высокоуровневые и объединяют сразу несколько машинных команд. Иными словами это те же операторы и ключевые слова языка программирования, только записанные немного иначе и с некоторой оптимизацией инструкций языка разработки. Вторыми по простоте декомпиляции идут программы, написанные на таких языках программирования как Delphi и C++ Builder. Несмотря на то, что данные языки не имеют дело с виртуальными машинами, а компилируют программы в нормальный native код - они позволяют себе использовать собственные стандартные библиотеки типа VCL и оставляют в EXE файлах много избыточной информации, используя которую можно также написать практически полный декомпилятор этих языков. Что же касается новомодной среды разработки .NET, то благодаря огромному количеству избыточной информации, хранящейся в EXE файлах компилируемых программ, можно чуть ли не 100% восстановить исходный код разработанный кодером. Разработчики сего проекта вовремя опомнились и начали писать так называемые обфускаторы кода, способные вычищать избыточную информацию из EXE файлов программ, но мало кто об этом пока знает, а вот сама среда разработки уже вовсю используется. К чему это ведет? К росту кейгенов конечно :) Ладно, с причиной возможностей декомпиляции вроде разобрались, теперь давай посмотрим, какие же декомпиляторы уже написаны, как их юзать и насколько высоки их возможности по восстановлению исходных кодов.

Dede by DaFixer



Самый знаменитый декомпилятор программ, написанных на Delphi, причем всех версий, кроме восьмой (для восьмой юзай декомпилеры .NET программ, так как там уже не native код). Написан он парнем с ником DaFixer. Этот парень поистине молодец. Мало того, что он написал такой классный инструмент, но и не пожалел для народа исходник одной из старых версий этого декомпилера. В общем, если сорс нужен - беги на wasm.ru. Что же умеет программа? А умеет она очень многое. Для начала предоставляет тебе все формы в первоначальном виде и дает возможность полазить про процедурам и функциям, имеющимся в программе. Помимо дизассемблерного листинга этих функций программа пытается распознать стандартные операторы и типы дельфей и добавляет их в коментарии к ассемблерному коду. Особенно радует распознавание функций типа:

CODE NOW!
try
..
except
..
end;



Если ты ююзаешь Win32dasm в качестве ддизассемблера (о ужас!!!) - программа может экспортировать данные в понятный ему формат. Вобще весьма позитивный декомпилер. Плюс ко всему программа может сгенерить исходник, который можно открыть в Delphi. Главный минус - программа не может выдергивать из EXE компоненты используемые в программе, потому в исходнике будет множество нераспознанных типов данных. Но это не беда, так как рабочий код все равно не получить, а вот исследовать его - пожалуйста. Берегись конкуренты - теперь ты можешь (если тебе конечно плевать на законы, чего я тебе не советую) заглянуть в их код и позаимствовать их идеи.
Прогу вместе с исходниками бери с www.wasm.ru

SourceRescuer



Еще один декомпилер дельфей, но попроще. Может восстанавливать только формы и генерить заголовок pas файлов. Главное отличие от dede - работает мгновенно и имеет более эргономичный интерфейс. Чтож, одной проге дано иметь крутой интерфейс, другой - большие возмоджности. тут ничего не поделаешь. Из главных особенностей проги можно выделить то, что она генерит шаблон исходника не только в формате дельфей, но и в формате билдера. Думаю эта фишка не лишняя, так как после компиляции билдерские проги от дельфевых мало чем отличаются, а вот декомпилять их только как Delphi код - не всегда разумно. Прога эта распространяется в друх видах: GUI и консольном. Насколько я понял требует регистрации.
Взять данный декомпилятор можно отсюда: http://www.ems-hitech.com/

REC by Giampiero Caprino
Полное название - the Reverse Engineering Compiler. Прога предназначена для декомпиляции программ, написанных на С++. Так как C++ очень мощный язык, который не приемлит виртуальных машин и огромных GUI библиотек, то можно сделать очень логичный вывод, что избыточной инфы он в EXE практически не пихает. Отсюда имей ввиду, что данный декомпилер всего лишь пытается распознать C++ код, а по большей части как бы конвертирует код с ассемблера на C++. Не удивляйся, если увидишь в исходнике что нибудь типа:

CODE NOW!
eax++;
for(eax=1000;eax=0;eax--)
{
ebx = ebx and eax;
}



Это нормально. И поверь лучше уж исследовать это, чем:

CODE NOW!
00400000: inc eax
00400001: mov eax, 1000
00400006: and ebx, eax
00400008: loop 00400006



Хотя кому как. Некоторые знают ассемблер даже лучше чем русский матерный :)
Смею еще тебя предупредить, что программа пока работает не очень стабильно по крайней мере версия 1.4, которую я видел. Потому остается только пожелать проекту его дальнейшее развитие, так как прога нужная и думаю пригодится не только исследователям, но и разработчикам.
Насколько я помню - прога лежит на www.wasm.ru

.NET Reflector by Lutz Roeder



Динамично развивающийся бесплатный и мощный декомпилятор .NET сборок. Практически любой EXE файл, собранный на .NET технологии он может представить в виде полного исходника со всем деревом наследования классов. Подсветка синтаксиса, гиперссылки на объекты классов, удобный и приятный интерфейс. Все это говорит лишь об одном: в декомпилировании .NET сборок этой проге нет равных. Если ты исследуешь .NET программы или просто хочешь взглянуть на свою разработку глазами исследователя - быстрее качай эту прогу. Must Have однозначно. Также у проги есть "младший брат" - тулза для выдирания ресурсов из .NET сборок. Эта примочка также бесплатна и лежит на то же сайте, что и Reflector.
За прогой и ее обновлениями не забудь заходить на: http://www.aisto.com/roeder/dotnet

DJ Java Decompiler



А это уже декомпилер Java классов. Довольно удобен и прост в использовании. открываешь в нем класс и уже созерцаешь исходник. Имеется довольно мощная подсветка синтаксиса, поиск и настройки. Также есть браузер классов и объектов. В общем довольно мощный и интересный декомпилятор. Жаль что только EXE файлы написанные на Java не декомпилирует.
Прогу можешь скачать отсюда; http://members.fortunecity.com/neshkov/dj.html

ReFox by Jan Brebera



Со слов людей, юзающих его - довольно мощный декомпилер прог, напинанных на фоксе. Причем версия фоксы не критична - декомпилер берет и Dos и Windows версии. Декомпилер берет не только стандартные, но и закриптованные фоксой модули. Даже если код был скомпилен под Macintosh - декомпилер возмется его декомпилировать и даже портирует выходной вариант по DOS/Windows. Короче, если ты долго разрабатывал экономическую прогу для своего отдела и ненароком держал сорцы на стареньком винте, который приказал долго жить - заюзай ReFox - он сочтет за честь восстановить для тебя сорцы.

Декомпиляторы Visual Basic’а
Я не зря решили их все объединить под общим заголовком. Во первых их очень много и постоянно появляются все новые и новые. Во вторых все декомпиляторы разделяются по возможностям на три типа: декомпиляторы форм, редакторы форм и декомпиляторы пикода. Также есть декомпиляторы, сочетающие в себе несколько возможностей - о них мы поговорим в самом конце. А сейчас представлю тебе все три типа декомпилеров.

VBRezQ



Один из самых стабильных декомпиляторов форм. Хотя, больше ничем и не примечателен. Объявления API функций делает без параметров, от чего пользы мало, код не декомпилирует вообще. Имеет довольно подробную документацию и просит за свое использование немало зеленых президентов. В общем, если тебе не жалко денег и нужно декомпилировать только элементы интерфейса - рекомендую :)
Саму прогу можно найти тут: www.vbrezq.com

VB Editor by HEXMAN



Абсолютно бесплатный редактор форм и лежащих на них объектах. Если ты занимаешься русификацией программ, но не можешь ничего поделать с прогами, написанными на VB (Restorator тут бессиллен) - смело юзай данную прогу. Эта программа просто рай для локализаторов интерфейса. Программа имеет двухязычный интесфейс (Французский и Английский), причем по дефолту почему-то грузится Французский :) Поможет тебя данная тулза и сгенерить форму, на основе сделанных изменений, так что прога подойдет и как альтернатива уже упомянутого выше VBRezQ.
Саму прогу можно найти тут: http://www.multimania.com/hexman

VBReFormer by Sylvain Bruyere



Еще одна работа французских программистов. Эта прога явно помощнее предыдущей. Помимо просмотра и изменения форм предоставляет также возможность выдрать из EXE всякие изображения, которые обычно лежат в frx файлах. Trial версия позволяет только просматривать результаты. При этом не только запрещается сохранять результат, но и вообще прога постоянно обнуляет буфер обмена дабы исключить и возможность копирования. Отсюда прежде чем запускать прогу - убедись, что в буфере нет нужных и еще не сохраненных данных. Помимо всего прочего прога предоставляет для обзора некоторые данные из заголовка EXE файла, потому адрес точки входа в программу и Image Base можно узнать прямо не отходя от VBReFormer’а. Еще один плюс софтины - она умеет распознавать используемые в декомпилируемой программе ActiveX файлы и позволяет просмотреть их все свойства и методы. Жаль только что не использует эту инфу при генерации форм - там все ActiveX’ы выглядят немного убого, без свойств и присвоенных им данных. При желании эта тулза может обыскать весь твой жесткий диск в поисках прог, написанных на VB. Зачем это нужно - не знаю, наверное для тестирования возможностей программы на разных EXE’шниках.
Если прога приглянулась, то Trial версию можешь взять здесь: http://www.decompiler-vb.tk/

RaceEx6



Еще один декомпилер. Пытается декомпилить и формы и p-code, но представляет всю эту информацию в таком убогом виде на экран, что фиг поймешь, какие данные к чему относятся. Также как и предыдущая тулза - умеет дергать графику из прог, написанных на VB. Пытается декомпилировать p-code, правда пока декомпилит только методы, а с передаваемыми в них параметрами туго. В общем, если довести интерфейс до ума - вполне нормальная тулза бы получилась, но автору судя по всему лень этим заниматься.
Брать тулзу можешь отсюда: http://www.raceco.us

exdec by josephco



Наверное самый известный в среде крэкеров декомпилятор пикода. Как говорится старенький, но рабочий. Возможность у проги всего одна - декомпилить p-code в том виде в каком он есть. То есть того кода который писал программист на VB ты не увидишь, а вот то что сгенерил компилятор - да, причем в довольно читабельном для профессионала виде. В комплекте с прогой идут примеры и небольшой туториал. Туториал поможет тебе хотя бы немного понять, что значит вся эта декомпиленная муть и как ее читать, потому если ты разбираешься с p-code’ом впервые - очень советую обратить на этот туториал внимание.
Прогу ищи через поисковики или на www.wasm.ru - найдешь обязательно.

VBParser



Почти полный аналог exdec, только написанный китайскими разработчиками. Результат своей работы не только выводит на экран, но и сохраняет в файле ParseVB.txt. На случай падения проги (а такое частенько случается) - этот файл здоровски помогает.
Тулзу также придется искать в поисковиках, сайта у нее своего насколько я знаю нет.

p32Dasm by DARKER



Лучшая альтернатива exdec’у и VBParser’у. Прога в отличии от двух предыдущих написана на VB (exdec и VBParser написаны на C++) и динамично развивается последнее время. Имеет подсветку синтаксиса, калькулятор адресов, умеет декомпилировать с определенного смещения в файле, а также подобно дизассемблерам способна представить все строки и функции, юзаемые в программе в удобном списке с возможностью мгновенно перейти на выбранную позицию. Главный недостаток проги - относительная нестабильность работы и медленная скорость, в остальном же прога стоит того, чтобы ее посмотреть и юзать. Распространяется бесплатно.
Брать тулзу можешь отсюда: http://llamellik.webzdarma.cz/forumb/index.php

VBDE by iorior



Довольно неплохой декомпилятор, причем бесплатный. Декомпилит формы (правда без ActiveX’ов, если они присутствуют). Выдает адреса на все процедуры, а если это возможно, то выводит не только адрес процедуры, но и ее имя, что значительно упрощает анализ. Пытается декомпилировать Native Code, хотя в большинстве случаев кроме операторов сложения, вычитания и вывода MessageBox’а - ничего декомпильнуть не может. Несмотря на это прога довольно удобная и стабильная, потому рекомендую всегда иметь под рукой.
Сайта у проги нет, потому ищи через поисковики - найдешь точно - много где лежит.

Semi VB Decompiler by vbgamer45



Довольно интересный проект. До недавнего времени распространялся в исходниках на VB, а теперь стал коммерческим. Несмотря на свою глючноватость, бесплатная версия может довольно многое. Декомпилятся формы, содержащаяся в них графика и названия процедур. Также определяются используемые в проге API функции. Помимо этого, предоставляется информация из EXE заголовков. Есть даже попытки декомпилять p-code. Так что тулза создает довольно приятное впечатление. Огромный респект автору за сорцы - думаю многим полезно будет в них заглянуть, чтобы понять, как декомпилится VB код. Честности ради скажу - сорцы жутко неоптимизированно написаны, и порой смотря на некоторые участки кода хочется плакать, хотя этот код и выполняет свои функции. Но повторюсь - это бесплатно, а бесплатное не обсуждается :) Поэтому быстрее беги на: http://pscode.com/vb/scripts/ShowCode.asp?txtCodeId=55935&lngWId=1 пока сорцы еще там, а если хочешь - купи у автора новую версию проги - поддержи парня.

VB Decompiler by GPcH



Хе, хе, хе. Вот мы и дошли до моего декомпилера VB. При его создании я пытался внести в него как можно больше возможностей, при этом не загромождая интерфейс тем, что никогда не пригодится. В итоге имеем декомпилятор форм, с поддержкой ActiveX’ов лежащих на них (при этом декомпилятся только общие для все ActiveX’ов свойства), декомпилятор p-code’а (причем если в бесплатной Lite вресии он напоминает p32Dasm’овский, то в Pro версии прога пытается перевести p-code в исходникоподобный читабельный вид, что часто помогает быстрее востанновить нужные потерянные куски кода) и декомпилятор ссылок на API (при этом они записываются уже в объявленном виде со всем списком параметров). Ясен пень - подсветка синтаксиса тоже есть. Также есть для каждого модуля с кодом свой список встречающихся там строк с возможностью мгновненно перейти на участок кода, где юзается выделенная строка. Присутствует также и поиск, помогающий найти нужный код в активном окне. Резульат своей работы прога может сохранить, причем вместе с кодом и формами сохраняются и frx файлы с графикой и корректно прописываются ссылки на эти графические объекты в формах. В общем, если тебе не нужен детальный декомпиль p-code’а - вполне можешь ограничиться бесплатной Lite версией. Если все же нужна Pro - иди на www.vb-decompiler.org, там же можешь скачать Lite версию проги и посмотреть примеры работы Pro версии.

Заключение
Как видишь - декомпиляторов полно и их недостатка не наблюдается. При этом резко чувствуется грань между профессиональными и любительскими разработками. Причем эта грань очень велика и в качестве и в цене. Несмотря на это в большинстве случаев можно обойтись бесплатными разработками. Если ты прочитал эту статью чтобы научиться восстанавливать свои сорцы в случае падений жесткого диска - думаю ты уже нашел для себя нужные проги. Если же ты исследователь защит (я не люблю слово крэкер, мне больше нравится слово реверсер, так как оно более общее и правильное), то думаю для тебя не составит труда сделать даже коммерческие проги бесплатными для себя :) Главное не переусердствуй - помни, что закон существует и как ни странно он един для всех. Удачи!

Комментарии
отсутствуют

Добавление комментария

Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий:



04.09.2011 Долгожданный релиз VB Decompiler. Масса улучшений декомпиляции Native Code. Значительно расширенна и обновлена справочная система на русском и английском языках.
20.12.2010 DotFix Software поздравляет наших клиентов и посетителей сайта с наступающим Новым Годом и рождеством! Желаем приятно провести праздники и успехов в новом году!
28.11.2010 Выпущена новая версия защиты DotFix NiceProtect. Основные изменения коснулись обфускатора Delphi программ. Теперь имеется полная поддержка Tab и Page контролов на формах, что обеспечивает максимальную совместимость обфускации с Delphi XE программами.
21.10.2010 Обновлен декомпилятор Visual Basic программ до версии 8.1. Декомпиляция P-Code программ становится все более идеальной, также проделана большая работа по улучшению анализа Native Code и .NET приложений.
16.09.2009 Полностью обновлен движок сайта! Теперь все ссылки имеют читаемый понятный вид, разного рода глюки на страницах убраны. И теперь сайт полноценно работает на второй версии нашего движка.
Архив новостей
Яндекс цитирования

Движок сайта: DotFix Engine v0.2
Администрация сайта:
Надувные кровати, матрасы intex - надувные бассейны. . Оборудование для магазинов, 43sn. Витрины - оборудование для магазинов.