È possibile decompilare un file .pyc compilato in un file .py?


Risposte:


169

Uncompyle6 funziona con Python 3.xe 2.7 - opzione consigliata in quanto è lo strumento più recente, con l'obiettivo di unificare le forcelle precedenti e concentrarsi sui test automatici delle unità. La pagina GitHub contiene maggiori dettagli.

  • se usi Python 3.7+, puoi anche provare a decompilare3 , un fork di Uncompyle6 focalizzato su 3.7 e versioni successive.
  • sollevare problemi GitHub su questi progetti, se necessario, entrambi eseguono suite di unit test su una gamma di versioni di Python

Il vecchio Uncompyle2 supporta solo Python 2.7. Questo ha funzionato bene per me qualche tempo fa per decompilare il bytecode .pyc in .py, mentre unpyclib si è bloccato con un'eccezione.

Con tutti questi strumenti, puoi recuperare il tuo codice includendo i nomi delle variabili, ma senza i commenti.


7
Molte grazie. Ho accidentalmente cancellato il mio file .py invece di .pyc. Questo mi ha salvato dal doverlo riscrivere da zero.
avmohan,

21
Per quelli di voi qui perché avete cancellato accidentalmente il file sbagliato, consiglio vivamente il controllo del codice sorgente!
Andrew Palmer,

30

Sì, puoi ottenerlo con unpyclibquello che puoi trovare su Pypi .

$ pip install unpyclib

Quindi puoi decompilare il tuo file .pyc

$ python -m unpyclib.application -Dq path/to/file.pyc

20
L'ho provato e si è bloccato con un'eccezione, su un file abbastanza piccolo senza codice complesso (Django settings.py) - invece uncompyle2 ha funzionato bene. -1 per quel motivo.
RichVel,

9
Si è bloccato in Python 3.6 in lib \ site-pacchetti \ unpyclib \ applcation.py con print __copyright- perché usa la versione Python 2.7 printsenza parentesi?
David Ching,

1
unpyclibLa prima e ultima versione di @DavidChing è stata nel 2009 , si può dire che è solo un programma Python 2.
Boris,

28

Puoi provare Easy Python Decompiler . Si basa su Decompyle ++ e Uncompyle2. Supporta la decompilazione di Python versioni 1.0-3.3

Nota: sono l'autore dello strumento sopra.


5
Fa il suo lavoro. Buon lavoro. A proposito, hai scritto questo strumento in Python?
shinzou,

1
Ha funzionato bene per me (facile trascinamento della selezione). È vero che una distribuzione Linux sarebbe carina, ma non è poi così difficile aprire una finestra di Windows.
Brian Jackson,

Ultima versione nel 2015 e sembra chiusa?
Boris


4

.

Uso decompilare uncompyle6 (supporto anche l'ultimo Python 3.8.0):

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

e l'origine python e il confronto python decompilato si presentano così:

utilycompilare pyc

quindi puoi vedere, quasi lo stesso, l'effetto di decompilazione è MOLTO BUONO .


3

Sì, è possibile.

Esiste un perfetto decompilatore open-source Python (.PYC), chiamato Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ mira a tradurre nuovamente il codice byte Python compilato in codice sorgente Python valido e leggibile dall'uomo. Mentre altri progetti hanno raggiunto questo obiettivo con vari successi, Decompyle ++ è unico in quanto cerca di supportare il codice byte da qualsiasi versione di Python.


2
Mentre pycdc è buono, non è perfetto. Se guardi github.com/zrax/pycdc/issues ci sono oltre 50 tipi individuali di problemi che ha nella decompilazione. Questo è tuttavia distribuito su circa 16 versioni di Python e sia la lingua che il codice sono cambiati drasticamente. Potrebbe essere che per le cose che hai provato non sei stato in grado di trovare un problema. Tuttavia, a mio avviso, per classificare qualcosa come "perfetto", si dovrebbe dire l'intera libreria Python per ogni versione, decompilarla e farla superare correttamente i propri test. Nessun decompilatore può ancora farlo.
roccioso

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.