Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Last updated
Last updated
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Suggerimento bug bounty: iscriviti a Intigriti, una premium piattaforma di bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi, e inizia a guadagnare ricompense fino a $100,000!
Da un binario compilato ELF puoi ottenere il .pyc con:
In un eseguibile binario python compilato puoi ottenere il .pyc eseguendo:
Per i dati .pyc ("compilato" python) dovresti iniziare a provare a estrarre il codice python originale:
Assicurati che il file binario abbia l'estensione ".pyc" (in caso contrario, uncompyle6 non funzionerà)
Durante l'esecuzione di uncompyle6 potresti trovare i seguenti errori:
Per risolvere questo problema è necessario aggiungere il numero magico corretto all'inizio del file generato.
I numeri magici variano con la versione di python, per ottenere il numero magico di python 3.8 è necessario aprire un terminale python 3.8 ed eseguire:
Il numero magico in questo caso per python3.8 è 0x550d0d0a
, quindi, per risolvere questo errore dovrai aggiungere all'inizio del file .pyc i seguenti byte: 0x0d550a0d000000000000000000000000
Una volta che hai aggiunto quell'intestazione magica, l'errore dovrebbe essere risolto.
Ecco come apparirà correttamente un'intestazione magica .pyc python3.8 aggiunta:
Altri errori come: class 'AssertionError'>; co_code dovrebbe essere uno dei tipi (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); è di tipo <class 'NoneType'>
possono apparire.
Questo probabilmente significa che non hai aggiunto correttamente il numero magico o che non hai utilizzato il numero magico corretto, quindi assicurati di utilizzare quello corretto (o prova uno nuovo).
Controlla la documentazione degli errori precedenti.
Il tool python-exe-unpacker funge da combinazione di diversi strumenti disponibili nella comunità progettati per assistere i ricercatori nello smontaggio e nella decompilazione di eseguibili scritti in Python, specificamente quelli creati con py2exe e pyinstaller. Include regole YARA per identificare se un eseguibile è basato su Python e conferma lo strumento di creazione.
Un problema comune riscontrato riguarda un file di bytecode Python incompleto risultante dal processo di smontaggio con unpy2exe o pyinstxtractor, che poi non viene riconosciuto da uncompyle6 a causa di un numero di versione di bytecode Python mancante. Per affrontare questo problema, è stata aggiunta un'opzione di prepending, che aggiunge il numero di versione di bytecode Python necessario, facilitando il processo di decompilazione.
Esempio del problema:
Se non sei riuscito a estrarre il codice "originale" di python seguendo i passaggi precedenti, allora puoi provare a estrarre l'assembly (ma non è molto descrittivo, quindi prova a estrarre di nuovo il codice originale). In qui ho trovato un codice molto semplice per disassemblare il binario .pyc (buona fortuna a capire il flusso del codice). Se il .pyc è di python2, usa python2:
Per iniziare, ti mostreremo come i payload possono essere compilati in py2exe e PyInstaller.
Installa il pacchetto py2exe da http://www.py2exe.org/
Per il payload (in questo caso, lo chiameremo hello.py), utilizza uno script simile a quello nella Figura 1. L'opzione “bundle_files” con il valore di 1 raggrupperà tutto, incluso l'interprete Python, in un unico exe.
Una volta che lo script è pronto, emetteremo il comando “python setup.py py2exe”. Questo creerà l'eseguibile, proprio come nella Figura 2.
Installa PyInstaller usando pip (pip install pyinstaller).
Dopo di che, emetteremo il comando “pyinstaller –onefile hello.py” (un promemoria che ‘hello.py’ è il nostro payload). Questo raggrupperà tutto in un unico eseguibile.
Suggerimento per il bug bounty: iscriviti a Intigriti, una premium bug bounty platform creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi, e inizia a guadagnare bounty fino a $100,000!
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)