Как раскомпилировать pyc файл

Обновлено: 06.07.2024

Можно ли получить некоторую информацию из файла .pyc, который генерируется из файла .py?

CVS удалил один из моих файлов, когда я обновил свой проект перед фиксацией(коммитом). Все, что у меня есть сейчас-это файл .pyc, скомпилированный Python 2.7. Как я могу его декомпилировать?

Я хочу знать, что такое pyc-файл(байт-код python). Я хочу знать все подробности. Я хочу знать о том, как pyc-файлы взаимодействуют с компилятором. Является ли это заменой exe? Должен ли он быть запущен python? Является ли он таким же портативным, как файл .py? Где я должен это использовать?

Uncompyle6 работает для Python 3.x и 2.7-рекомендуемый вариант как самый последний инструмент, направленный на унификацию более ранних форков и фокусирующийся на автоматизированном модульном тестировании. На странице GitHub есть более подробная информация.

  • если вы используете Python 3.7+, вы также можете попробовать decompile3, a fork of Uncompyle6, фокусируясь на 3.7 и выше.
  • при необходимости поднимите вопросы GitHub в этих проектах - оба запускают наборы модульных тестов в диапазоне версий Python

Более старый Uncompyle2 поддерживает только Python 2.7. Некоторое время назад это хорошо сработало для меня, чтобы декомпилировать байт-код .pyc в .py, в то время как unpyclib разбился с исключением.

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

Да, вы можете получить его с помощью unpyclib , который можно найти на pypi .

Чем вы можете декомпилировать свой файл .pyc

Вы можете попробовать легкий декомпилятор Python . Он основан на Decompyle++ и Uncompyle2. Он поддерживает декомпиляцию python версий 1.0-3.3

Примечание: Я являюсь автором вышеприведенного инструмента.

Я хочу декомпилировать файл .pyc в файл сценария для Python 3.2. Все, что я смог найти, это то, что они успешно разработали декомпилятор для Python 2.7. Есть ли инструмент, который мог бы декомпилировать файл .pyc в обычный файл .py ?

Этот ответ говорит мне, что файл .pyc создается при запуске файла .py, что, как я понимаю, экономит время загрузки при повторном запуске. Что заставляет меня задуматься, какой смысл в файле .py после создания .pyc. При резервном копировании моего кода или совместном использовании его я не хочу.

Да.

