Wenn Ihr Schnappschuss also von einer einigermaßen modernen Version produziert wurde, wird sie wahrscheinlich [nicht richtig] analysieren. Wenn Sie jedoch versuchen möchten, benötigen Sie wahrscheinlich mindestens das Fix in #3.
darter ist ein Python -Modul, das die Daten in einem Dart -Snapshot vollständig analysieren kann (dh die libapp.so -Datei in einer Release -Flutter -App).
Merkmale:
app.so oder .snapshot -Dateien automatisch.Beispiele dafür, was Sie mit den analysierten Informationen tun können:
HINWEIS: Denken Sie daran, dass dies zum Parsen binärer (dh architekturabhängiger) Schnappschüsse gedacht ist. .dill -Dateien und einige .snapshot -Dateien enthalten Kernel AST, was ein völlig anderes Format ist und derzeit nicht von darter unterstützt wird. [Mehr lernen]
Der größte Teil des Codes ist mit Ausnahme:
parse_elf_snapshot(...) erfordert Pyelftools
Das darter.asm -Modul (zur Analyse des zusammengesetzten Code) erfordert Capstone (und seine Python -Bindung)
darter an sich ist nur ein Modul, es hat kein eigenständiges Programm oder keine CLI.
Die empfohlene Möglichkeit, dies zu verwenden, besteht darin, es in ein Notizbuch aufzunehmen und mit den analysierten Daten zu spielen.
Installieren Sie Jupyter und öffnen Sie das 1-introduction Notizbuch für eine grundlegende Vorgehensweise der analysierten Daten. Gehen Sie dann zum 2-playground , der interessantere Beispiele für die Verwendung enthält.
Es ist dringend zu empfehlen, dass Sie zuerst mit einem bekannten Schnappschuss spielen (dh, dass Sie sich selbst erstellt oder den Code haben), bevor Sie den Snapshot analysieren, nach dem Sie suchen.
Der Parser befindet sich noch in einem frühen Stadium und funktioniert in jedem Fall nicht.
Dieser Parser wurde auf DART-SDK unter 1ef83b86ae geschrieben. Das Snapshot -Format ist für die VM intern. Es entpackt einige Objekte, wie sie im Gedächtnis erscheinen. Sie müssen wissen, wie die VM (Bogen, Kompilierflaggen) zusammengestellt wurde, um sie zu analysieren. Es kann sich zwischen den Versionen häufig ändern, da es keine Standardspezifikation (AFAIK) für das Format gibt.
Alle Hilfe oder Spenden sind willkommen.
Bei einem Datenabschnitt und einem Anweisungsabschnitt (und optional eine Basis ):
OneByteString , CodeSourceMap , Instructions usw.).Die Informationen werden so viel wie möglich analysiert, so dass es leicht zu manipulieren ist. Auch Rückenreferenzen werden verfolgt, so dass es leicht zu wissen ist, wohin ein bestimmtes Objekt verwiesen wird.
darter kann beide 'VM' Snapshots und 'isolieren' analysieren (diejenigen, die uns wichtig sind).
Das darter.asm -Modul zerlegt den kompilierten Code und analysiert ihn. Dies ist für AOT-Schnappschüsse von entscheidender Bedeutung, da wir keinen Bytecode auf hoher Ebene erhalten.
Wenn Sie bei Dart/Flutter Reverse-Engineering neu sind, ist es eine gute Idee, diese Einführung zuerst zu lesen: https://mrale.ph/dartvm/
Der relevante Code in der Snapshot -Serialisierung findet bei runtime/vm/clustered_snapshot.cc und runtime/vm/raw_object.h .
Es gibt auch zusätzliche Informationen im info -Verzeichnis.