
pyREtic è un framework estensibile per il reverse engineering del bytecode di Python 2.x in memoria
Rich Smith - [email protected]
L'ultima versione di pyREtic può essere trovata su: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic è un framework estensibile per assistere nell'esecuzione di vari compiti di reverse engineering per progetti in linguaggio Python.
Aiuta un reverse engineer a recuperare il codice sorgente (.py) dal bytecode (.pyc), in particolare quando il codice oggetto di reverse engineering ha fatto uno sforzo per impedire la decompilazione utilizzando strumenti standard.
È composto da 3 parti principali:
REpdb : Un superset incentrato sul RE delle funzionalità di pdb per consentire a un reverse engineer di interagire facilmente con il codice che sta analizzando.
OpcodeRemap : Il componente in grado di dedurre una nuova tabella di opcode da un runtime Python che ha modificato la disposizione degli opcode per confondere molti decompilatori Python standard.
LiveUnpyc : Un'estensione del progetto di decompilazione UnPyc di Dmitri Kornev http://unpyc.sourceforge.net/ che permette di decompilare oggetti Python vivi in memoria in codice sorgente Python tramite 3 metodi diversi.
Le capacità del toolkit pyREtic sono state scritte per essere efficaci contro le protezioni che la maggior parte degli sviluppatori Python closed source utilizzavano per proteggere il codice distribuito dalla lettura in forma sorgente.
L'output di pyREtic doveva produrre una rappresentazione in codice sorgente di un oggetto a cui si potesse accedere in un'istanza in esecuzione dell'applicazione target. Questa rappresentazione doveva essere sufficientemente buona per valutare la sicurezza dell'applicazione target, piuttosto che una copia assolutamente perfetta.
Un documento dettagliato con le istruzioni si trova nella directory docs/.
pyREtic è rilasciato sotto la GPLv3, che si trova nella directory docs/ o GPLv3.
Gli altri componenti utilizzati da pyREtic sono rilasciati sotto le proprie licenze:
UnPyc http://unpyc.sourceforge.net/ : Licenza BSD
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREtic è nato quando lavoravo presso Immunity Inc, ed è stato presentato per la prima volta pubblicamente alla conferenza BlackHat 2010 a Las Vegas, e poi al Defcon 17. Un articolo che accompagnava il suo rilascio si trova nella directory docs/.
Ora non lavoro più per Immunity, ma Dave Aitel è stato così gentile da permettermi di rilasciare il codice sotto GPL per consentire alle persone di accedervi e permettere che il suo sviluppo continui.
L'ultima versione del framework si trova su https://github.com/MyNameIsMeerkat/pyREtic.
Recentemente ho spostato il progetto in una nuova sede su GitHub a causa del rinnovato interesse da parte di alcuni nella comunità e rilascerò alcuni miglioramenti che fino ad ora non hanno mai visto la luce.
Le funzionalità che verranno aggiunte a pyREtic in futuro rifletteranno lo sviluppo delle mie esigenze per affrontare il reversing delle applicazioni Python in futuro. Se hai suggerimenti, però, fammi sapere.
##Dettagli tecnici
Per coloro interessati a maggiori dettagli tecnici su come pyREtic opera, si possono trovare nell'articolo pyREtic: In memory reverse engineering for obfuscated Python bytecode che si trova nella directory docs/, e una presentazione che lo discute può essere trovata su:
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010