Я использую декомпиляцию uncompyle6 (даже поддерживаю последнюю версию Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

а исходные python и декомпилированные python сравнения выглядят так:

pyc uncompile utils

так что вы можете видеть, ALMOST то же самое, эффект декомпиляции очень хорош .

Да, это возможно.

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

Установка с помощью pip установить pycompyle6

Похожие вопросы:

Как декомпилировать файл exe, скомпилированный py2exe? только один файл exe, не было никакого файла zip. как декомпилировать файл в pyc или pyo?

У меня есть файл jar, который используется в моем проекте android. У меня есть скрытый файл The jar используя инструмент должны. Можно ли декомпилировать файл jar и получить исходный код?

CVS удалил один из моих файлов, когда я обновил свой проект перед фиксацией(коммитом). Все, что у меня есть сейчас-это файл .pyc, скомпилированный Python 2.7. Как я могу его декомпилировать?

Я хочу знать, что такое pyc-файл(байт-код python). Я хочу знать все подробности. Я хочу знать о том, как pyc-файлы взаимодействуют с компилятором. Является ли это заменой exe? Должен ли он быть.

Я хочу декомпилировать файл .pyc в файл сценария для Python 3.2. Все, что я смог найти, это то, что они успешно разработали декомпилятор для Python 2.7. Есть ли инструмент, который мог бы.

Этот ответ говорит мне, что файл .pyc создается при запуске файла .py, что, как я понимаю, экономит время загрузки при повторном запуске. Что заставляет меня задуматься, какой смысл в файле .py.

Я написал небольшую программу test1.py print abc print 'the above is invalid' Теперь я пишу другую программу python 'test2.py' import test1 print 'this line will not get executed' Q1:To к моему.

Версия python3-это Python 3.5.3 в моей ОС. mkdir workspace cd workspace vim print.py print(i am learning) Сохранено и выходим. python3 print.py i am learning Насколько я знал, исходный файл python.

Я знаю о файлах .pyc (скомпилированный файл .py ) и разнице между ними: разнице между .py и .pyc Мой вопрос таков: Есть ли разница между временем выполнения файлов .py и .pyc или этими тестами ? И.

Программы для декомпиляции скриптов Python


Программы для декомпиляции скриптов Python

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

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

Скриншот программы Easy Python Decompiler


Скриншот программы Easy Python Decompiler

Easy Python Decompiler 1.3.2

Скриншот программы PjOrion


Скриншот программы PjOrion

Скриншот программы Py2Exe Binary Editor


Скриншот программы Py2Exe Binary Editor

Py2Exe Binary Editor не совсем относится к декомпиляторам, но используется как вспомогательная утилита для извлечения всех компонентов из исполняемых файлов, созданных при помощи py2exe. С помощью Py2Exe Binary Editor можно легко извлечь Python-скрипт для дальнейшего анализа. Как и сам py2exe, редактор работает только со 2-й версией Python.

Py2Exe Binary Editor 0.1

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

Цель: восстановить exe, сгенерированный pyinstaller, в файл .py

1. Извлеките файл .pyc из сгенерированного exe

Здесь есть много способов. , , Можно использоватьpyinstxtractor. , Вы также можете использовать официальный archive_viewer.py (скачать в конце статьи)

Я использую официальный archive_viewer.py здесь. ,

Приведенный здесь пример - это программа (написанная на python), отправленная неким братом. , , Интерфейс выглядит так


(1) Откройте cmd в том же каталоге, что и программа. , Выполнить python archive_viewer.py qiangke.exe (здесь указано название программы)


Здесь доступны четыре команды:

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


x (имя программы) Введите имя файла pyc, который будет создан после возврата каретки

Пока что , Первый шаг завершен. , ,

2. Декомпилировать файлы pyc

Поскольку у каждого файла pyc есть волшебная голова, pyinstaller удалит волшебную часть pyc, когда он генерирует exe, и его необходимо завершить самостоятельно во время декомпиляции. Для python2 необходимо дополнить 8 байтов, следующие 4 байта являются временными метками, а первые 4 байта являются скомпилированными версиями Python. ,

Конечно, здесь есть небольшая хитрость

Первые 4 байта можно получить через файл структуры


Таким образом, предыдущий \ x03 \ xf3 \ x0d \ x0a. , Более поздние временные метки также можно заменить на 00 00 00 00

Затем используйте редактор 010 или winhex, чтобы открыть файл pyc. , Добавьте восемь байтов и сохраните


3. Восстановить py файлы

(1) Вы можете использовать веб-сайт для прямой загрузки и восстановления. ,

(2) Используйте uncompyle. , ,

Decompile:

uncompyle6 -o .pyc имя файла

Описание:

-o может сопровождаться путем к файлу, который представляет местоположение вывода декомпилированного файла, «.» означает вывод в текущую папку

Я искал вокруг и не смог найти ничего, что могло бы помочь мне декомпилировать Python 3.5. Кто-нибудь знает об одном?

3 ответа

Те, которые я знаю об этой ручке Python 3.5 (и других версиях Python):

[Отказ от ответственности: я разрабатываю 1]

Uncompyle6 (написанный на Python) обрабатывает коды операций, представленные в Python 3.5, в то время как pycdc (написанный на C ++) здесь все еще немного отсутствует. Но эти коды операций появляются только при использовании новых функций языка Python 3.5. Таким образом, вероятность столкнуться с этим в pycdc может быть небольшой, если основная программа работает с более ранними версиями Python.

Однако для Python 3.6 и новее ситуация немного иная. Python 3.6 добавляет некоторые коды операций вызова функций и изменяет семантику других кодов операций. Таким образом, в отличие от 3.5, новые коды операций появляются даже с кодом, который не использует какие-либо новые функции, используемые в Python 3.5 или 3.6. Python 3.7, опять же, добавляет коды операций и изменяет семантику других; и прямо сейчас pycdc не поддерживает это. 3.8 меняет генерацию кода немного больше, чем другие, с удалением SETUP_LOOP .

Uncompyle6 решает некоторые из них, предлагая различные отчеты об ошибках. А с появлением версии 3.6 все чаще появляются новые коды операций и функции 3.5.

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

Недавняя история с uncompyle6 и decoplye3 такова, что дошло до того, что исправление одних проблем может сломать другие. Позволь мне объяснить. Соответствие шаблонов uncompyle6 и decompile3 в инструкциях. Может быть особый узор, который дает сбой в 50% случаев. Со временем я усовершенствую шаблон до чего-то более сложного, что дает меньше ошибок, скажем, в 25% случаев, но определенные экземпляры работали с ранее использованным шаблоном 50%.

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

На данный момент это 2020-01-06 , последняя версия uncompyle6 хорошо поддерживает Python 3.8.0 - & gt; также должен хорошо поддерживать ваш Python 3.5.

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

Можно ли получить некоторую информацию из файла .pyc, созданного из файла .py?

Uncompyle6 работает для Python 3.x и 2.7 - рекомендуемый вариант, поскольку это самый последний инструмент, направленный на унификацию более ранних форков и сосредоточенный на автоматическом модульном тестировании. На странице GitHub есть более подробная информация.

  • если вы используете Python 3.7+, вы также можете попробовать decompile3, форк Uncompyle6, ориентированный на 3.7 и выше.
  • при необходимости поднимайте проблемы с GitHub в этих проектах - оба запускают комплекты модульных тестов для ряда версий Python

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

Более старый Uncompyle2 поддерживает только Python 2.7. Некоторое время назад это сработало для меня, чтобы декомпилировать байт-код .pyc в .py, тогда как unpyclib разбился с исключением.

Да, вы можете получить это с unpyclib что можно найти на Pypi.

Чем вы можете декомпилировать свой .pyc файл

  • 23 Я попробовал это, и он вылетел с исключением, на довольно небольшом файле без сложного кода (Django settings.py) - вместо этого uncompyle2 работал нормально. -1 по этой причине.
  • 10 В Python 3.6 произошел сбой в lib \ site-packages \ unpyclib \ applcation.py с print __copyright - почему он использует версию Python 2.7 print без скобок?
  • 2 @DavidChing unpyclib Первый и последний выпуск был в 2009 году, можно с уверенностью сказать, что это программа только на Python 2.

Вы можете попробовать Простой декомпилятор Python. Он основан на Decompyle ++ и Uncompyle2. Поддерживает декомпиляцию Python версий 1.0-3.3.

Примечание: я являюсь автором вышеуказанного инструмента.

  • 5 Он делает свое дело. Хорошая работа. Кстати, вы писали этот инструмент на Python?
  • 2 Мне понравилось (простое перетаскивание). Это правда, что дистрибутив linux был бы хорош, но не так уж сложно открыть окно Windows.
  • 1 Последний выпуск в 2015 году и, похоже, он с закрытым кодом?

был предложен в Decompile Python 2.7 .pyc

  • 1 И это сработало для меня для кода, который был скомпилирован с Python 2.6!

да.

Я использую декомпиляцию uncompyle6 (даже поддерживаю последнюю версию Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

а исходный питон и сравнение декомпилированного питона выглядят так:


чтобы вы могли видеть ПОЧТИ то же самое, эффект декомпиляции ОЧЕНЬ ХОРОШО.

  • такой же опыт здесь. uncompyle6 это невероятно.

Да, это возможно.

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

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