É possível descompilar um arquivo .pyc compilado em um arquivo .py?


Respostas:


169

O Uncompyle6 funciona para o Python 3.xe 2.7 - opção recomendada, pois é a ferramenta mais recente, com o objetivo de unificar os garfos anteriores e se concentrar nos testes de unidade automatizados. A página do GitHub tem mais detalhes.

  • se você usa o Python 3.7+, também pode tentar descompilar3 , um fork do Uncompyle6 com foco no 3.7 e superior.
  • levantam problemas do GitHub nesses projetos, se necessário - ambos executam suítes de teste de unidade em várias versões do Python

O Uncompyle2 mais antigo suporta apenas Python 2.7. Isso funcionou bem para mim há algum tempo para descompilar o bytecode .pyc em .py, enquanto o unpyclib travou com uma exceção.

Com todas essas ferramentas, você recebe seu código de volta, incluindo nomes de variáveis, mas sem os comentários.


7
Muito obrigado. Eu excluí acidentalmente meu arquivo .py em vez de .pyc. Isso me salvou de ter que reescrevê-lo do zero.
avmohan

20
Para aqueles de vocês aqui porque você acidentalmente apagou o arquivo errado, eu altamente recomendo o controle de origem!
Andrew Palmer

30

Sim, você pode obtê-lo com o unpyclibque pode ser encontrado no pypi .

$ pip install unpyclib

Do que você pode descompilar o arquivo .pyc

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

20
Eu tentei isso e ele travou com uma exceção, em um arquivo muito pequeno, sem código complexo (Django settings.py) - o uncompyle2 funcionou bem. -1 por esse motivo.
RichVel 11/02

9
Ele travou no Python 3.6 em lib \ site-packages \ unpyclib \ applcation.py com print __copyright- por que está usando a versão Python 2.7 printsem parênteses?
David Ching

1
unpyclibA primeira e última versão do @DavidChing foi em 2009 , é seguro dizer que é apenas um programa em Python 2.
Boris

28

Você pode tentar o Easy Python Decompiler . É baseado em Decompyle ++ e Uncompyle2. Ele suporta a descompilação das versões python 1.0-3.3

Nota: Eu sou o autor da ferramenta acima.


5
Ele faz o seu trabalho. Bom trabalho. BTW, você escreveu esta ferramenta em python?
Shinzou

1
Funcionou bem para mim (fácil arrastar e soltar). É verdade que uma distribuição Linux seria legal, mas não é tão difícil abrir uma caixa de janelas.
Brian Jackson

Última versão em 2015 e parece que é de código fechado?
Boris


4

Sim .

Eu uso o decompile uncompyle6 (até mesmo suporte ao Python 3.8.0):

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

e o python de origem e o python descompilado comparando ficam assim:

utilitários de compactação pyc

para que você possa ver, QUASE o mesmo, o efeito de descompilação é MUITO BOM .


3

Sim, é possível.

Existe um perfeito descompilador Python de código aberto (.PYC), chamado Decompyle ++ https://github.com/zrax/pycdc/

O Decompyle ++ visa converter o código de bytes Python compilado de volta em código-fonte Python válido e legível por humanos. Embora outros projetos tenham conseguido isso com sucesso variado, o Decompyle ++ é único, pois procura oferecer suporte a código de bytes de qualquer versão do Python.


2
Embora o pycdc seja bom, não é perfeito. Se você olhar em github.com/zrax/pycdc/issues, existem mais de 50 tipos individuais de problemas na descompilação. No entanto, isso está espalhado pelas 16 ou mais versões do python, e a linguagem e o código mudaram drasticamente. Pode ser que, nas coisas que você tentou, não tenha conseguido encontrar um problema. No entanto, na minha opinião, para classificar algo como "perfeito", seria necessário, digamos, toda a biblioteca Python para cada versão, descompilar e passar nos próprios testes corretamente. Nenhum decompilador pode fazer isso ainda.
rochoso

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.