Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
python-decompile3 — Декомпилятор Python для версий 3.7-3.8. Урезанная версия uncompyle6, чтобы мы могли провести рефакторинг и начать исправлять некоторые давние проблемы. | Kitploit
Инструменты/GitHubGitHub/rocky/python-decompile3
Статический анализОбратная инженерияОтладчикиАнализ вредоносных программАнализ Бинарных ФайловОбучение и Образование
GitHubrocky/python-decompile3

python-decompile3

Декомпилятор Python для версий 3.7-3.8. Урезанная версия uncompyle6, чтобы мы могли провести рефакторинг и начать исправлять некоторые давние проблемы.

Репозиторий
1.3k1661 месяц назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

|buildstatus| |Pypi Installs| |Latest Version| |Supported Python Versions|

|packagestatus|

.. contents::

decompyle3

Нативный крос-версионный декомпилятор Python и декомпилятор фрагментов. Переработка uncompyle6_.

Я выступал с докладом об этом на BlackHat Asia 2024 <https://youtu.be/H-7ZNrpsV50?si=nOaixgYHr7RbILVS>_.

Введение

decompyle3 переводит байт-код Python обратно в эквивалентный исходный код Python. Он принимает байт-коды начиная с версии Python 3.7.

Для декомпиляции более старых байт-кодов Python см. uncompyle6_.

Почему этот проект?

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

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

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

С годами я расширил её, сделав более специфичной, поэтому были добавлены COME_FROM_LOOP и COME_FROM_WITH. И я добавил проверки во время сокращения грамматики, чтобы попытаться гарантировать, что переходы соответствуют предполагаемым целям COME_FROM.

Однако всё это сложно, ненадёжно, сильно замедлило декомпиляцию и, по сути, нежизнеспособно.

В этом проекте мы начали переписывать и рефакторить грамматику.

Однако даже этого недостаточно. Поток управления необходимо обрабатывать с помощью доминаторов и обратных доминаторов, что может дать проект python-control-flow_.

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

Требования

Код здесь можно запускать на Python версий 3.7 или 3.8. Файлы байт-кода, которые он может читать, были протестированы на байт-кодах Python версий 3.7 и 3.8.

Установка

Вы можете установить из PyPI, используя имя decompyle3::

root@kitploit:~
pip install decompyle3

Для установки из исходного кода этот проект использует setup.py, поэтому следует стандартной процедуре Python::

root@kitploit:~
$ pip install -e .  # настройка для запуска из дерева исходников

или::

root@kitploit:~
$ python setup.py install # может потребоваться sudo

Также предоставлен Makefile для GNU, поэтому :code:make install (возможно, с root или sudo) выполнит шаги выше.

Запуск тестов

::

make check

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

Если у вас установлен remake_, вы можете увидеть список всех задач, включая тесты, через :code:remake --tasks

Использование

Запустите

::

$ decompyle3 скомпилированный-файл-python-расширения-pyc-или-pyo

Для справки по использованию:

::

$ decompyle3 -h

Проверка

Если вы хотите проверку синтаксиса Python на корректность декомпиляции, добавьте опцию :code:--syntax-verify. Однако, поскольку синтаксис Python меняется, эту опцию следует использовать, если байт-код соответствует правильному байт-коду для интерпретатора Python, который будет проверять синтаксис.

Вы также можете сравнить результаты с другим декомпилятором Python, например unpyc37_. Поскольку они работают по-разному, ошибки здесь часто отсутствуют в нём, и наоборот.

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

И в Python есть ещё один набор таких программ: его собственный набор тестов для стандартной библиотеки. У нас также есть некоторый код в :code:test/stdlib для облегчения такого рода проверок.

Известные ошибки/ограничения

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

Мы также не обрабатываем PJOrion_ и другой обфусцированный код. Для PJOrion попробуйте: PJOrion Deobfuscator_ для распутывания байт-кода и получения валидного байт-кода перед использованием этого инструмента; pydecipher_ может помочь с этим.

