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

Обновлено: 04.07.2024

Это домашняя страница (еще одного) проекта с открытым исходным кодом. Целью декомпилятора машинного кода является анализ исполняемых файлов (таких как файлы .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, дизассемблировать их содержимое, переписывать дизассемблированные инструкции в промежуточный код и выполнять этап анализа, упомянутый выше. В настоящее время работа сосредоточена на анализе типов, а структурирование кода отошло на второй план, поскольку оно значительно менее сложно, чем восстановление типов. Если вы хотите внести свою лепту, свяжитесь с нами!

Декомпиляция кода Откройте dotPeek. Файл -> Открыть -> перейдите к вашему проекту -> выберите файл .DLL/.exe. Ваш проект будет указан в списке проектов на нашем сайте dotPeek в разделе Assembly Explorer. Щелкните свой проект и найдите классы, чтобы просмотреть исходный код.

Можем ли мы преобразовать .exe в исходный код?

Да, легко. Любой может декомпилировать файл . NET и получить исходный код, который можно снова скомпилировать в ту же сборку.

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

Как посмотреть исходный код в Chrome?

Google Chrome Нажмите значок меню. на панели инструментов браузера. Выберите «Дополнительные инструменты», а затем «Просмотреть исходный код».

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

decompile-py2exe принимает исполняемый файл в качестве аргумента, извлекает байт-код Python и декомпилирует его с помощью uncompyle6, и все это за один шаг. Исполняемый файл также можно передать через стандартный ввод или внутри (защищенного паролем) ZIP-файла. Обязательно используйте Python 3 для запуска decompile-py2exe.

Как просмотреть исходный код программы?

Как просмотреть исходный код Firefox: CTRL + U (то есть нажмите и удерживайте клавишу CTRL на клавиатуре. Удерживая клавишу CTRL, нажмите клавишу «u»). Edge/Internet Explorer: CTRL + U Или щелкните правой кнопкой мыши и выберите «Просмотр исходного кода». Chrome: CTRL + U. Opera: CTRL + U.

Как расширить EXE-файл?

<р>1. Используйте WinZip. Чтобы открыть исполняемый файл без его установки, обязательно щелкните правой кнопкой мыши файлы установщика Windows и извлеките их содержимое. WinZip поддерживает множество файлов архивных типов, таких как ZIP, ZIPX, RAR, 7Z, GZ, ISO, IMG, TAR GZ, TAR, GZIP, GZ и многие другие.

Можем ли мы конвертировать exe в DLL?

Как выполнить отладку EXE-файла?

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

Как декодировать файл DLL?

Ниже приведены шаги, которые могут помочь вам открыть файлы DLL с помощью декомпилятора: Найдите программу-декомпилятор и установите ее. Есть несколько вариантов программ-декомпиляторов. Откройте файлы DLL в декомпиляторе. Используйте «Проводник сборок» для просмотра файла DLL. Дважды щелкните узел, чтобы увидеть содержащийся в нем код.

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

В Visual Studio выберите «Файл» > «Открыть» > «Проект». В диалоговом окне «Открыть проект» выберите «Все файлы проекта», если он еще не выбран, в раскрывающемся списке рядом с «Имя файла». Перейдите к файлу .exe, выберите его и нажмите кнопку Открыть.

Как просмотреть HTML-код в браузере?

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

Как просмотреть исходный код страницы?

Просмотр исходного кода с помощью просмотра исходного кода страницы Щелкните правой кнопкой мыши страницу и выберите «Просмотреть исходный код страницы» или нажмите Ctrl + U, чтобы просмотреть исходный код страницы на новой вкладке.

Как открыть файл CSS в браузере?

В Windows в Проводнике Windows щелкните файл правой кнопкой мыши и выберите "Открыть с помощью", затем выберите браузер.

Как распаковать файл .PY?

Чтобы разархивировать файл в Python, используйте ZipFile. метод извлечения(). Метод Extractall() принимает путь, элементы, pwd в качестве аргумента и извлекает все содержимое.

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

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

Как использовать Pyinstxtractor PY?

Как использовать. Скрипт можно запустить, передав имя исполняемого файла в качестве аргумента. Рекомендуется запускать скрипт в той же версии Python, которая использовалась для создания исполняемого файла. Это сделано для предотвращения ошибок десортировки (если они есть) при извлечении архива PYZ.

Где хранится исходный код?

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

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

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

Я видел, как мой друг извлек файл исходного кода из файла java '*.class'. Он использовал для этого какую-то программу.

Можно ли сделать то же самое с '*.exe'? Если да, то как я могу это сделать? Кроме того, этично ли это делать, учитывая, что исполняемый файл — это всего лишь небольшой файл, не защищенный авторскими правами?

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

Откуда вы взяли, что исполняемые файлы не защищены авторским правом? Или вы просто имели в виду, что вас интересует один конкретный исполняемый файл, который оказался общедоступным?

6 ответов 6

Это зависит от базового языка, который использовали разработчики.

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

С другими языками, такими как C/C++, все не так просто.

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

Reflector больше не является бесплатным, ILSpy будет делать то же самое, и его можно использовать бесплатно (как бесплатно, так и по цене).

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

При декомпиляции программного обеспечения чем больше языка ассемблера вы знаете, тем лучше, поскольку вам, возможно, придется исследовать высокоуровневый код из низкоуровневого ассемблера, если декомпилятор запутается или часть кода действительно была написана на ассемблере.< /p>

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

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

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

Как просмотреть код программы .exe в Linux? Я хочу видеть код программы, потому что хочу увидеть, как она работает. Я только изучаю программирование, поэтому подумал, что программа будет интересной!

Что такое .exe? Расширения файлов для нас, людей, являются лишь визуальными маркерами ;-) Если вы имели в виду исполняемый файл в Linux, будет проще найти исходный код в репозиториях.

