Как декомпилировать .exe в .py?
В общем, я писал небольшой скрипт для на python. Заказчик потребовал, чтобы был готовый exe, поэтому пришлось использовать Pyinstaller (с py2exe у меня выдавало ошибку). Проект выполнен и я решил переустановить винду. Но потом заказчик попросил переписать скрипт. Исходники я конечно же не забэкапил т.к. думал что к этому проекту уже не вернусь. В итоге, что у меня есть: exe скомпилированный с помощью pyinstaller и исходники старой версии проекта, которые остались на флешке. Подскажите, можно ли их как-нибудь декомпилировать в .py или мб какое-нибудь другое решение (писать заново — не вариант).
Отслеживать
1,825 1 1 золотой знак 16 16 серебряных знаков 31 31 бронзовый знак
задан 4 сен 2018 в 11:47
31 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
Как декомпилировать exe python
Программы для декомпиляции скриптов Python
Python — это один из наиболее популярных современных языков программирования. Его поддерживают в качестве скриптового языка различные программы, на нем написано огромное количество различных модулей, плагинов и тому подобное. Исходные тексты на Python можно компилировать в файлы с расширением .pyc, после компиляции они превращаются в нечитаемые бинарные данные. Это далеко не текстовый файл, поэтому, чтобы внести изменения или изучить алгоритм работы такого скрипта, потребуется привести его к исходному виду, то есть декомпилировать. Как ни странно, при всей популярности языка Python, инструментов для реверсинга .pyc-файлов создано не так уж и много.
Все декомпиляторы для Python, которые я встречал, написаны на нем же самом. С одной стороны, это облегчает понимание их работы, дает возможность доработки. Но с другой стороны, ничего не будет работать «из коробки», для запуска потребуется немало напрячься. Все перечисленные в статье инструменты представляют собой оболочки для автоматизации работы с готовыми декомпиляторами.
Скриншот программы Easy Python Decompiler
Easy Python Decompiler — оболочка для декомпиляторов Uncompyle2 и Decompyle++. Не требует установленного Python, может декомпилировать как отдельные скрипты, так и целые папки. С помощью Uncompyle2 прекрасно справляется с .pyc-файлами, скомпилированными версиями Pytyhon 1.0-2.7. Тут никаких вопросов нет, Uncompyle2 — самый лучший инструмент для этого, но, к сожалению, его разработка прекращена. Decompyle++ по заверениям авторов, должен поддерживать компиляторы Python аж до самой новой 3.4, но на деле все не так радужно. Простенькие скрипты уровня «Hello World!» версий Python 3.x он отрабатывает еще нормально, более серьезные скрипты гарантированно вызовут падение декомпилятора. Скачать Easy Python Decompiler можно с офсайта или по ссылке ниже.
Easy Python Decompiler 1.3.2
Скриншот программы PjOrion
PjOrion — отечественная разработка, универсальный инструмент для декомпиляции и дизассемблирования Python-скриптов. Изначально создавался для работы с какими-то модами WoT, но вполне может быть использован и для наших целей. Также не требует установленного Python, но при необходимости может легко подключить любую версию Python, установленную на компьютере. Кроме уже упомянутых Uncompyle2 и Decompyle++, для декомпиляции использует еще два инструмента — Fupy и pyREtic. Оба они поддерживают компилятор Python только до версии 2.7 включительно, но хуже того, что они глючные. Повторюсь, что Uncompyle2 по качеству результата еще никто не превзошел. Рабочих декомпиляторов для Python 3.x все также нет. В PjOrion есть полезная функция определения версии компилятора, так что не ошибетесь, какой модуль Python выбрать. Но главная прелесть, ради которой стоит держать PjOrion в коллекции реверсера, — это дизассемблер Python-скриптов. И пока что это единственный инструмент, который можно применить для анализа компилированных скриптов версий 3.x. Конечно, специфическому дизассемблерному листингу очень далеко до красивого декомилированного исходника, но при наличии некоторого опыта можно хотя бы понять логику работы скрипта. Скачать PjOrion можно с офсайта или отсюда.
Ren’Py
Unrpyc — декомпилятор для скриптов, созданных в игровом движке Ren’Py. Они хоть и пишутся на Python, но имеют свой внутренний формат и после компиляции не поддаются анализу обычными средствами. Декомпилятор работает из командной строки и требует наличие установленного Python.
Скриншот программы Py2Exe Binary Editor
Py2Exe Binary Editor не совсем относится к декомпиляторам, но используется как вспомогательная утилита для извлечения всех компонентов из исполняемых файлов, созданных при помощи py2exe. С помощью Py2Exe Binary Editor можно легко извлечь Python-скрипт для дальнейшего анализа. Как и сам py2exe, редактор работает только со 2-й версией Python.
Py2Exe Binary Editor 0.1
На этом заканчивается и без того скромный список декомпиляторов для Python. Если у вас есть что-нибудь для этих же задач, то большая просьба поделиться. Особенно интересуют рабочие декомпиляторы для Python 3.x.
Декомпиляция файлов Python с помощью PyInstaller Extractor
PyInstaller — это популярный инструмент для упаковки Python-приложений в автономные исполняемые файлы. Он упрощает распространение программ на Python. Несмотря на полезность PyInstaller, он позволяет декомпилировать файл и является небезопасным с точки зрения защиты кода. Далее поговорим о декомпиляции файлов PyInstaller с помощью PyInstaller Extractor.
Инструменты для декомпиляции файлов PyInstaller
Существует несколько инструментов для декомпиляции и получения исходного кода Python. Один из популярных — PyInstaller Extractor.
PyInstaller Extractor — это инструмент, который позволяет распаковать ресурсы из исполняемых файлов, созданных с помощью PyInstaller. С его помощью вы можете получить доступ к исходному коду, изображениям, конфигурационным файлам и другим ресурсам, включенным в исполняемый файл.
Его можно скачать с Sourceforge.
При распаковке исполняемого файла получается набор файлов .pyc. Эти файлы содержат скомпилированный байт-код, созданный интерпретатором Python при выполнении или импорте Python-скрипта.
На июнь 2023 год довольно просто декомпилировать и получить исходный код Python, если файлы .pyc были созданы с использованием версий Python до 3.9. Есть несколько библиотек, которые можно использовать для этой цели:
- uncompyle6 — библиотека может использоваться для декомпиляции байт-кода Python и извлечения соответствующего исходного кода.
- decompyle3 — еще одна полезная библиотека, которая помогает декомпилировать байт-код Python и получать исходный код.
Тем не менее, стоит отметить, что последняя версия Python на момент написания статьи — это 3.11+, и декомпиляция файлов .pyc для версий выше 3.8 является более сложной задачей.
Реализация методов декомпиляции байт-кода для последних версий Python — это трудоемкий процесс и занимает много времени.
Несмотря на это ограничение, я нашел инструмент под названием pycdc, который может частично декомпилировать код из последних версий Python. Следует отметить, что этот инструмент не всегда успешен, но может предоставить некоторые фрагменты кода для анализа.
В качестве демонстрации давайте создадим пример с закодированными учетными данными, чтобы показать процесс декомпиляции.
Итак, у нас есть файл PoC.py и мы переходим к его упаковке в исполняемый файл (.exe) с помощью PyInstaller. Этот шаг создает автономный исполняемый файл, который инкапсулирует код Python и его зависимости.
Теперь предположим, что сгенерированный файл .exe попадает в руки злоумышленника. С точки зрения злоумышленника, первый шаг — извлечь скомпилированный байт-код (.pyc) из исполняемого файла:
Затем злоумышленник может использовать pycdc.exe (Decompile++) для декомпиляции байт-кода в читаемый исходный код Python.
Этот процесс возможен даже если версия Python, используемая для компиляции, выше 3.8, благодаря возможностям pycdc.
В результате злоумышленник получает доступ к легко анализируемому и эксплуатируемому коду, раскрывая закодированные учетные данные или потенциальные уязвимости, присутствующие в исходном коде.
Заключение
Декомпиляция исполняемых файлов PyInstaller имеет большое значение в плане безопасности, так как она раскрывает уязвимости, выявляет закодированные секреты и позволяет анализировать код. Приоритезируя меры безопасности с самого начала, вы можете снизить риски, связанные с декомпиляцией, и улучшить защиту ваших приложений.
Автор идеи Сергей Новоселов.
- Лучшие программы для реверс-инжиниринга
- Обзор фреймворка для реверс-инжиниринга Ghidra
- Библиотеки и другие инструменты для обфускации Python
Как декомпилировать exe в py. Сборка: cx_freeze
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.
Pythonist
Новичок
Пользователь
Окт 13, 2021 1 0 1
Я новичок в python и решил собрать программу через pyinstaller и cx_freeze.
Потом задался вопросом как декомпилировать exe в py, с pyinstaller инфа была, а вот с cx_freeze инфы не было, как это сделать?