Как декомпилировать exe файл

Обновлено: 03.07.2024

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

Методика восстановления исходного кода

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

Dede by DaFixer

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

SourceRescuer

Еще один декомпилятор Delphi, но попроще. Может восстанавливать только формы и генерировать заголовок pas файлов. Главное отличие от DeDe - работает мгновенно и имеет более эргономичный интерфейс. Чтож, одной программе дано иметь крутой интерфейс, другой - большие возможности. тут ничего не поделаешь. Из главных особенностей программы можно выделить то, что она генерирует шаблон исходника не только в формате Delphi, но и в формате C++ Builder. Думаю эта фишка не лишняя, так как после компиляции билдерские программы от дельфевых мало чем отличаются, а вот декомпилировать их только как Delphi код - не всегда разумно. Программа эта распространяется в друх видах: GUI и консольном и требует покупки лицензии.

REC by Giampiero Caprino

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

CODE NOW! eax++; for(eax=1000;eax=0;eax--)

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

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

DJ Java Decompiler

А это уже декомпилятор Java классов. Довольно удобен и прост в использовании. открываешь в нем класс и уже созерцаешь исходник. Имеется довольно мощная подсветка синтаксиса, поиск и настройки. Также есть браузер классов и объектов. В общем довольно мощный и интересный декомпилятор. Жаль только EXE файлы написанные на Java не декомпилирует.

ReFox by Jan Brebera

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

Декомпиляторы Visual Basic’а

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

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

VB Editor by HEXMAN

Абсолютно бесплатный редактор форм и лежащих на них объектах. Если Вы занимаетесь русификацией программ, но не можете ничего поделать с программами, написанными на VB (Restorator тут бессиллен) - смело используйте данную утилиту. Она просто рай для локализаторов интерфейса. Программа имеет двухязычный интесфейс (Французский и Английский), причем по дефолту почему-то грузится Французский. Причем поможет и сгенерировать форму, на основе сделанных изменений, так что вполне подойдет и как альтернатива уже упомянутого выше VBRezQ.

VBReFormer by Sylvain Bruyere

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

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

exdec by josephco

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

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

p32Dasm by DARKER

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

VBDE by iorior

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

Semi VB Decompiler by vbgamer45

Довольно интересный проект. До недавнего времени распространялся в исходниках на VB, а теперь стал коммерческим. Несмотря на некоторые баги в работе, бесплатная версия может довольно многое. Декомпилируются формы, содержащаяся в них графика и названия процедур. Также определяются используемые в программе API функции. Помимо этого, предоставляется информация из EXE заголовков. Есть даже попытки декомпилировать P-Code. Так что продукт создает довольно приятное впечатление. Огромный респект автору за открытость исходного кода - думаю многим полезно будет в них заглянуть, чтобы понять, как декомпилируется VB код. Честности ради скажу - исходник этот жутко неоптимизированно написан, и порой смотря на некоторые участки кода хочется плакать, хотя этот код и выполняет свои функции. Но повторюсь - это бесплатно, а бесплатное не обсуждается.

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.

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

Как декомпилировать EXE-файлы

Декомпиляция подразумевает воссоздание исходного кода программы на том языке, на котором она была написана. Иными словами, это процесс обратный процессу компиляции, когда исходный текст преобразуется в машинные инструкции. Декомпиляцию можно провести, используя специализированный софт.

Способы декомпиляции EXE-файлов

Декомпиляция может быть полезной автору ПО, который потерял исходные коды, или просто пользователям, желающим узнать свойства той или иной программы. Для этого существуют специальные программы-декомпиляторы.

Способ 1: VB Decompiler

Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.

    Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).

Стандартное открытие программы в VB Decompiler

Открытие EXE в VB Decompiler

Запуск декомпиляции в VB Decompiler

Просмотр исходного кода через VB Decompiler

Сохранение декомпилированного проекта в VB Decompiler

Способ 2: ReFox

В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.

    Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.

Поиск EXE через ReFox

Переход к декомпиляции в ReFox

Запуск декомпиляции в ReFox

Завершение декомпиляции в ReFox

Можно просмотреть результат в указанной папке.

Способ 3: DeDe

А DeDe будет полезна для декомпиляции программ на Delphi.

Добавление файла в DeDe

Добавление EXE в DeDe

Запуск декомпиляции в DeDe

Завершение декомпиляции в DeDe

В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.

Способ 4: EMS Source Rescuer

Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.

  1. В блоке «Executable File» нужно указать нужную программу.
  2. В «Project name» пропишите имя проекта и нажмите «Next».

Выбор исходника и имя проекта в EMS Source Rescuer

Предпросмотр и сохранение проекта в EMS Source Rescuer

Мы рассмотрели популярные декомпиляторы для файлов EXE, написанных на разных языках программирования. Если Вам известны другие рабочие варианты, напишите об этом в комментариях.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Дизассемблеры и декомпиляторы исполняемых файлов


Дизассемблеры и декомпиляторы исполняемых файлов

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

Скриншот программы dnSpy


Скриншот программы dnSpy

Скриншот программы IDA Pro Advanced


Скриншот программы IDA Pro Advanced

IDA Pro (сокращение от Interactive DisAssembler) - один из моих основных инструментов для реверс-инжиниринга и разбора файлов. Это интерактивный дизассемблер и отладчик с поддержкой множества форматов исполняемых файлов для большого числа процессоров и операционных систем. Чтобы перечислить все его возможности потребуется целая книга. Но даже тут возможности IDA не заканчиваются. Плагин Hex-Rays для IDA Pro позволяет декомплировать ассемблерный листинг в более-менее человекопонятный псевдокод, по синтаксису похожий на C. В некоторых случаях это значительно облегчает работу. Просто так приобрести IDA Pro частным лицам практически невозможно, и дело не только в непомерной цене, а в том, что автор придерживается абсолютно неадекватной политики в плане продаж. К счастью, несколько последних версий этого замечательного дизассемблера, несмотря на все трудности, были успешно слиты в свободный доступ. Это IDA Pro Advanced 6.8, последняя доступная версия, которая работает с 32-битными системами, а также IDA Pro Advanced 7.0 и IDA Pro Advanced 7.2 для 64-битных систем. Если по каким-то причинам вы не можете использовать варез, то на офсайте есть бесплатные демо-версии с урезанным функционалом.

Скриншот программы Interactive Delphi Reconstructor


Скриншот программы Interactive Delphi Reconstructor

IDR (Interactive Delphi Reconstructor) - бесплатный декомпилятор исполняемых файлов и динамических библиотек. В отличие от IDA Pro, этот декомпилятор создан специально для разбора файлов, написанных на языке Delphi. Сейчас проект прекратил развитие, если какие изменения и вносятся, то исключительно косметические. Исходники для доработки открыты. Лично я пользуюсь стабильным комплектом Interactive Delphi Reconstructor 2.6.0.1.

Скриншот программы VB Decompiler Pro


Скриншот программы VB Decompiler Pro

Еще один специализированный декомпилятор - VB Decompiler Pro. Он работает с программами (EXE, DLL, OCX), написанными на Visual Basic. В случае, если приложение собрано в p-code, декомпилятор может разобрать его практически до исходного кода. Но даже если приложение скомпилировано в native code, в этом случае VB Decompiler анализирует и восстанавливает довольно много инструкций, чтобы насколько это возможно приблизить ассемблерный код к исходному. Это сильно упростит задачу анализа алгоритмов исследуемой программы. Честные граждане могут воспользоваться бесплатной Lite-версией с офсайта, для любителей полных версий софта есть релиз VB Decompiler Pro 10.0. Антивирусы могут ругаться на активатор, но тут вы уже сами решайте что делать.

Конечно, это далеко не полный список инструментов для дизассемблирования и декомпиляции, который есть в свободном доступе. Например, та же набирающая популярность Ghidra от АНБ может составить конкуренцию IDA Pro с Hex-Rays. Но я в этой статье перечислил лишь те программы, которыми пользуюсь сам и которые упоминаются в статьях на этом сайте.

Процесс декомпиляции отвечает за воссоздание исходного кода программы на языке или языках, на которых та была написана. В случае с большими программами, они имеют несколько файлов, в каждом из которых может использоваться несколько языков программирования. Чтобы они корректно взаимодействовали друг с другом и не вводили пользователя в тупик, их помещают в EXE-файл. Как раз этот процесс и называется компиляцией. Мы же рассмотрим, как разобрать EXE-файл на отдельные составляющие.


Как декомпилировать EXE-файл

К сожалению, Windows не предусматривает в своем инструментарии встроенных инструментов, позволяющих выполнить декомпиляцию, поэтому придется пользоваться только сторонним ПО. Такое ПО может быть полезно как пользователям, которые просто желают получше изучить исходный код той или иной программы, так и разработчикам.

Вариант 1: VB Decompiler

Корректно способен провести декомпиляцию EXE-файлов, написанных и скомпилированных через Visual Basic 5.0 и 6.0. Это самая популярная среда разработки программ для Windows. Сама программа полностью бесплатна и занимает на диске всего несколько мегабайт.

  1. В верхней части интерфейса кликните по пункту «Файл» и выберите из контекстного меню вариант «Открыть программу». Вместо этого можно воспользоваться сочетанием клавиш Ctrl+O.
  2. В «Проводнике» отыщите исполняемый файл той программы, декомпиляцию которой вы собираетесь провести. Выделите его и нажмите на кнопку «Открыть», чтобы выполнить загрузку файла в рабочую среду.
  3. Путь до нужного EXE-файла отобразится в строке «Файл». Нажмите на кнопку «Старт», чтобы запустить процедуру декомпиляции.
  4. Программа не оповещает о завершении процедуры декомпиляции. О завершении таковой будет свидетельствовать только надпись «Декомпилировано» в нижней левой части окна.
  5. Для сохранения декомпилированного файла нажмите по кнопке «Файл» в верхнем меню и выберите из выпадающего списка вариант «Сохранить декомпилированный проект». Можете просто воспользоваться сочетанием клавиш Ctrl+S.