Эта программа не может декомпилировать исполняемые файлы Microsoft Windows, созданные Py2EXE_, хотя мы, вероятно, сможем декомпилировать код после того, как вы правильно извлечёте байт-код. Pydeinstaller <https://github.com/charles-dyfis-net/pydeinstaller>_ может помочь с распаковкой сборщиков Pyinstaller.

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

В декомпиляции множество ошибок. И это верно для всех других декомпиляторов CPython, с которыми я сталкивался, даже тех, которые заявляли о "совершенстве" на какой-то конкретной версии, например 2.4.

По мере развития Python декомпиляция становится всё сложнее, потому что компиляция становится более изощрённой, а сам язык — более сложным. Я подозреваю, что попыток создания специальных решений, таких как unpyc37_ (который основан на декомпиляторе для 3.3), будет меньше, просто потому что это стало труднее. Хорошая новость, по крайней мере с моей точки зрения, заключается в том, что я понимаю, что нужно для решения проблем более надёжным способом. Но сейчас, пока проект не получит лучшее финансирование, я не намерен прилагать серьёзных усилий для поддержки Python версий 3.8 или 3.9, включая возможные ошибки. Я предполагаю, что в какой-то момент это может меня заинтересовать.

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

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

См. также

  • https://github.com/andrew-tavera/unpyc37/ : косвенный форк https://code.google.com/archive/p/unpyc3/ Вышеуказанные проекты используют другую технику декомпиляции, нежели используемая здесь. Инструкции проходятся. Некоторые инструкции используют стек для генерации строк, другие — нет. Поскольку поток управления не обрабатывается напрямую, он также страдает теми же проблемами, что и различные программы uncompyle и decompyle.
  • https://github.com/rocky/python-xdis : Крос-версионный дизассемблер Python
  • https://github.com/rocky/python-xasm : Крос-версионный ассемблер Python
  • https://github.com/rocky/python-decompile3/wiki : Вики-документы, описывающие код и его аспекты более подробно

.. |buildstatus| image:: https://dl.circleci.com/status-badge/img/gh/rocky/python-decompile3/tree/master.svg?style=svg :target: https://dl.circleci.com/status-badge/redirect/gh/rocky/python-decompile3/tree/master .. |packagestatus| image:: https://repology.org/badge/vertical-allrepos/python:uncompyle6.svg :target: https://repology.org/project/python:decompyle3/versions .. _Cython: https://en.wikipedia.org/wiki/Cython .. _MicroPython: https://micropython.org .. _uncompyle6: https://pypi.python.org/pypi/uncompyle6 .. _python-control-flow: https://github.com/rocky/python-control-flow .. _trepan: https://pypi.python.org/pypi/trepan3k .. _compiler: https://pypi.python.org/pypi/spark_parser .. _HISTORY: https://github.com/rocky/python-decompile3/blob/master/HISTORY.md .. _debuggers: https://pypi.python.org/pypi/trepan3k .. _remake: https://bashdb.sf.net/remake .. _unpyc37: https://github.com/andrew-tavera/unpyc37/ .. _this: https://github.com/rocky/python-decompile3/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting .. |TravisCI| image:: https://travis-ci.org/rocky/python-decompile3.svg :target: https://travis-ci.org/rocky/python-decompile3 .. |CircleCI| image:: https://circleci.com/gh/rocky/python-decompile3.svg?style=svg :target:

.. _PJOrion: http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%84 .. _Deobfuscator: https://github.com/extremecoders-re/PjOrion-Deobfuscator .. _Py2EXE: https://en.wikipedia.org/wiki/Py2exe .. |Supported Python Versions| image:: https://img.shields.io/pypi/pyversions/decompyle3.svg .. |Latest Version| image:: https://badge.fury.io/py/decompyle3.svg :target: https://badge.fury.io/py/decompyle3 .. |PyPI Installs| image:: https://pepy.tech/badge/decompyle3/month .. _pydecipher: https://github.com/mitre/pydecipher

Скачать инструмент
https://circleci.com/gh/rocky/python-decompile3