Декомпиляторы 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, написавший его, действительно молодец. Мало того, что он создал такой полезный инструмент, он еще и не пожалел для народа исходного кода одной из его старых версий! Подобный сорец может очень пригодиться тому, кто изучает код, генерируемый борландовскими монстрами. |