Saltar al contenido

¿Se puede descompilar completamente el EXE generado por cx_freeze a un código Python legible?

Necesitamos tu ayuda para difundir nuestros artículos con relación a las ciencias informáticas.

Solución:

En general, no. CX Freeze y py2exe almacenan la versión PYC de su código, el código de bytes compilado a partir de los archivos PY. Actualmente, si no me equivoco, no hay descompiladores PYC viables que funcionen. Algunos le dan un código de bytes más o menos legible con anotaciones, pero ninguno le dará el código fuente real de Python. Entonces, en ese sentido, no, no se puede descompilar. También puede considerar usar la forma nativa completa y usar Shed Skin

Parece que la respuesta aceptada actual ya no es true.

Aquí se explica cómo recuperar el código fuente original de un proyecto congelado con cx_freeze.

Nota: se hace aquí en un proyecto “Hello world”, pero, usando el mismo método, he podido descompilar un código fuente de más de 1000 líneas de código de un proyecto mío congelado con cx_freeze¡y recupere casi el código fuente original!

1) Usa cx_freeze

Crear un test.py archivo que contiene

import time
print('hello')
time.sleep(2)
print('world')

Luego crea el ejecutable con

cxfreeze test.py --target-name=test.exe

Luego, por lo general, distribuirá esto a los usuarios finales:

ingrese la descripción de la imagen aquí

¡Ahora intentemos aplicar ingeniería inversa a esto!

#2) Obtenga el código de bytes .pyc

Abierto dist/lib/library.zip y extrae el archivo test__main__.pyc.

#3) Ahora usa decompyle6 para obtener el código fuente

import uncompyle6
with open('test_main_reverse_eng.py', 'w') as f:
    uncompyle6.decompile_file('test__main__.pyc', f)

#4) Sorpresa…

¡Aquí está el código fuente original!

# uncompyle6 version 3.7.1
# Python bytecode 3.7 (3394)
# Decompiled from: Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: test.py
# Compiled at: 2020-06-16 21:02:17
# Size of source mod 2**32: 58 bytes
import time
print('hello')
time.sleep(2)
print('world')

Te invitamos a asentar nuestra ocupación mostrando un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *