Как преобразовать 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 . Есть два способа сделать это.
- Найдите файл на компьютере и скопируйте его. Это будет работать большую часть времени.
- Найдите пропавшую . 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, 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-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.
Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.
Создадим один исполняемый файл. В командной строке введите:
После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр onefile
Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.
После успешного создания файл simple1.exe появится в папке DIST.
Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.
Дополнительные импорты с помощью 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
Но не факт, что проект потом соберётся обратно.
Репутация: нет
Всего: 24
Репутация: 192
Всего: 484
К тому же он не один.
Да и после дизассемблера обратная сборка далеко не гарантирована.
Репутация: нет
Всего: 1
Репутация: 8
Всего: 24
Репутация: 13
Всего: 158
Репутация: 8
Всего: 24
Репутация: 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 включён ]
Все языки программирования делятся на два типа — интерпретируемые и компилируемые.
Интерпретаторы
Программируя на интерпретируемом языке, мы пишем программу не для выполнения в процессоре, а для выполнения программой-интерпретатором. Ее также называют виртуальной машиной.
Как правило, программа преобразуется в некоторый промежуточный код, то есть набор инструкций, понятный виртуальной машине.
При интерпретации выполнение кода происходит последовательно строка за строкой (от инструкции до инструкции). Операционная система взаимодействует с интерпретатором, а не исходным кодом.
Скомпилированные программы работают быстрее, но при этом очень много времени тратится на компиляция исходного кода.
Программы же, рассчитанные на интерпретаторы, могут выполняться в любой системе, где таковой интерпретатор присутствует. Типичный пример — код JavaScript. Интерпретатором его выступает любой современный браузер. Вы можете однократно написать код на JavaScript, включив его в html-файл, и он будет одинаково выполняться в любой среде, где есть браузер. Не важно, будет ли это Safari в Mac OS, или же Internet Explorer в Windows.
Компиляторы
Компилятор — это программа, превращающая исходный текст, написанный на языке программирования, в машинные инструкции.
По мере преобразования текста программы в машинный код, компилятор может обнаруживать ошибки (синтаксиса языка, например). Поэтому все проблемы забытых точек с запятыми, забытых скобок, ошибок в названиях функций и переменных в данном случае решаются на этапе компиляции.
При компиляции весь исходный программный код (тот, который пишет программист) сразу переводится в машинный. Создается так называемый отдельный исполняемый файл, который никак не связан с исходным кодом. Выполнение исполняемого файла обеспечивается операционной системой. То есть образуется, например,.EXE файл.
Примеры компилируемых языков: C, C++, Pascal, Delphi.
Препроцессинг
Эту операцию осуществляет текстовый препроцессор.
Исходный текст частично обрабатывается — производятся:
- Замена комментариев пустыми строками
- Подключение модулей и т. д. и т. п.
Компиляция
Результатом компиляции является объектный код.
Объектный код — это программа на языке машинных кодов с частичным сохранением символьной информации, необходимой в процессе сборки.
Компоновка
Компоновка также может носить следующие названия: связывание, сборка или линковка.
Это последний этап процесса получения исполняемого файла, состоящий из связывания воедино всех объектных файлов проекта.
EXE файл.
Заходим в Сервис -> Настройки -> Опции компиляции. Поверяем, стоит ли галочка напротив 2 пункта. Если стоит, то убираем ее.
Теперь откройте свою программу и запустите ее.
Откройте директорию, в которой у вас лежит исходный код программы.
Кликаем по приложению. Как вы видите, после ввода данных, окошко сразу закрывается. Для того чтобы окно не закрывалось сразу, следует дописать две строчки кода, а именно: uses crt (перед разделом описания переменных) и readkey (в конце кода, перед оператором end).
Подключаем внешнюю библиотеку crt и используем встроенную в нее функцию readkey.
Теперь окно закроется по нажатию любой клавиши.
Среда разработки включает в себя:
- текстовый редактор;
- компилятор;
- средства автоматизации сборки;
- отладчик.
На сегодня все! Задавайте любые вопросы в комментариях к этой статье. Не забывайте кликать по кнопочкам и делится ссылками на наш сайт со своими друзьями. А для того, чтобы не пропустить выход очередной статьи, рекомендую вам подписаться на рассылку новостей от нашего сайта. Одна из них находится в самом верху справа, другая — в футере сайта.
Читайте также: