
pyREtic es un framework extensible para ingeniería inversa de bytecode de Python 2.x en memoria.
Rich Smith - [email protected]
La última versión de pyREtic se encuentra en: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic es un marco extensible diseñado para ayudar en la realización de diversas tareas de ingeniería inversa para proyectos en el lenguaje Python.
Ayuda a un ingeniero inverso a recuperar el código fuente (.py) a partir del bytecode (.pyc), en particular cuando el código que se está invirtiendo ha hecho algún esfuerzo para evitar la descompilación utilizando herramientas estándar.
Consta de 3 partes principales:
REpdb : Un superconjunto centrado en la ingeniería inversa de la funcionalidad de pdb que permite la interacción sencilla de un reversor con el código que está invirtiendo.
OpcodeRemap : El componente capaz de deducir una nueva tabla de códigos de operación a partir de un runtime de Python que ha cambiado su diseño de códigos de operación para confundir a muchos descompiladores estándar de Python.
LiveUnpyc : Una extensión del proyecto de descompilador UnPyc de Dmitri Kornev http://unpyc.sourceforge.net/ que permite descompilar objetos vivos de Python en memoria de nuevo a código fuente de Python mediante 3 métodos diferentes.
Las capacidades del conjunto de herramientas pyREtic fueron escritas para ser efectivas contra las protecciones que la mayoría de los desarrolladores de Python de código cerrado estaban utilizando para proteger el código que distribuían de ser leído en su forma fuente.
El resultado de pyREtic era producir una representación del código fuente de un objeto al que se pudiera acceder en una instancia en ejecución de la aplicación objetivo. Esta representación solo necesitaba ser lo suficientemente buena para poder evaluar la seguridad de la aplicación objetivo, en lugar de ser una copia absolutamente perfecta.
Se puede encontrar un documento detallado de instrucciones en el directorio docs/.
pyREtic se publica bajo la GPLv3, que se puede encontrar en el directorio docs/ o en GPLv3.
Otros componentes que utiliza pyREtic se publican bajo sus propias licencias:
UnPyc http://unpyc.sourceforge.net/ : Licencia BSD
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREtic comenzó su vida cuando trabajaba en Immunity Inc, y se presentó públicamente por primera vez en la conferencia BlackHat 2010 en Las Vegas, y luego en Defcon 17. Un documento que acompañó su publicación se puede encontrar en el directorio docs/
Ya no trabajo para Immunity, pero Dave Aitel fue lo suficientemente amable como para permitirme publicar el código bajo la GPL para que la gente pueda acceder a él y permitir que su desarrollo continúe.
La última versión del marco se puede encontrar en https://github.com/MyNameIsMeerkat/pyREtic.
Recientemente trasladé el proyecto a un nuevo hogar en GitHub debido al renovado interés de algunos en la comunidad y lanzaré algunas mejoras que hasta ahora nunca vieron la luz.
Las características que se agregarán a pyREtic en el futuro reflejarán el desarrollo de mis necesidades para tratar con la inversión de aplicaciones Python en el futuro. Si tienes sugerencias, házmelo saber.
Para aquellos interesados en más detalles técnicos de cómo pyREtic hace las cosas, se pueden encontrar en el documento pyREtic: In memory reverse engineering for obfuscated Python bytecode que está en el directorio docs/, y una presentación que lo discute se puede encontrar en:
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010