Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Декомпиляторы

GPcH (admin@dotfix.net)

Спецвыпуск: Хакер, номер #057, стр. 057-016-1


Обзор средств для восстановления исходного кода программ

Сложность кода, генерируемого компиляторами языков высокого уровня, использование виртуальных машин, новые хитрые форматы хранения данных - VCL, Visual Basic, Java, FoxPro, .NET, наконец – все это ведет к тому, что обычных дизассемблеров native-кода перестало хватать для того, чтобы хоть как-то разобраться в работе программы. Реверсеру потребовались новые инструменты, которые смогли бы раскопать в миллионах байт исследуемой программы до боли знакомые ему строки языка, на котором она была написана. Вдруг выясняется, что стали необходимы декомпиляторы, и в этом обзоре пойдет речь именно о них.

Восстановление исходного кода программы во многом стало возможным из-за массы лишней информации об оригинальном коде в откомпилированном файле, а также из-за однотипности структур и операторов, используемых в языках высокого уровня. Декомпиляторы анализируют избыточную информацию, и, зная, как компилер того или иного языка любит представлять некоторые структуры, пытаются создать на базе сырого кода программы некоторое подобие исходника. У некоторых это даже неплохо получается. Лучше всего декомпилируются программы, которые выполняются не напрямую процессором, а виртуальной машиной (написанные на Java, Visual Basic, FoxPro, .NET и т.п.). Причина этого кроется в том, что инструкции виртуальных машин, как правило, высокоуровневые и объединяют сразу несколько машинных команд. Иными словами, это те же операторы и ключевые слова языка программирования, только записанные немного иначе, с некоторой оптимизацией инструкций языка разработки.

Вторыми по простоте декомпиляции идут программы, написанные на таких языках программирования, как Delphi и C++ Builder. Несмотря на то, что данные языки не имеют дела с виртуальными машинами (кроме разве что платформы .NET), а компилируют программы в нормальный native-код, они любят использовать собственные стандартные библиотеки вроде VCL и оставляют в EXE-файлах много лишней информации, используя которую можно также вполне успешно восстановить исходный код.

Что же касается новомодной среды разработки .NET, то благодаря действительно невероятному количеству избыточной информации, хранящейся в exe-файлах компилируемых программ, можно чуть ли не с 100% точностью восстановить исходный код, написанный кодером. Разработчики сего проекта вовремя опомнились и начали выдавать так называемые обфускаторы кода, способные вычищать лишнюю информацию из программ, чтобы хоть как-то препятствовать декомпиляции, однако об этом пока мало кто знает, а вот сама среда разработки используется уже вовсю. К чему это ведет? К росту количества кейгенов, конечно :).

Что ж, давай посмотрим, какие декомпилеры уже успели появиться на свет.

Dede by DaFixer

Самый знаменитый декомпилятор Delphi. Работает с программами, скомпилированным любыми версиями Delphi, кроме восьмой (так как она создает .NET-код). Парень с ником DaFixer, написавший его, действительно молодец. Мало того, что он создал такой полезный инструмент, он еще и не пожалел для народа исходного кода одной из его старых версий! Подобный сорец может очень пригодиться тому, кто изучает код, генерируемый борландовскими монстрами.

Содержание  Вперед на стр. 057-016-2