
pyREtic ist ein erweiterbares Framework für das In-Memory-Reverse-Engineering von Python 2.x-Bytecode.
Rich Smith - [email protected]
Die neueste Version von pyREtic finden Sie unter: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic ist ein erweiterbares Framework, das bei verschiedenen Reverse-Engineering-Aufgaben für Python-Projekte hilft.
Es unterstützt einen Reverse Engineer dabei, Quellcode (.py-Dateien) aus Bytecode (.pyc-Dateien) zurückzugewinnen, insbesondere dann, wenn der zu analysierende Code Maßnahmen ergriffen hat, um die Dekompilierung mit Standardwerkzeugen zu erschweren.
Es besteht aus 3 Hauptteilen:
REpdb : Ein RE-zentrierter Supersatz der pdb-Funktionalität, der einem Reverse Engineer die einfache Interaktion mit dem zu analysierenden Code ermöglicht.
OpcodeRemap : Die Komponente, die in der Lage ist, eine neue Opcode-Tabelle aus einer Python-Laufzeitumgebung abzuleiten, deren Opcode-Layout geändert wurde, um viele Standard-Python-Dekompilierer zu verwirren.
LiveUnpyc : Eine Erweiterung von Dmitri Kornevs UnPyc-Dekompilierer-Projekt http://unpyc.sourceforge.net/, die es ermöglicht, live Python-Objekte im Speicher über 3 verschiedene Methoden zurück in Python-Quellcode zu dekompilieren.
Die Fähigkeiten innerhalb des pyREtic-Toolkits wurden entwickelt, um gegen die Schutzmaßnahmen wirksam zu sein, die die meisten Closed-Source-Python-Entwickler einsetzten, um den von ihnen verteilten Code vor dem Lesen in seiner Quellform zu schützen.
Die Ausgabe von pyREtic sollte eine Quellcode-Darstellung eines Objekts erzeugen, auf das man in einer laufenden Instanz der Zielanwendung zugreifen konnte. Diese Darstellung musste nur gut genug sein, um die Sicherheit der Zielanwendung bewerten zu können, anstatt eine absolut perfekte Kopie zu sein.
Ein detailliertes Anleitungsdokument finden Sie im Verzeichnis docs/.
pyREtic wird unter der GPLv3 veröffentlicht, die im Verzeichnis docs/ oder unter GPLv3 zu finden ist.
Andere Komponenten, die pyREtic verwendet, werden unter ihren eigenen Lizenzen veröffentlicht:
UnPyc http://unpyc.sourceforge.net/ : BSD-Lizenz
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREtic entstand, als ich bei Immunity Inc. arbeitete, und wurde erstmals auf der BlackHat 2010 Konferenz in Las Vegas und dann auf der Defcon 17 öffentlich vorgestellt. Ein Papier, das seine Veröffentlichung begleitete, finden Sie im Verzeichnis docs/.
Ich bin jetzt nicht mehr bei Immunity angestellt, aber Dave Aitel war so freundlich, mir zu erlauben, den Code unter der GPL zu veröffentlichen, damit die Leute darauf zugreifen und seine Entwicklung fortsetzen können.
Die neueste Version des Frameworks finden Sie unter https://github.com/MyNameIsMeerkat/pyREtic.
Ich habe das Projekt kürzlich aufgrund des erneuten Interesses einiger aus der Community auf eine neue Heimat auf GitHub umgezogen und werde einige Verbesserungen veröffentlichen, die bis jetzt nie das Licht der Welt erblickt haben.
Die Funktionen, die pyREtic in Zukunft hinzugefügt werden, werden die Entwicklung meiner Bedürfnisse im Umgang mit dem Reversing von Python-Anwendungen widerspiegeln. Wenn Sie jedoch Vorschläge haben, lassen Sie es mich wissen.
##Technische Details
Für diejenigen, die mehr über die technischen Details erfahren möchten, wie pyREtic funktioniert, finden Sie diese im Papier pyREtic: In memory reverse engineering for obfuscated Python bytecode im Verzeichnis docs/, und eine Präsentation dazu finden Sie unter:
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010