Вариант 2: EMS Source Rescuer

Данный декомпилятор корректно работает с файлами, скомпилированными с помощью Delphi и C++ Builder. Работа с другими компиляторами возможна, но официально не поддерживается, поэтому есть риски. Программа распространяется полностью бесплатно.

  1. Запустите EMS Source Rescuer. Его интерфейс представлен в качестве блоков с шагами. На первом шаге вам требуется указать путь до проекта, который будет декомпилирован. Это можно сделать, нажав на кнопку папки в строке «Executable File».
  2. Выберите нужный EXE-файл в окошке «Проводника».
  3. В поле «Project name» пропишите имя декомпилируемого проекта и нажмите «Next».
  4. На следующем шаге потребуется выбрать язык программирования, используемый в выбранном проекте. Это делается в блоке «Output style». Поставив маркер на нужном месте нажмите «Next».
  5. Вы перейдете сразу на 3-й шаг. Здесь будет показан исходный код проекта. Ниже выберите папку, в которую будут сохранены исходные файлы, извлеченные из EXE-файла, и нажмите «Save».

Вариант 3: ReFox

ReFox отлично зарекомендовал себя в декомпиляции проектов, созданных через Visual FoxPro и FoxBASE+. Сама программа носит условно-бесплатный характер использования. Есть демонстрационная версия, использование которой бесплатно, но только определенный период времени.

Инструкция по использованию данной программы выглядит так:

Вариант 4: DeDe

Эта программа для декомпиляции не так функциональна и поддерживает только одни язык – Delphi.

Представленные декомпиляторы способы выполнить обратное преобразование большинства EXE-файлов, написанных на разных языках программирования. Как видите, в самом процессе, вне зависимости от выбранной программы, нет ничего сложного.

Процесс декомпиляции файлов с расширением EXE

Эта процедура подразумевает под собой воспроизведение кода утилиты языком, которым она изначально была создана. То есть это обратная процедура компиляции (преобразование кода в компьютерные команды). Выполнить эти действия можно воспользовавшись специальными программами.

Способы преобразования файлов EXE

Необходимость преобразовать подобные файлы может возникнуть у пользователей, которые хотят получить информацию о характеристике различных утилит. Имеются определенные программы, предназначенные специально для декомпиляции.

Способ 1: Использование утилиты VB Decompiler

Данный софт используется для преобразования утилит, которые были созданы на Visual Basic 5.0 или 6.0.

  1. Активируем программу и в главном окне выбираем вкладку «Файл».
  2. В появившемся меню нажимаем на «Открыть программу». Выполнить ту же процедуру можно используя быстрые клавиши Ctrl+O.
  3. В «Проводнике» находим нужный файл.
  4. Процесс преобразования должен запуститься самостоятельно. Если по какой-либо причине это не произошло, выберите «Старт».
  5. По завершению процедуры высветится надпись «Декомпилировано».
  6. Основное поле программы будет поделено на два окна. В левом можно увидеть хронологию, а в правом отобразится исходный код.
  7. Есть возможность сохранить на компьютер преобразованные файлы. В верхнем меню выберите «Файл» и перейдите по вкладке «Сохранить декомпилированный проект».

Сохранение декомпилированного проекта в VB-Decompiler

Способ 2: Воспользоваться программой ReFox

Данная программа предназначена для преобразования утилит написанных на FoxPro или FoxBASE+.

  1. Откройте программу и воспользуйтесь интегрированным Проводником для поиска необходимого файла. При нажатии на него сразу можно увидеть некоторую информацию.
  2. Нажмите правой кнопкой мыши на файл и в появившемся меню кликните на «Decompile».
  3. В следующем окне определите место для хранения новых файлов.
  4. После нажатия на «ОК», процедура будет автоматически запущенна и по окончанию выдаст оповещение.

Способ 3: С помощью DeDe

Эта утилита используется при необходимости выполнить процедуру с программами, написанными на Delphi.

Сохранение декомпилированных объектов в DeDe

Способ 4: Программа EMS Source Rescuer

Данная утилита может работать с файлами, написанными на двух языках Delphi и C++ Builder.

Предпросмотр и сохранение проекта в EMS-Source-Rescuer

В этой статье был рассмотрен софт, помогающий в декомпиляции программ, написанных различным кодом. Известно еще множество подобных утилит, но именно эти обладают необходимыми функциями и довольно-таки просты в использовании.

Читайте также: