Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
python-decompile3 — Descompilador de Python para 3.7-3.8 Reducido de uncompyle6 para poder refactorizarlo y empezar a corregir algunos problemas de larga data. | Kitploit
Herramientas/GitHubGitHub/rocky/python-decompile3
Análisis EstáticoIngeniería InversaDepuradoresAnálisis de MalwareAnálisis de BinariosAprendizaje y Educación
GitHubrocky/python-decompile3

python-decompile3

Descompilador de Python para 3.7-3.8 Reducido de uncompyle6 para poder refactorizarlo y empezar a corregir algunos problemas de larga data.

Ver Repositorio
1.3k166hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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

|packagestatus|

.. contents::

decompyle3

Un descompilador nativo de Python para múltiples versiones y un descompilador de fragmentos. Una reescritura de uncompyle6_.

Di una charla sobre esto en BlackHat Asia 2024 <https://youtu.be/H-7ZNrpsV50?si=nOaixgYHr7RbILVS>_.

Introduction

decompyle3 traduce bytecode de Python de vuelta a código fuente de Python equivalente. Acepta bytecodes desde la versión 3.7 de Python en adelante.

Para la descompilación de bytecode de Python más antiguo, consulta uncompyle6_.

¿Por qué esto?

Uncompyle6 es increíble, pero tiene un problema fundamental en la forma en que maneja el flujo de control. En los primeros días de Python, cuando había poca optimización y el código se generaba de manera muy orientada a plantillas, se podían determinar las estructuras de flujo de control simplemente mirando los patrones de código.

Con los años, una mayor optimización del código, específicamente en el manejo de saltos, ha dificultado la detección del flujo de control estrictamente a partir de patrones de código. Esto se notó ya en Python 2.4 (2004), pero como es un problema difícil, hasta ahora no se ha abordado de manera satisfactoria.

El intento inicial de solucionar este problema fue añadir marcadores en el flujo de instrucciones; inicialmente se trataba de una instrucción COME_FROM, y luego se usaba eso en la detección de patrones.

Con los años, lo he extendido para que sea más específico, de modo que se añadieron COME_FROM_LOOP y COME_FROM_WITH. Y añadí comprobaciones en el tiempo de reducción de la gramática para intentar asegurar que los saltos coinciden con los supuestos objetivos de COME_FROM.

Sin embargo, todo esto es complicado, no es robusto, ha ralentizado enormemente el deparsing y no es realmente sostenible.

En este proyecto, comenzamos a reescribir y refactorizar la gramática.

Sin embargo, incluso esto no es suficiente. El flujo de control debe abordarse utilizando dominadores y dominadores inversos, que es lo que puede proporcionar el proyecto python-control-flow_.

Esto es lo que finalmente estoy haciendo poco a poco en otro proyecto no público. Es mucho trabajo. La financiación en forma de patrocinio, aunque muy apreciada, no es proporcional a la cantidad de esfuerzo, y actualmente tengo un trabajo a tiempo completo. Así que puede pasar tiempo antes de que esté disponible públicamente, si es que llega a estarlo.

Requisitos

El código aquí se puede ejecutar en Python 3.7 o 3.8. Los archivos de bytecode que puede leer han sido probados con bytecodes de Python de las versiones 3.7 y 3.8.

Instalación

Puedes instalarlo desde PyPI usando el nombre decompyle3::

root@kitploit:~
pip install decompyle3

Para instalarlo desde el código fuente, este proyecto usa setup.py, por lo que sigue el procedimiento estándar de Python::

root@kitploit:~
$ pip install -e .  # set up to run from source tree

o::

root@kitploit:~
$ python setup.py install # may need sudo

También se proporciona un GNU Makefile, por lo que :code:make install (posiblemente como root o con sudo) realizará los pasos anteriores.

Ejecución de pruebas

::

make check

Se ha añadido un makefile de GNU para facilitar la configuración y ejecución del comando correcto, y para ejecutar las pruebas de la más rápida a la más lenta.

Si tienes remake_ instalado, puedes ver la lista de todas las tareas, incluidas las pruebas, mediante :code:remake --tasks.

Uso

Ejecuta

::

$ decompyle3 compiled-python-file-pyc-or-pyo

Para obtener ayuda sobre el uso:

::

$ decompyle3 -h

Verificación

