Как преобразовать exe файл в код

Обновлено: 04.07.2024

В этом уроке мы рассмотрим, как преобразовать скрипт Python в exe-файл в Windows с помощью Py2Exe, с примерами.

Вступление

Выполнение скриптов Python требует множества предварительных условий, таких как установка Python, установка множества модулей, использование командной строки и т. Д. при выполнении файла .exe все очень просто.

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

Самый популярный способ добиться этого-использовать модуль py2exe . В этой статье мы быстро рассмотрим основы py2exe и устраним некоторые распространенные проблемы. Чтобы следовать дальше, не требуется никаких продвинутых знаний Python, однако вам придется использовать Windows.

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

Установка py2exe

Чтобы использовать модуль py2exe , нам нужно будет его установить. Давайте сделаем это с помощью pip :

Преобразование скрипта Python в файл .exe

Во-первых, давайте напишем программу, которая будет печатать какой-то текст на консоль:

Давайте запустим следующие команды в командной строке Windows, чтобы создать каталог ( пример ), переместим код, который мы уже написали, в указанный каталог и, наконец, выполним его:

Это должно вывести:

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

Настройка и настройка

Создайте еще один файл с именем setup.py в той же папке. Здесь мы будем держать детали конфигурации о том, как мы хотим скомпилировать нашу программу. Сейчас мы просто вставим в него пару строк кода:

Если бы мы имели дело с приложением с графическим интерфейсом, мы бы заменили console на windows вот так:

Теперь откройте командную строку от имени администратора и перейдите в каталог, который мы только что упомянули, и запустите setup.py файл:

папка dist

Если все сделано правильно, то это должно привести к созданию подкаталога с именем dist . Внутри него будет несколько разных файлов в зависимости от вашей программы, и один из них должен быть example.exe . Чтобы выполнить его из консоли запустите:

И вы будете встречены нашей латинской цитатой, за которой следует значение 4!:

Или вы можете дважды щелкнуть по нему, и он запустится в консоли.

Если вы хотите объединить все файлы, и bundle_files и compressed , и установить zipfile в None, то вот так:

И повторно запустите команды для создания файла .exe .

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

Диагностика

Ошибки при преобразовании файлов .py в файлы .exe встречаются довольно часто, поэтому мы перечислим некоторые распространенные ошибки и решения.

Распространенная проблема с py2exe отсутствует .dll -s.

После запуска .exe , если вы получаете системную ошибку, которая говорит что-то вроде:

Или командная строка говорит:

Решение состоит в том, чтобы найти отсутствующий файл .dll и вставить его в папку dist . Есть два способа сделать это.

  1. Найдите файл на компьютере и скопируйте его. Это будет работать большую часть времени.
  2. Найдите пропавшую . dll онлайн и скачайте ее. Старайтесь не скачивать его с какого-нибудь сомнительного сайта.

Как сгенерировать 32/64-битные исполняемые файлы с помощью py2exe?

Чтобы создать 64-битный исполняемый файл, установите 64-битный Python на свое устройство. То же самое касается и 32-битной версии.

Как использовать py2exe на Linux или Mac

py2exe не поддерживает Linux или Mac, так как он предназначен для создания файлов .exe , которые являются уникальным форматом Windows. Вы можете скачать виртуальную машину Windows как на Mac, так и на Linux, использовать Wine или использовать другой инструмент, например Pyinstaller на Linux или py2app на Mac.

Вывод

Чтобы облегчить запуск проектов Python на устройствах Windows, нам нужно сгенерировать исполняемый файл. Мы можем использовать множество различных инструментов, таких как Pyinstaller , auto-py-to-exe , cx_Freeze и py2exe .

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


Как вызвать запуск .ехе файла другой программы?
Запуск левой программы с под WForm

Можно ли как-нибудь из ехе-файла получить дизассемблированый код
Можно ли как нибудь из ехе файла получить дизассемблированый код на FASM\MASM?


Как узнать исходный код файла-ЕХЕ для Visual Basic 6.0?
Здравствуйте! Прошу помощи. Как узнать P-Code? Научите, пожалуйста, пользоваться компиляторами и.

Как средствами Delphi реализовать извлечение ехе файла при запуске ехе?
Здорова, народ. Как средствами Delphi реализовать извлечение ехе файла при запуске ехе? Заранее.

Точно не знаю,но кажется в домашних условиях нет.Может быть какой нибудь профессиональной платной софтиной. хотя вряд ли. na3ar1y, полностью получить исходный код - никак. Для этого используются дизассемблеры, но от них толку мало ну на самом деле все зависит от дизасма) если в ассемблере разбираться и использовать иду, то все очень даже легко.
а еще вроде есть хорошие тулзы, которые смогут восстановить даже не ассемблерный код, а прямо нормальный листинг (но только для конкретного компилятора) кто знает как извлечь код програми с ехе файла?? это возможно зделать? иди изучай архитектуру ЭВМ долго и тщательно, паралельно практикуясь с асм. Только после того как твои мозги очистятся от текущего рака, тогда ты сможешь приступить к реверсингу и просветвлишься насчет того что такое "получить код из бинарника" иди изучай архитектуру ЭВМ долго и тщательно, паралельно практикуясь с асм. Только после того как твои мозги очистятся от текущего рака, тогда ты сможешь приступить к реверсингу и просветвлишься насчет того что такое "получить код из бинарника"

смешно, хоть и флуд.

na3ar1y, exe-файл - и есть код программы.
а то, что вы хотите получить называется листингом программы на каком-либо языке.
судя по разделу, вы хотите листинг программы на C++, или даже на Visual C++.
программы? способные выполнить ваше желание, называются декомпиляторами.
декомпиляторы для С++ - большая-большая редкость.
просто в силу того, что это язык достаточно низкого уровня, и в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.

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

na3ar1y, exe-файл - и есть код программы.
а то, что вы хотите получить называется листингом программы на каком-либо языке.
судя по разделу, вы хотите листинг программы на C++, или даже на Visual C++.
программы? способные выполнить ваше желание, называются декомпиляторами.
декомпиляторы для С++ - большая-большая редкость.
просто в силу того, что это язык достаточно низкого уровня, и в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.

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

ссылку на спеки ЯЗЫКА visual C++ можно предоставить, а то я что то видимо проспал.
"exe-файл - и есть код программы" . "в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы." - а теперь выдыхните, соберитесь и расшифруйте сей высер гуманитария техническими терминами Идиотом только и остается как смеятся, на большее они не способны.
ссылку на спеки ЯЗЫКА visual C++ можно предоставить, а то я что то видимо проспал.
"exe-файл - и есть код программы" . "в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы." - а теперь выдыхните, соберитесь и расшифруйте сей высер гуманитария техническими терминами

кончай выдрючиваться.
троллинг никому не интересен.
а если правда не понял - поясняю:
1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, дотнетом, и прочими финтифлюшками.
это специфические реализации С++, требующие специфического декомпилятора.
обычным декомпилятором С++ ты шаблоны ресурсов для Студии не получишь.
2)есть несколько вариантов реализации одного и того-же алгоритма.
например, простейший цикл.
можно написать
for(i=. ;;)<>
а можно руками:
lebel: i = . ;делаем чего-то;goto label
а в итоге компилятор сделает ИДЕНТИЧНЫЕ exe.
т.е., как правило, восстановить исходный листинг программы на С++ невозможно в принципе. но можно получить что-то похожее.
а в языках высокого уровня листинг как правило транслируется в код (и обратно) однозначно, без таких вариантов.

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

кончай выдрючиваться.
троллинг никому не интересен.
а если правда не понял - поясняю:
1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, дотнетом, и прочими финтифлюшками.
это специфические реализации С++, требующие специфического декомпилятора.
обычным декомпилятором С++ ты шаблоны ресурсов для Студии не получишь.
2)есть несколько вариантов реализации одного и того-же алгоритма.
например, простейший цикл.
можно написать
for(i=. ;<>
а можно руками:
lebel: i = . ;делаем чего-то;goto label
а в итоге компилятор сделает ИДЕНТИЧНЫЕ exe.
т.е., как правило, восстановить исходный листинг программы на С++ невозможно в принципе. но можно получить что-то похожее.
а в языках высокого уровня листинг как правило транслируется в код (и обратно) однозначно, без таких вариантов.

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

ну вот сейчас вменяемое объяснение. это так сложно сразу нормально писать.
То что можно только повторить примерный листинг пользуясь диззасемблером/декомпилятором это и говорилось автору сразу, но он сам этого мало понимает в силу своих очень скудных познаний (да и интелектуальный потенциал этого индивида тоже вызывает сомнения)
>>1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, ДОТНЕТОМ, и прочими финтифлюшками. это специфические реализации С++

с++ это не дотнет, дотнетовские проги просматриваются CLR просмоторщиками (который входит в состав студии)

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

Вот так можно проверить версию PyInstaller.

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  3. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  4. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  5. Создает папку DIST в папке со скриптом, если она еще не существует.
  6. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.

Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.

Создадим один исполняемый файл. В командной строке введите:

После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными

Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.

Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .

Добавление файлов с данными и параметр onefile

Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.

После успешного создания файл simple1.exe появится в папке DIST.

Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.

Добавление файлов с данными и параметр onefile

Дополнительные импорты с помощью Hidden Imports

Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …

Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.

Например, чтобы добавить библиотеку os, нужно написать вот так:

Файл spec

Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.

PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.

Файл с расширением .spec сохраняется по умолчанию в текущей директории.

Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:

  • Собрать в один бандл с исполняемым файлы данных.
  • Включить другие исполняемые файлы: .dll или .so.
  • С помощью библиотек собрать в один бандл несколько программы.

Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.

Компилируем модель с помощью PyInstaller:

После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.

Исправим ее, обновив файл spec. Одно из решений — создать файл spec.

Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.

Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.

Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.

Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.

Создаем хуки и добавляем их в hidden imports и раздел данных.

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

Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.

Скомпилируем модель после обновления файла simpleModel.spec.

Скопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.

Вывод:

PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:

Загрузка. Пожалуйста,
подождите.

Репутация: 8
Всего: 24

Репутация: нет
Всего: 24

Лучше, чем IDA, тебе не найти.

"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")

