Как декомпилировать исполняемый файл

Обновлено: 02.07.2024

Мне интересно, если каждая программа основана на машинном коде, можем ли мы не декомпилировать программу до тех пор, пока она не столкнется с машинным кодом, и не преобразовать ее в настоящие языки программирования?

Как декомпилировать exe файлы со скоростью 100%? Если мой компьютер понимает процессы, которые он должен выполнять, разве он не сможет вернуть мне шаги того, что он сделал, значения из памяти, кроме.

Как декомпилировать исполняемый файл без ошибки?

1 Ответ 1

Мне интересно, если каждая программа основана на машинном коде, можем ли мы не декомпилировать программу до тех пор, пока она не столкнется с машинным кодом, и не преобразовать ее в настоящие языки программирования?

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

Языки программирования «высокого уровня» получили свое название от относительно высокого уровня или степени абстракции функций, которые они предоставляют, по сравнению с языками ассемблера, для замены которых они изначально были разработаны. Прилагательное «абстрактный» в этом контексте относится к степени, в которой особенности языка отделены от деталей любой конкретной компьютерной архитектуры. 1

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

Языки программирования являются примерами формальных языков:

Преобразование последовательности операторов, написанных на языке программирования в исходном файле программы, в семантически эквивалентный объектный код выполняется компилятором. Декомпиляция включает в себя преобразование зависимого от архитектуры объектного кода в семантически эквивалентное представление (исходный код), которое не зависит от архитектуры, процесс, обратный компиляции.

Как декомпилировать exe файлы со скоростью 100%?

Это кажется невозможным.

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

На самом деле, правильная дизассемблирование (тем более декомпиляция) является серьезной проблемой:

1. Скотт, Майкл Л. Прагматика языка программирования. 3-е изд. Страница 111

Мой друг загрузил вредоносное ПО с Facebook, и мне интересно посмотреть, что оно делает, не заражая меня. Я знаю, что вы не можете декомпилировать .exe, но могу ли я хотя бы просмотреть его в сборке или подключить отладчик?

Извините за очень поздний ответ. но я думаю, что это произошло так: она запустила вредоносное ПО, которое в какой-то момент заспамило все ее контакты на FB (мне) ссылкой на «видео», в котором вас просили загрузить «новый кодек». Я предполагаю, что в этом смысле он вел себя как червь.

16 ответов 16

С помощью отладчика вы можете выполнять сборку программы в интерактивном режиме.
С помощью дизассемблера можно более подробно просмотреть сборку программы.
С помощью декомпилятора вы можете превратить программу обратно в частичный исходный код, предполагая, что вы знаете, на чем она была написана (что вы можете узнать с помощью бесплатных инструментов, таких как PEiD — если программа упакована, у вас будет чтобы сначала распаковать его ИЛИ Detect-it-Easy, если вы нигде не можете найти PEiD. В настоящее время у DIE есть сильное сообщество разработчиков на github).

Отладчики:

    , бесплатный, прекрасный 32-битный отладчик, для которого вы можете найти множество пользовательских плагинов и скриптов, чтобы сделать его еще более полезным. , бесплатный, вполне способный отладчик от Microsoft. WinDbg особенно полезен для изучения внутреннего устройства Windows, поскольку он знает о структурах данных больше, чем другие отладчики. , SICE друзьям. Коммерческая деятельность и разработка были остановлены в 2006 году. SoftICE — это своего рода хардкорный инструмент, который работает под управлением операционной системы (и останавливает всю систему при вызове). SoftICE по-прежнему используется многими профессионалами, хотя его может быть трудно получить, и он может не работать на некотором оборудовании (или программном обеспечении, а именно, он не будет работать на картах Vista или NVIDIA gfx).

Дизассемблеры:

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

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

Некоторыми связанными инструментами, которые могут пригодиться вам во всем, что вы делаете, являются редакторы ресурсов, такие как ResourceHacker (бесплатно), и хороший шестнадцатеричный редактор, такой как Hex Workshop (коммерческий).