Si deseas verificar la sintaxis de Python para comprobar la corrección del proceso de descompilación, añade la opción :code:--syntax-verify. Sin embargo, dado que la sintaxis de Python cambia. Deberías usar esta opción si el bytecode es el bytecode correcto para el intérprete de Python que comprobará la sintaxis.

También puedes comparar los resultados con otro descompilador de Python como unpyc37_ . Como funcionan de manera diferente, los errores de aquí a menudo no están en aquel, y viceversa.

Existe una clase interesante de estos programas que está fácilmente disponible para ofrecer una verificación más sólida: aquellos programas que, cuando se ejecutan, se prueban a sí mismos. Nuestro conjunto de pruebas los incluye.

Y Python incluye otro conjunto de programas similares: su suite de pruebas para la biblioteca estándar. Tenemos algo de código en :code:test/stdlib para facilitar también este tipo de comprobación.

Errores/Restricciones conocidos

Solo admitimos versiones publicadas, no versiones candidatas. Ten en cuenta, sin embargo, que el número mágico de una versión publicada suele ser el mismo que el de la última versión candidata anterior a la publicación.

Tampoco manejamos código de PJOrion_ ni código ofuscado de otro modo. Para PJOrion prueba: PJOrion Deobfuscator_ para descifrar el bytecode y obtener bytecode válido antes de usar esta herramienta; pydecipher_ podría ayudar con eso.

Este programa no puede descompilar archivos EXE de Microsoft Windows creados por Py2EXE_, aunque probablemente podamos descompilar el código después de que extraigas el bytecode correctamente. Pydeinstaller <https://github.com/charles-dyfis-net/pydeinstaller>_ puede ayudar a desempaquetar los bundles de Pyinstaller.

El manejo de listas patológicamente largas de expresiones o sentencias es lento. No manejamos Cython_ ni MicroPython, que no usan bytecode.

Hay numerosos errores en la descompilación. Y eso es cierto para todos los demás descompiladores de CPython que he encontrado, incluso los que afirmaban ser "perfectos" en alguna versión concreta como la 2.4.

A medida que Python avanza, la descompilación también se vuelve más difícil porque la compilación es más sofisticada y el lenguaje en sí es más sofisticado. Sospecho que habrá menos intentos ad-hoc como unpyc37_ (que está basado en un descompilador de 3.3) simplemente porque es más difícil hacerlo. La buena noticia, al menos desde mi punto de vista, es que creo que entiendo lo que se necesita para abordar los problemas de una manera más robusta. Pero ahora mismo, hasta que el proyecto esté mejor financiado, no tengo intención de hacer un esfuerzo serio para soportar Python 3.8 o 3.9, incluidos los errores que puedan surgir. Imagino que en algún momento podría interesarme.

Puedes encontrar errores fácilmente ejecutando las pruebas contra el conjunto de pruebas estándar que Python usa para comprobarse a sí mismo. En cualquier momento, hay docenas de problemas conocidos que están bastante bien aislados y que podrían resolverse si alguien dedicara el tiempo necesario. El problema es que no hay muchas personas trabajando en la corrección de errores.

Puede que te encuentres con un error que quieras informar. Por favor, hazlo. Pero ten en cuenta que puede que no reciba mi atención durante un tiempo. Si patrocinas o apoyas el proyecto de alguna manera, priorizaré tus incidencias por encima de la cola de otras cosas que podría estar haciendo. En situaciones raras, puedo hacer una descompilación manual de bytecode por una tarifa. Sin embargo, esto es caro, normalmente más de lo que la mayoría de la gente está dispuesta a gastar.

Véase también

  • https://github.com/andrew-tavera/unpyc37/ : fork indirecto de https://code.google.com/archive/p/unpyc3/ Los proyectos anteriores usan una técnica de descompilación diferente a la que se usa aquí. Las instrucciones se recorren. Algunas instrucciones usan la pila para generar cadenas, mientras que otras no. Debido a que el flujo de control no se aborda directamente, también sufre los mismos problemas que los diversos programas uncompyle y decompyle.
  • https://github.com/rocky/python-xdis : Desensamblador para múltiples versiones de Python
  • https://github.com/rocky/python-xasm : Ensamblador para múltiples versiones de Python
  • https://github.com/rocky/python-decompile3/wiki : Documentos wiki que describen el código y sus aspectos con más detalle

.. |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%D0%B8-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8-%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

Descargar herramienta
https://circleci.com/gh/rocky/python-decompile3