Репутация: 192
Всего: 484

Есть ещё программы - декомпиляторы (например DeDe)
Но не факт, что проект потом соберётся обратно.

Репутация: нет
Всего: 24

"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")

Репутация: 192
Всего: 484

Ну уж какой есть.
К тому же он не один.
Да и после дизассемблера обратная сборка далеко не гарантирована.

Репутация: нет
Всего: 1

Репутация: 8
Всего: 24

USSR, она код всех процедур делает вот в таком виде:

Репутация: 13
Всего: 158

Репутация: 8
Всего: 24

Вообщем случае, у меня есть форма, на которой есть всего одна кнопка, но у неё свойство enable стоит false (не активна), всё что мне нужно это перевести его в true. Приэтом чтобы код который она должна выполнить остался без изменений. По русски говоря, нужно её декомпилировать, изменить свойство и снова компилировать, Но вот декомпилировать пока не знаю как.

Репутация: 13
Всего: 158

Репутация: 192
Всего: 484

Репутация: 5
Всего: 16

Цитата

Вообщем случае, у меня есть форма, на которой есть всего одна кнопка, но у неё свойство enable стоит false (не активна), всё что мне нужно это перевести его в true. Приэтом чтобы код который она должна выполнить остался без изменений. По русски говоря, нужно её декомпилировать, изменить свойство и снова компилировать, Но вот декомпилировать пока не знаю как.

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

Репутация: 28
Всего: 89

Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.

Репутация: 4
Всего: 260

Репутация: нет
Всего: 24

"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

[ Время генерации скрипта: 0.1472 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Drawing 20

Все языки программирования делятся на два типа — интерпретируемые и компилируемые.

Интерпретаторы

Программируя на интерпретируемом языке, мы пишем программу не для выполнения в процессоре, а для выполнения программой-интерпретатором. Ее также называют виртуальной машиной.

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

Protsess interpretatsii 510x141

При интерпретации выполнение кода происходит последовательно строка за строкой (от инструкции до инструкции). Операционная система взаимодействует с интерпретатором, а не исходным кодом.

Скомпилированные программы работают быстрее, но при этом очень много времени тратится на компиляция исходного кода.

Программы же, рассчитанные на интерпретаторы, могут выполняться в любой системе, где таковой интерпретатор присутствует. Типичный пример — код JavaScript. Интерпретатором его выступает любой современный браузер. Вы можете однократно написать код на JavaScript, включив его в html-файл, и он будет одинаково выполняться в любой среде, где есть браузер. Не важно, будет ли это Safari в Mac OS, или же Internet Explorer в Windows.

Компиляторы

Компилятор — это программа, превращающая исходный текст, написанный на языке программирования, в машинные инструкции.

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

При компиляции весь исходный программный код (тот, который пишет программист) сразу переводится в машинный. Создается так называемый отдельный исполняемый файл, который никак не связан с исходным кодом. Выполнение исполняемого файла обеспечивается операционной системой. То есть образуется, например,.EXE файл.

Примеры компилируемых языков: C, C++, Pascal, Delphi.

Препроцессинг

Эту операцию осуществляет текстовый препроцессор.

Исходный текст частично обрабатывается — производятся:

  • Замена комментариев пустыми строками
  • Подключение модулей и т. д. и т. п.

Компиляция

Результатом компиляции является объектный код.

Объектный код — это программа на языке машинных кодов с частичным сохранением символьной информации, необходимой в процессе сборки.

Компоновка

Компоновка также может носить следующие названия: связывание, сборка или линковка.

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

EXE файл.

Заходим в Сервис -> Настройки -> Опции компиляции. Поверяем, стоит ли галочка напротив 2 пункта. Если стоит, то убираем ее.

Теперь откройте свою программу и запустите ее.

Откройте директорию, в которой у вас лежит исходный код программы.

Кликаем по приложению. Как вы видите, после ввода данных, окошко сразу закрывается. Для того чтобы окно не закрывалось сразу, следует дописать две строчки кода, а именно: uses crt (перед разделом описания переменных) и readkey (в конце кода, перед оператором end).

Сохраненное изображение 2014 2 5 21 3 44.424 510x377

Подключаем внешнюю библиотеку crt и используем встроенную в нее функцию readkey.

Теперь окно закроется по нажатию любой клавиши.

Сохраненное изображение 2014 2 5 21 2 32.800 510x256

Среда разработки включает в себя:

  • текстовый редактор;
  • компилятор;
  • средства автоматизации сборки;
  • отладчик.

На сегодня все! Задавайте любые вопросы в комментариях к этой статье. Не забывайте кликать по кнопочкам и делится ссылками на наш сайт со своими друзьями. А для того, чтобы не пропустить выход очередной статьи, рекомендую вам подписаться на рассылку новостей от нашего сайта. Одна из них находится в самом верху справа, другая — в футере сайта.

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