Кроме того, если вы проводите анализ вредоносных программ (или используете SICE), я настоятельно рекомендую запускать все на виртуальной машине, а именно на VMware Workstation. В случае SICE он защитит вашу реальную систему от BSOD, а в случае вредоносного ПО защитит вашу реальную систему от целевой программы. Вы можете прочитать об анализе вредоносного ПО с помощью VMware здесь.

Лично я пользуюсь Olly, WinDbg & W32Dasm и некоторыми более мелкими утилитами.

Кроме того, помните, что дизассемблирование или даже отладка программного обеспечения чужих обычно как минимум противоречит лицензионному соглашению :)

Я ценю последний абзац в его общем, хороший совет, но он забавен в контексте вопроса: я сомневаюсь, что вирус поставляется с лицензионным соглашением! ;-)

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

Обратите внимание, что большинство вредоносных программ в наши дни (по крайней мере, скомпилированные вредоносные программы) могут легко определить, запущены ли они в VMWare, Virtual PC, WINE, VirtualBox и т. д.

Все, что я вижу, это тип кодирования X86, такой как push mov. Я хочу декомпилировать exe, но не знаю языка исходного кода. При загрузке я выбрал переносимый исполняемый файл и мета-компьютер. Я вижу функцию запуска, но она написана на языке ассемблера. Может ли кто-нибудь помочь мне просмотреть реальный код, такой как C или C++?

отличный пост psoul отвечает на ваш вопрос, поэтому я не буду копировать его хорошую работу, но я чувствую, что это поможет объяснить, почему это одновременно совершенно правильный, но в то же время ужасно глупый вопрос. В конце концов, это место для обучения, верно?

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

Способ, которым компьютер выполняет набор инструкций машинного кода, очень прост. Каждое действие, которое может выполнить процессор (например, чтение из памяти, добавление двух значений), представлено числовым кодом. Если бы я сказал вам, что цифра 1 означает крик, а цифра 2 означает хихиканье, а затем поднял карточки с цифрами 1 или 2, ожидая, что вы будете соответственно кричать или хихикать, я бы использовал по сути ту же систему, что и компьютер. работать.

Двоичный файл — это просто набор этих кодов (обычно называемых «кодами операций») и информации («аргументов»), на которые воздействуют коды операций.

Теперь язык ассемблера — это компьютерный язык, в котором каждое командное слово языка представляет ровно один код операции в процессоре. Существует прямой перевод 1:1 между командой языка ассемблера и кодом операции процессора. Вот почему сборка кода для процессора x386 отличается от сборки кода для процессора ARM.

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

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

(Не поймите меня неправильно, попытки сделать это были. Они работают так же, как DRM для файлов песен.)

Однако в подходе к дизассемблированию есть оговорки. Имена переменных не существуют; такая вещь не существует для вашего процессора. Вызовы библиотеки чертовски запутаны и часто требуют дизассемблирования дополнительных двоичных файлов. А ассемблер чертовски трудно читать в самых лучших условиях.

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

В любом случае, это несколько поверхностное объяснение, но я надеюсь, что оно поможет. Каждый может свободно исправлять любые искажения с моей стороны; Прошло много времени. ;)

Как декомпилировать .exe? Возможно?

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

.exe является наиболее распространенным типом файлов в компьютерном мире, и средний пользователь компьютера наверняка использует файлы .exe. Вы также можете столкнуться с файлами .exe, которые содержат вирусы и вредоносные программы. Такие файлы .exe вызывают у компьютерного наркомана сомнения относительно того, что содержит файл .exe. Декомпиляция файлов .exe — отличная тема, и вот краткое обсуждение декомпиляции файлов .exe.

Декомпиляция исполняемых файлов с помощью Boomerang

1. Шаг декомпиляции .exe зависит от платформы, на которой были созданы файлы. Файлы, созданные в VB, легче всего компилировать. Декомпилятор разбивает исполняемый файл на дополнительные скрипты и модули так же, как компилятор компилирует разные скрипты в один блок.

