Эта процедура подразумевает под собой воспроизведение кода утилиты языком, которым она изначально была создана. То есть это обратная процедура компиляции (преобразование кода в компьютерные команды). Выполнить эти действия можно воспользовавшись специальными программами.
Способы преобразования файлов EXE
Необходимость преобразовать подобные файлы может возникнуть у пользователей, которые хотят получить информацию о характеристике различных утилит. Имеются определенные программы, предназначенные специально для декомпиляции.
Способ 1: Использование утилиты VB Decompiler
Что значит декомпилировать файл и как декомпилируются файлы exe
Декомпиляция — это процесс восстановления исходного кода программы из машинного кода. Декомпилятор — это программа, которая может совершить процесс декомпиляции. Декомпилятор может быть разным:
Декомпиляция exe в ahk
- декомпилятор exe;
- декомпилятор с;
- декомпилятор ассемблера;
- и др.
Декомпиляция — это любимый процесс хакеров, хотя в некоторых случаях этот процесс помогает и с хорошими намерениями. Пока звучит как непонятная «каша», но давайте разбираться во всем по порядку.
Компиляция и декомпиляция — это противоположные процессы
Все мы знаем, что программирование может вестись на множестве языков. Всего языков насчитываю т тысячи, наиболее популярных несколько десятков, но их не понимает ни один компьютер. Компьютер понимает только свой собственный машинный язык, который состоит из единиц и нулей. Для того чтобы компьютер понял, что написал программист , необходим а компиляция.
Компиляция — это процесс преобразования программы в двоичный код. Двоичный код — это низкоуровневый машинный код, который понимает «железо». Код , написанный разработчиком , — это код высокого уровня, который понимает разработчик и интерпретаторы с компиляторами. Не будем углубляться глубоко в эту тематику, потому что есть языки компилируемые, есть интерпретируемые, есть «нейтральные», у которых код компилируется не в машинный код, а в собственный байт-код. Сейчас не об этом.
Итак, компиляция — это «перевод» программ, написанных разработчиками , на понятный компьютеру машинный язык. Этот процесс считается необратимым. Поэтому полностью восстановить исходный код программы после ее компиляции не может ни одна программа. Хотя сам такой процесс существует, и называется он декомпиляция.
Декомпиляция — это обратный процесс компиляции, также его называют «обратная разработка» или «реверс-инженерия». Суть ее сводится к простому — восстановить исходный код программы. Причем «хорошего» в этом процессе мало. Очень редко декомпиляцию применяют в добрых целях, например, чтобы восстановить исходники.
Как извлечь исходник из читов или программ
Декомпи ля ция не восстанавливает исходники, а лишь предоставляет общую и запутанную структуру, в которой бывает очень трудно разобраться. Причем при декомпиляции прослеживается важная зависимость — чем сложнее и больше программа, тем менее точным будет конечный результат. Плю с и ногда разработчики применя ю т метод обфу ск аци и ( запутывания) исходного кода, тогда после декомпиляции такой программы исходный код практически не читаем.
Так для чего тогда нужна декомпиляция? Получить двоичный код программы может любой, а получить ее исходники — это уже проблема. Но бывают случаи, когда без исходников невозможно осуществить какое-либо действие с программой, например:
- полностью скопировать программу или какой-то отдельный ее функционал;
- взломать программ у б ез понимания ее структуры и архитектуры;
- внедрить вирус в программ у б ез понимания того, как построена программа;
- чтобы «обойти» лицензию или вообще отключить проверку лицензии;
- и др.
В основном декомпиляция нужна для «серых» целей, поэтому реверс-инженерия в некоторых странах наказуема законом. А декомпиляция — это важная часть реверс-инженерии, хотя очень часто эти два понятия считают идентичными.
Для того чтобы декомпиляция была более-менее успешной , важно знать , на каком языке написана программа или какой файл нужно декомпилировать ; от этого будет зависеть , какой инструмент нужно применять, например , декомпилятор «ехе» и декомпилятор «С» — это будут две разные программы. Есть , конечно , «общие» декомпиляторы, которые работают сразу со множеством языков, но результаты еще менее точны, чем у специальных декомпиляторов.
Сегодня мы рассмотрим , какой можно использовать декомпилятор, чтобы декомпилировать файл «ехе».
Декомпилятор ехе
Как мы знаем, ехе-файлы применяются в операционной системе Windows. В самой Виндовс по умолчанию не установлен «декомпилятор ехе», поэтому придется использовать программы «со стороны», которые могут помочь в решении этой задачи. Не будем задаваться вопросом, для чего вам это нужно. Нужно — значит , нужно.
Декомпиляторы ехе-файлов:
- VB Decompiler. Это самый популярны й декомпилятор ехе. Он ориентирован на декомпиляцию ехе-файлов, которые были разработаны при помощи языка программирования Visual Basic. Полностью бесплатный декомпилятор ехе.
- EMS Source Rescuer. Это тоже бесплатная программа, но она ориентирована на ехе-файлы, которые были созданы при помощи языков программирования Delphi или С++.
- ReFox. На нем отлично проходит декомпиляция ехе, если декомпилируемый файл был создан при помощи Visual FoxPro или FoxBase. Условно-бесплатная программ а с небольшим бесплатным периодом, далее придется платить.
- DeDe. Отличный декомпилятор ехе, но работает только с языком программирования Delphi.
- DnSpy. Это очень мощный инструмен т д ля «потрошения» программ и файлов exe. Декомпилирует программы на С# и Visual Basic. Помимо декомпилятора , несет в себе еще множество других инструментов: отладчик, НЕХ-редактор, редактор сборки и др.
- IDA Pro. Это профессиональный комплекс инструментов для полноценной реверс-инженерии. Среди прочих инструментов легко найти декомпилятор ехе. Однако у этой программы есть один минус — она очень дорогая с неадекватно завышенными ценами. Поэтому выхода два: на официальном сайте попробовать бесплатную демо-версию и решить свою проблему или тщательно поискать слитую в свободный доступ нужную версию программы — такие тоже имеются. Есть и третий выход — купить лицензию, но тогда будьте готовы заплатить за нее от 900 и до 4000$.
Заключение
Чтобы правильно подобрать декомпилятор для ехе-файлов, нужно знать , на каком языке написан желанный файл. Только в этом случае можно получить более-менее адекватный исходный код программы. Если вы не знаете, на каком языке написан ехе, тогда нужно будет пропустить ваш файл через несколько декомпиляторов , и тогда один из них выдаст вам искомый результат.
Обзор декомпиляторов
Статья первоначально писалась для спец выпуска журнала Xakep. И вышла в апрельском номере 2005 года. На сегодняшний день многие данные актуальны. Большинство описываемых продуктов с тех пор не обновлялись, а доступных альтернатив у них так и не появилось. Но есть и существенные изменения.
К примеру P32Dasm на данный момент уже довольно стабилен, а VB Decompiler настолько расширил свой функционал, что сравнивать версию 2005 года и текущую равнозначно сравнению DOS и Windows 11. Сегодня VB Decompiler является самым продвинутым средством для декомпиляции программ, написанных на Visual Basic. Теперь декомпилятор отлично работает с Native Code, умеет выдавать аналитические отчеты, поддерживает трассировку и дизассемблирует 32х и 64х битные .NET сборки.
Методика восстановления исходного кода
Как часто у Вы бывало такое, когда теряются исходники одной из разработок без возможности восстановления? Вот бы перевести EXE файл обратно в исходный код, да? Но знакомые либо не могут ничем помочь, либо называют данную идею полнейшим бредом. Конечно, того что Вы написал в своей программе с точностью до байта уже не восстановить, но частично восстановить исходный код из EXE все же можно. Об этом и пойдет речь в данной статье.
С чего же начала свою жизнь идея декомпиляции уже готовых программ обратно в исходник? Как ни странно — с наличия в этих самых экзешниках избыточной информации и однотипности своеобразных структур и операторов, используемых в языках высокого уровня!
Это позволило из машинных кодов откомпилированного файла выделить эти структуры и попытаться восстановить (хотя бы частично) исходный код. Как известно — лучше всего декомпилируются программы, которые выполняются не процессором, а виртуальной машиной. Можно привести множество примеров. Это и Java, и .NET, и Visual Basic, и FoxPro.
Список можно продолжать еще долго, я лишь назвал самые яркие и всем известные примеры. Причина упрощения написания декомпилятора в том, что инструкции виртуальных машин как правило высокоуровневые и объединяют сразу несколько машинных команд.
Иными словами это те же операторы и ключевые слова языка программирования, только записанные немного иначе и с некоторой оптимизацией инструкций языка разработки. Вторыми по простоте декомпиляции идут программы, написанные на таких языках программирования как Delphi и C++ Builder.
Несмотря на то, что данные языки не имеют дело с виртуальными машинами, а компилируют программы в нормальный native код — они позволяют себе использовать собственные стандартные библиотеки типа VCL и оставляют в EXE файлах много избыточной информации, используя которую можно также написать практически полный декомпилятор этих языков. Что же касается новомодной среды разработки .NET, то благодаря огромному количеству избыточной информации, хранящейся в EXE файлах компилируемых программ, можно чуть ли не 100% восстановить исходный код написанный автором. Разработчики сего проекта вовремя опомнились и начали писать так называемые обфускаторы кода, способные вычищать избыточную информацию из EXE файлов программ, но мало кто об этом пока знает, а вот сама среда разработки уже вовсю используется. К чему это ведет — все прекрасно знают. Ладно, с причиной возможностей декомпиляции вроде разобрались, теперь давайте посмотрим, какие же декомпиляторы уже написаны, как их использовать и насколько же высоки их возможности по восстановлению исходных кодов.
Dede by DaFixer
Самый знаменитый декомпилятор программ, написанных на Delphi, причем всех версий вплоть до Delphi 7! Восьмая версия естественно не поддерживается, так как там .NET, но для него свои декомпиляторы, так как там уже не native код. Написан он парнем с ником DaFixer. Этот парень поистине молодец.
Мало того, что он написал такой классный инструмент, но и не пожалел для народа исходник одной из старых версий этого декомпилятора. В общем, если продукт нужен — ссылку на скачивание найти не проблема. Что же умеет программа? А умеет она очень многое.
Для начала предоставляет все формы в первоначальном виде и дает возможность полазить про процедурам и функциям, имеющимся в программе. Помимо дизассемблерного листинга этих функций программа пытается распознать стандартные операторы и типы Delphi и добавляет их в коментарии к ассемблерному коду. Особенно радует распознавание конструкций типа:
try .. except .. end;
Если Вы используете Win32dasm в качестве ддизассемблера (о ужас) — программа может экспортировать данные в понятный ему формат. Вообще весьма позитивный продукт. Плюс ко всему программа может сгенерировать исходник, который можно открыть в Delphi. Главный минус — DeDe не может выдергивать из EXE компоненты используемые в программе, потому в исходнике будет множество нераспознанных типов данных.
SourceRescuer
Еще один декомпилятор Delphi, но попроще. Может восстанавливать только формы и генерировать заголовок pas файлов. Главное отличие от DeDe — работает мгновенно и имеет более эргономичный интерфейс. Чтож, одной программе дано иметь крутой интерфейс, другой — большие возможности. тут ничего не поделаешь.
Из главных особенностей программы можно выделить то, что она генерирует шаблон исходника не только в формате Delphi, но и в формате C++ Builder. Думаю эта фишка не лишняя, так как после компиляции билдерские программы от дельфевых мало чем отличаются, а вот декомпилировать их только как Delphi код — не всегда разумно. Программа эта распространяется в друх видах: GUI и консольном и требует покупки лицензии.
Взять данный декомпилятор можно отсюда: www.ems-hitech.com
REC by Giampiero Caprino
Полное название — the Reverse Engineering Compiler. Программа предназначена для декомпиляции файлов, написанных на языках использующих С++. Так как C++ очень мощный язык, который не приемлит виртуальных машин и огромных GUI библиотек, то можно сделать очень логичный вывод, что избыточной информации он в EXE практически не вставляет. Отсюда имейте ввиду, что данный декомпилятор всего лишь пытается распознать C++ код, а по большей части как бы конвертирует код с ассемблера на C++. Не удивляйтесь, если увидите в исходнике что нибудь типа:
eax++; for(eax=1000;eax=0;eax—) < ebx = ebx and eax; >
Это нормально. И поверте, лучше уж исследовать это, чем:
00400000: inc eax 00400001: mov eax, 1000 00400006: and ebx, eax 00400008: loop 00400006
Хотя кому как. Некоторые знают ассемблер даже лучше чем ненормативную лексику.
Смею еще Вас предупредить, что программа пока работает не очень стабильно, по крайней мере версия 1.4. Потому остается только пожелать проекту его дальнейшее развитие, так как программа нужная и думаю пригодится не только исследователям, но и разработчикам.
.NET Reflector by Lutz Roeder
Динамично развивающийся бесплатный и мощный декомпилятор .NET сборок. Практически любой EXE файл, собранный на .NET технологии он может представить в виде полного исходника со всем деревом наследования классов. Подсветка синтаксиса, гиперссылки на объекты классов, удобный и приятный интерфейс. Все это говорит лишь об одном: в декомпилировании .NET сборок этой программе нет равных.
Если Вы хотите взглянуть на свою разработку глазами исследователя — этот декомпилятор то что нужно! Must Have однозначно. Также у программы есть «младший брат» — тулза для выдирания ресурсов из .NET сборок. Эта примочка также бесплатна и лежит на то же сайте, что и Reflector.
За программой и ее обновлениями не забудьте зайти на сайт www.aisto.com/roeder/dotnet
DJ Java Decompiler
А это уже декомпилятор Java классов. Довольно удобен и прост в использовании. открываешь в нем класс и уже созерцаешь исходник. Имеется довольно мощная подсветка синтаксиса, поиск и настройки. Также есть браузер классов и объектов. В общем довольно мощный и интересный декомпилятор.
Жаль только EXE файлы написанные на Java не декомпилирует.
Программу можно скачать отсюда: members.fortunecity.com/neshkov/dj.html
ReFox by Jan Brebera
Со слов людей, работающих на FoxPro — довольно мощный декомпилятор кода, напинанного на фоксе. Причем версия фоксы не критична — декомпилятор берет и Dos и Windows версии. Декомпилятор поддерживает не только стандартные, но и закриптованные фоксой модули. Даже если код был скомпилирован под Macintosh — декомпилятор возмется его декомпилировать и даже портирует выходной вариант под DOS/Windows. В общем, если Вы долго разрабатывали экономическую программу для своего отдела 20 лет назад и ненароком держали исходники на стареньком винте, который приказал долго жить — скачайте ReFox — он сочтет за честь восстановить Ваш код.
Декомпиляторы Visual Basic’а
Я не зря решил их все объединить под общим заголовком. Во первых их очень много, во вторых все декомпиляторы разделяются по возможностям на три типа: декомпиляторы форм, редакторы форм и декомпиляторы кода. Также есть декомпиляторы, сочетающие в себе несколько возможностей — о них мы поговорим в самом конце. А сейчас представлю тебе все три типа декомпиляторов.
Один из самых стабильных декомпиляторов форм. Хотя, больше ничем и не примечателен. Объявления API функций делает без параметров, от чего пользы мало, код не декомпилирует вообще. Имеет довольно подробную документацию и просит за свое использование немало зеленых президентов. В общем, если Вам не жалко денег и нужно декомпилировать только элементы интерфейса — можно использовать.
Саму программу можно найти тут: www.vbrezq.com
VB Editor by HEXMAN
Абсолютно бесплатный редактор форм и лежащих на них объектах. Если Вы занимаетесь русификацией программ, но не можете ничего поделать с программами, написанными на VB (Restorator тут бессиллен) — смело используйте данную утилиту. Она просто рай для локализаторов интерфейса. Программа имеет двухязычный интесфейс (Французский и Английский), причем по дефолту почему-то грузится Французский. Причем поможет и сгенерировать форму, на основе сделанных изменений, так что вполне подойдет и как альтернатива уже упомянутого выше VBRezQ.
Саму программу можно найти тут: www.multimania.com/hexman
VBReFormer by Sylvain Bruyere
Еще одна работа французских программистов. Эта программа несколько помощнее предыдущей. Помимо просмотра и изменения форм предоставляет также возможность извлечь из EXE всякие изображения, которые обычно лежат в frx файлах. Trial версия позволяет только просматривать результаты.
При этом не только запрещается сохранять результат, но и вообще программа постоянно обнуляет буфер обмена дабы исключить и возможность копирования. Отсюда прежде чем запускать данную утилиту — убедитесь, что в буфере нет нужных и еще не сохраненных данных.
Помимо всего прочего программа предоставляет для обзора некоторые данные из заголовка EXE файла, потому адрес точки входа в программу и Image Base можно узнать прямо не отходя от VBReFormer’а. Еще один плюс софтины — она умеет распознавать используемые в декомпилируемой программе ActiveX файлы и позволяет просмотреть некоторые их свойства и методы. Жаль только что не использует эту информацию при генерации форм — там все ActiveX’ы выглядят немного убого, без свойств и присвоенных им данных. При желании эта тулза может обыскать весь Ваш жесткий диск в поисках программ, написанных на VB. Зачем это нужно — не знаю, наверное для тестирования возможностей программы на разных EXE’шниках.
Если Программа приглянулась, то Trial версию можешь взять здесь: www.decompiler-vb.tk
Еще один декомпилятор. Пытается декомпилировать и формы и p-code, но представляет всю эту информацию в таком убогом виде на экран, что ничего понять невозможно неподготовленному человеку. Также как и предыдущая утилита — умеет извлекать графику из программ. Пытается декомпилировать p-code, правда пока декомпилирует только методы, а с передаваемыми в них параметрами туго. В общем, если довести интерфейс до ума — вполне нормальный продукт бы получился наверное, но автору судя по всему лень этим заниматься.
Скачать можно с www.raceco.us
exdec by josephco
Наверное самый известный на момент написания статьи декомпилятор пикода. Как говорится старенький, но рабочий. Возможность у программы всего одна — декомпилить p-code в том виде в каком он есть. То есть того кода который писал программист на VB Вы не увидите, а вот то что сгенерил компилятор — да, причем в довольно читабельном для профессионала виде.
В комплекте с программой идут примеры и небольшой туториал. Туториал поможет хотя бы немного понять, что значит вся эта декомпилированная гора псевдокода и как ее читать, потому если Вы разбираетесь с P-Code’ом впервые — очень советую обратить на этот туториал внимание.
Почти полный аналог exdec, только написанный китайскими разработчиками. Результат своей работы не только выводит на экран, но и сохраняет в файле ParseVB.txt. На случай падения программы (а такое частенько случается) — этот файл здоровски помогает.
p32Dasm by DARKER
Лучшая альтернатива exdec’у и VBParser’у. Программа в отличии от двух предыдущих написана на VB (exdec и VBParser написаны на C++) и динамично развивается последнее время. Имеет подсветку синтаксиса, калькулятор адресов, умеет декомпилировать с определенного смещения в файле, а также подобно дизассемблерам способна представить все строки и функции используемые в программе удобным списком с возможностью мгновенно перейти на выбранную позицию. Главный недостаток — относительная нестабильность работы и медленная скорость, в остальном же программа стоит того, чтобы ее посмотреть. Распространяется бесплатно.
Скачать можно отсюда: progress-tools.x10.mx/p32dasm.html
VBDE by iorior
Довольно неплохой декомпилятор, причем бесплатный. Декомпилит формы (правда без ActiveX’ов, если они присутствуют). Выдает адреса на все процедуры, а если это возможно, то выводит не только адрес процедуры, но и ее имя, что значительно упрощает анализ. Пытается декомпилировать Native Code, хотя в большинстве случаев кроме операторов сложения, вычитания и вывода MessageBox’а — ничего декомпилировать не может. Несмотря на это программа довольно удобная и стабильная, потому рекомендую всегда иметь под рукой.
Semi VB Decompiler by vbgamer45
Довольно интересный проект. До недавнего времени распространялся в исходниках на VB, а теперь стал коммерческим. Несмотря на некоторые баги в работе, бесплатная версия может довольно многое. Декомпилируются формы, содержащаяся в них графика и названия процедур. Также определяются используемые в программе API функции.
Помимо этого, предоставляется информация из EXE заголовков. Есть даже попытки декомпилировать P-Code. Так что продукт создает довольно приятное впечатление. Огромный респект автору за открытость исходного кода — думаю многим полезно будет в них заглянуть, чтобы понять, как декомпилируется VB код.
Честности ради скажу — исходник этот жутко неоптимизированно написан, и порой смотря на некоторые участки кода хочется плакать, хотя этот код и выполняет свои функции. Но повторюсь — это бесплатно, а бесплатное не обсуждается.
Актуальная версия находится тут: github.com/VBGAMER45/Semi-VB-Decompiler
VB Decompiler by DotFix Software
Вот мы и дошли до моего декомпилятора Visual Basic. При его создании я пытался внести как можно больше возможностей, при этом не загромождая интерфейс тем, что никогда не пригодится.
В итоге имеем декомпилятор форм, с поддержкой ActiveX’ов лежащих на них, декомпилятор P-Code’а (причем если в бесплатной Lite вресии он напоминает p32Dasm’овский, то в коммерческой версии программа восстанавливает более 85% исходного кода, что часто помогает востанновить нужные потерянные куски), декомпилятор Native Code (да да — полное дизассемблирование, а также восстановление до 60% исходных инструкций) и декомпилятор ссылок на API (при этом они записываются уже в объявленном виде со всем списком параметров). Ясное дело, что подсветка синтаксиса тоже есть и она имеет очень высокую скорость обработки текста.
Для каждого модуля с кодом свой список встречающихся там строк с возможностью мгновненно перейти на участок кода, где используется выделенная строка. Присутствует также и поиск, помогающий найти нужный код в активном окне. Резульат своей работы программа может сохранить, причем вместе с кодом и формами сохраняются и frx файлы с графикой и корректно прописываются ссылки на эти графические объекты в формах. В общем, если Вам требуется наиболее современное и продвинутое средство для частичной, но максимально возможной декомпиляции Native Code и P-Code — предлагаю рассмотреть приобретение коммерческой лицензии на VB Decompiler Pro. Если же декомпиляция в понятный VB код не нужна, а достаточно дизассемблирования Native Code и P-Code — вполне можете ограничиться бесплатной Lite версией VB Decompiler.
Как видим — декомпиляторов полно и их недостатка не наблюдается. При этом резко чувствуется грань между профессиональными и любительскими разработками. Причем эта грань очень велика и в качестве и в цене. Несмотря на это в большинстве случаев можно обойтись бесплатными разработками. Удачи!
Источник: www.dotfix.net