3 ответа 3

Если вы хотите увидеть исходный код исполняемых файлов Linux, установите пакет apt-src ( sudo apt-get install apt-src ) и прочитайте man apt-src . Затем вы можете использовать apt-src для получения исходного кода ЛЮБОГО пакета Ubuntu.

Существует что-то известное как декомпилятор. Когда вы создаете программу на скомпилированном языке, таком как C, вы используете компилятор, который переводит код, читаемый человеком, в код машинного уровня. Декомпилятор делает наоборот. Вот небольшой список декомпиляторов C из вопроса stackoverflow.

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

С приложениями с открытым исходным кодом это проще: вы можете использовать apt-get source package-name или просто найти приложение на git-hub

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

Вы не можете, .exe — это исполняемые двоичные файлы для Windows, в них нет кода, только машинные инструкции. Если вы используете Linux или Mac, вы можете легко найти необработанные исходные коды в папке temp src вашего менеджера пакетов (brew, yum, apt-get.), Unix-системы загружают исходники и (иногда) создают их на вашей собственной машине

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

Файлы EXE содержат программный код для приложений и программ Windows. Они могут загружать файлы DLL (библиотека динамической компоновки), которые содержат дополнительный программный код. Когда EXE или DLL создается, он будет содержать либо 32-битный код, либо 64-битный код. 32-разрядный код может работать на любом процессоре, но для 64-разрядного кода требуется 64-разрядный процессор и 64-разрядная версия Windows.

Однако в Windows нет встроенного способа определить, является ли файл EXE или DLL 32-разрядным или 64-разрядным. Вот где ExeProperties приходит на помощь! Его действительно легко использовать, после установки он расширяет встроенный проводник Windows, добавляя дополнительную вкладку на панель свойств, которая показывает расширенные свойства для файлов EXE и DLL.

Чтобы просмотреть эти расширенные свойства, щелкните правой кнопкой мыши файл EXE или DLL в проводнике Windows и выберите "Свойства" в контекстном меню. Дополнительная вкладка, добавленная ExeProperties, называется Exe/Dll Info. Выберите эту вкладку, чтобы просмотреть расширенные свойства.

Примечание. ExeProperties нельзя запускать как отдельное приложение. Доступ к нему возможен только через проводник Windows.

Показаны расширенные свойства

Тип Показывает, является ли исполняемый код в файле 32-битным или 64-битным.
Мин. Версия Windows Показывает минимальную версию Windows, необходимую для запуска исполняемого кода.
Построено с помощью Показывает версию Microsoft Visual Studio использовалась для создания файла. Примечание. В файле хранится только номер версии инструмента сборки, поэтому из него выводится используемая версия Visual Studio. Если номер версии недействителен для Visual Studio (скорее всего, потому что код не был создан с помощью Visual Studio), отображается только номер версии.
Subsystem Подсистема, для которой создан файл. Наиболее распространенными значениями являются Windows GUI для обычного приложения Windows или Windows Console для файла, который следует запускать из командной строки.
Timestamp Дата/время создания файла.
Поддержка больших адресов Указывает, файл поддерживает диапазон адресов больше 2 ГБ. Для большинства 32-битных приложений это будет Нет, а для большинства 64-битных приложений это будет Да.

Поддерживаемые типы файлов

Хотя наиболее распространенными типами файлов, с которыми будут использоваться ExeProperties, являются EXE и DLL, это полный диапазон поддерживаемых типов файлов:

.exe Исполняемый файл
.dll Библиотека Dynamic-Link
.ocx Элемент Active-X
.cpl Элемент панели управления
.drv Файл драйвера
.scr Файл заставки
.sys Системный файл Windows

Политика конфиденциальности | ExtraBit Software Ltd., Пеннард Роуд, Суонси SA3 3JG, Великобритания | Copyright © 2022 ExtraBit Software Ltd., Все права защищены

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