2. Шаг Существуют также декомпиляторы специально для языка C++/C, которые декомпилируют исполняемые файлы, написанные на указанных языках.

Раздел загрузки Boomerang

4. Шаг В разделе загрузки веб-сайта Boomeragn представлены определенные версии приложения в зависимости от вашей операционной системы. Загрузите версию Boomerang, совместимую с вашей операционной системой.

5. Шаг Найдите исполняемый файл по вашему выбору, который вы хотите декомпилировать.

Просмотреть раздел файлов

6. Шаг Основные функции графического интерфейса: загрузка, декодирование, декомпиляция и генерация кода.

Boomerang GUI

7. Двигайтесь последовательно по дереву программы, и в конце программы у вас будет простой код.

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

Оливер С.К.

Оливер — основатель и главный редактор этого сайта. Ему интересно находить новые способы сломать Windows, находить распространенные ошибки и помогать другим их исправлять. Кроме того, он любит полностью настраивать системы с помощью Rainmeter и Dreamscene, узнавать больше о древних цивилизациях, таких как Чачапоя, оттачивать свои навыки цифровой фотографии и создавать программное обеспечение с небольшой группой избранных разработчиков. Если вы хотите связаться с ним, чтобы обсудить что-либо, отправьте ему письмо!

Это домашняя страница (еще одного) проекта с открытым исходным кодом. Целью декомпилятора машинного кода является анализ исполняемых файлов (таких как файлы .EXE или .DLL в Windows или файлы ELF в Unix-подобных средах) и попытка создать высокоуровневое представление машинного кода в исполняемом файле: декомпилятор пытается восстановить исходный код, из которого был скомпилирован исполняемый файл.

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

Декомпилятор не зависит от процессора и платформы. Цель состоит в том, чтобы вы могли использовать его для декомпиляции исполняемых файлов для любой архитектуры процессора и не были привязаны к определенному набору инструкций. Хотя в настоящее время реализован только внешний интерфейс x86, ничто не мешает вам внедрить внешний интерфейс 68K, Sparc или VAX, если он вам нужен.

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

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

Дизайн

  • На этапе загрузки исполняемый файл загружается в память и определяется, какой именно исполняемый файл декомпилируется. Формат исполняемого файла обычно определяет формат процессора и ожидаемую среду операционной системы. Для более старых форматов, таких как простой MS-DOS.EXE, процессор (реальный режим x86) и операционная система (MS-DOS) являются неявными. Как только формат определен, двоичный файл загружается в память (при необходимости распаковывая его) и выполняются перемещения указателя или сегмента. Эти перемещения также полезны на более поздних этапах декомпиляции, поскольку каждому перемещенному значению указателя может быть присвоен предварительный тип pointer-to(), а каждому перемещенному селектору сегмента — тип селектора сегмента.
  • Фаза сканирования следует за фазой загрузки. Исполняемый файл обычно имеет один или несколько адресов, указывающих на исполняемый код. Код в точках входа дизассемблируется и отслеживается, ища, в частности, операторы branch, call и return. Последовательно обнаруживаются отдельные процедуры и строится граф вызовов, ребра которого представляют собой вызовы между процедурами.
  • На этапе перезаписи все машинно-зависимые инструкции переписываются в машинно-независимые инструкции низкого уровня. Идиоматические последовательности инструкций переписываются в выражения. С этого момента процесс декомпиляции не зависит от процессора.
  • На этапе анализа сначала выполняется анализ межпроцедурных определений. Это делается для того, чтобы определить для каждой процедуры proc программы, какие регистры процессора сохраняются и какие регистры процессора изменяются после вызова proc. Последующий межпроцедурный анализ живучести , в сочетании с результатами анализа достижения определений, определяет, какие регистры процессора используются в качестве параметров и регистров возвращаемых значений для каждой процедуры. Обратите внимание, что этот анализ не зависит от ABI конкретного процессора/платформы или соглашения о вызовах. После завершения двух межпроцедурных анализов процедуры могут быть переписаны с их явными аргументами. Последующие анализы затем выполняются на основе процедуры за процедурой. Процедуры преобразованы в форму SSA, флаги кода условия устранены, а выражения упрощены. Наконец, процедуры преобразуются из формы SSA.
  • Фаза межпроцедурного анализа типов пытается восстановить типы данных, используемые в программе, путем анализа того, как значения используются программным кодом, включая подсказки, полученные из данных о перемещении, а также любую "пророческую" информацию, предоставленную Пользователь. Выражения доступа к памяти преобразуются в их эквиваленты C: разыменования указателя ( *foo ), выражения доступа к члену ( foo->bar ) и ссылки на массив ( foo[bar] ).
  • Наконец, структурный анализ переписывает управляющие структуры из неструктурированного кода goto-sphaghetti на языке C if , while - / do - циклы и операторы switch .

