
pyREtic est un framework extensible pour le rétro-ingénierie de bytecode Python 2.x en mémoire.
Rich Smith - [email protected]
La dernière version de pyREtic se trouve à : https://github.com/MyNameIsMeerkat/pyREtic
pyREtic est un framework extensible conçu pour aider à effectuer diverses tâches de rétro-ingénierie pour des projets en langage Python.
Il aide un ingénieur inverse à récupérer le code source (.py) à partir du bytecode (.pyc), en particulier lorsque le code qui est en cours de rétro-ingénierie a fait des efforts pour empêcher la décompilation à l'aide d'outils standards.
Il se compose de 3 parties principales :
REpdb : Un sur-ensemble centré sur la rétro-ingénierie des fonctionnalités de pdb permettant à un reverser d'interagir facilement avec le code qu'il est en train de reverser.
OpcodeRemap : Le composant capable de déduire une nouvelle table d'opcodes à partir d'un runtime Python qui a modifié sa disposition d'opcodes afin de perturber de nombreux décompilateurs Python standards.
LiveUnpyc : Une extension du projet de décompilateur UnPyc de Dmitri Kornev http://unpyc.sourceforge.net/ qui permet de décompiler des objets Python vivants en mémoire vers du code source Python via 3 méthodes différentes.
Les capacités de la boîte à outils pyREtic ont été écrites pour être efficaces contre les protections qu'une majorité de développeurs Python en code source fermé utilisaient pour protéger le code qu'ils distribuaient afin qu'il ne soit pas lu sous forme source.
Le résultat de pyREtic était de produire une représentation en code source d'un objet auquel vous pouviez accéder dans une instance en cours de l'application cible. Cette représentation devait seulement être suffisamment bonne pour pouvoir évaluer la sécurité de l'application cible plutôt que d'en être une copie parfaitement exacte.
Un document détaillé d'utilisation se trouve dans le répertoire docs/.
pyREtic est publié sous la licence GPLv3 qui se trouve dans le répertoire docs/ ou à GPLv3.
Les autres composants utilisés par pyREtic sont publiés sous leurs propres licences :
UnPyc http://unpyc.sourceforge.net/ : Licence BSD
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREtic a vu le jour lorsque je travaillais chez Immunity Inc, et a été présenté pour la première fois en public à la conférence BlackHat 2010 à Las Vegas, puis à Defcon 17. Un document accompagnant sa sortie se trouve dans le répertoire docs/.
Je ne suis plus employé par Immunity maintenant, mais Dave Aitel a eu la gentillesse de me permettre de publier le code sous GPL pour permettre aux gens d'y accéder et de poursuivre son développement.
La dernière version du framework se trouve à https://github.com/MyNameIsMeerkat/pyREtic.
J'ai récemment déplacé le projet vers un nouveau domicile sur GitHub en raison d'un regain d'intérêt de certains membres de la communauté et je vais publier quelques améliorations qui n'avaient jamais vu le jour jusqu'à présent.
Les fonctionnalités qui seront ajoutées à pyREtic à l'avenir refléteront l'évolution de mes besoins pour traiter la rétro-ingénierie des applications Python. Si vous avez des suggestions, faites-le moi savoir.
Pour ceux qui souhaitent en savoir plus sur les aspects techniques de la façon dont pyREtic fonctionne, vous pouvez consulter le document pyREtic: In memory reverse engineering for obfuscated Python bytecode qui se trouve dans le répertoire docs/, et une présentation le discutant se trouve à :
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010