Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bug bounty tip: inscreva-se para Intigriti, uma plataforma de bug bounty premium criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
De um binário ELF compilado você pode obter o .pyc com:
Em um binário exe python compilado, você pode obter o .pyc executando:
Para os dados .pyc ("compilado" python), você deve começar tentando extrair o código python original:
Certifique-se de que o binário tem a extensão ".pyc" (se não, o uncompyle6 não vai funcionar)
Ao executar uncompyle6, você pode encontrar os seguintes erros:
Para corrigir isso, você precisa adicionar o número mágico correto no início do arquivo gerado.
Os números mágicos variam com a versão do python, para obter o número mágico do python 3.8 você precisará abrir um terminal python 3.8 e executar:
O número mágico neste caso para python3.8 é 0x550d0d0a
, então, para corrigir esse erro, você precisará adicionar no início do .pyc file os seguintes bytes: 0x0d550a0d000000000000000000000000
Uma vez que você tenha adicionado esse cabeçalho mágico, o erro deve ser corrigido.
Assim é como um .pyc python3.8 magic header corretamente adicionado deve parecer:
Outros erros como: class 'AssertionError'>; co_code deve ser um dos tipos (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); é do tipo <class 'NoneType'>
podem aparecer.
Isso provavelmente significa que você não adicionou corretamente o número mágico ou que você não usou o número mágico correto, então certifique-se de usar o correto (ou tente um novo).
Verifique a documentação do erro anterior.
A ferramenta python-exe-unpacker serve como uma combinação de várias ferramentas disponíveis na comunidade projetadas para ajudar pesquisadores a desempacotar e decompilar executáveis escritos em Python, especificamente aqueles criados com py2exe e pyinstaller. Inclui regras YARA para identificar se um executável é baseado em Python e confirma a ferramenta de criação.
Um problema comum encontrado envolve um arquivo de bytecode Python incompleto resultante do processo de desempacotamento com unpy2exe ou pyinstxtractor, que então não é reconhecido pelo uncompyle6 devido a um número de versão de bytecode Python ausente. Para resolver isso, uma opção de prepend foi adicionada, que anexa o número de versão de bytecode Python necessário, facilitando o processo de decompilação.
Exemplo do problema:
Se você não conseguiu extrair o código "original" do python seguindo os passos anteriores, então você pode tentar extrair a montagem (mas não é muito descritivo, então tente extrair novamente o código original). Em aqui eu encontrei um código muito simples para desmontar o binário .pyc (boa sorte entendendo o fluxo do código). Se o .pyc for do python2, use python2:
Para começar, vamos mostrar como os payloads podem ser compilados no py2exe e no PyInstaller.
Instale o pacote py2exe de http://www.py2exe.org/
Para o payload (neste caso, vamos nomeá-lo de hello.py), use um script como o da Figura 1. A opção “bundle_files” com o valor de 1 irá agrupar tudo, incluindo o interpretador Python, em um único exe.
Uma vez que o script esteja pronto, emitiremos o comando “python setup.py py2exe”. Isso criará o executável, assim como na Figura 2.
Instale o PyInstaller usando pip (pip install pyinstaller).
Depois disso, emitiremos o comando “pyinstaller –onefile hello.py” (um lembrete de que ‘hello.py’ é nosso payload). Isso irá agrupar tudo em um único executável.
Dica de bug bounty: inscreva-se na Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)