Разработка

В проекте реализована методология с упором на модульное тестирование. Никакой новый код не допускается в проект, если для него не написаны один или несколько связанных тестов. Разработка декомпилятора — это, как известно, сложная работа с множеством особых случаев. Отсутствие юнит-тестов сделало бы разработку вечной охотой за ошибками, поскольку исправления одной ошибки приводят к возникновению других ошибок. Модульные тесты разрабатываются с использованием NUnit v2.2.

Subversion используется для контроля версий.

Статус

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

Для окончательного скомпилированного кода вашего приложения краткий ответ — «нет». Различные инструменты могут извлекать из кода различную информацию (например, настройки форм), и существуют декомпиляторы P-кода (см. превосходную ссылку Эдгара для таких инструментов). Однако до сих пор нет декомпилятора для нативного кода.

Как открыть файл .exe в Visual Studio?

В Visual Studio вы можете открыть любой EXE-файл как «проект». Просто перейдите в File->Open->Project/Solution и перейдите к файлу .exe.

Можно ли декомпилировать исполняемый файл?

Да, декомпилировать можно. exe с помощью таких инструментов, как The dcc Decompiler. Это даст хорошие результаты, если исходная программа была написана на C. Если она была написана на другом языке, возможно, вам придется попробовать другой инструмент, подходящий для этого языка.

Как запустить EXE-файл в Visual Basic?

Как отлаживать исполняемый файл в Visual Studio?

Просто используйте File/Open Project/Solution, выберите EXE-файл и откройте его. Затем выберите Отладка/Начать отладку. Другой вариант — сначала запустить EXE-файл, а затем выбрать «Отладка/присоединение» для обработки.

Можно ли декомпилировать EXE-файл?

Можно ли декомпилировать EXE?

Можно ли преобразовать файлы EXE?

Откройте «Инструмент конвертера EXE в APK» и дважды щелкните «Конвертер EXE в APK».exe», чтобы запустить программное обеспечение для конвертации EXE в APK. Нажмите на вкладку «Далее», найдите и выберите файл .exe, который вы хотите преобразовать. Как только необходимые файлы будут загружены, инструмент автоматически начнет преобразование ваших файлов.

Что такое исполняемый файл декомпилятора VB?

VB Decompiler.exe использует расширение файла EXE, которое более известно как файл декомпилятора для p-кода и файлов с собственным кодом. Он классифицируется как файл Win32 EXE (исполняемое приложение), созданный для декомпилятора VB компанией DotFix Software.

Могу ли я декомпилировать EXE-файл и получить исходный код?

Да, вы можете декомпилировать файл .exe и получить исходный код тремя способами, насколько я знаю (и, возможно, можно и другими способами 🙂). Вот пошаговый способ декомпиляции приложения Windows:

Как декомпилировать p-код?

Поскольку p-код состоит из команд высокого уровня, большую часть кода можно декомпилировать в исходный код (без имен переменных и некоторых функций). VB Decompiler поддерживает до 1400 команд p-кода и максимально точно восстанавливает исходный код. Затем вы можете вручную завершить этот исходный код и попытаться скомпилировать его снова.

Можно ли декомпилировать Industrial Code?

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

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