
Einfach umrüstbarer und hackbarer interaktiver Disassembler mit IDAPython-kompatibler Plugin-API
ScratchABit ist ein interaktiver inkrementeller Disassembler mit Daten-/Kontrollflussanalyse-Funktionen. ScratchABit ist den Bemühungen der OpenSource Reverse Engineering Community gewidmet (Reverse Engineering, um OpenSource-Treiber/Firmware für Hardware zu erstellen, die von Herstellern nicht ordnungsgemäß unterstützt wird, für Hardware- und Software-Interoperabilität sowie für Sicherheitsforschung).
ScratchABit unterstützt die in der Community bekannte IDAPython-API zum Schreiben von Disassemblierungs-/Erweiterungsmodulen.
ScratchABit befindet sich in der Entwicklung, Funktionen werden nach Bedarf hinzugefügt, Beiträge sind willkommen.
ScratchABit wird unter den Bedingungen der GNU General Public License v3 (GPLv3) veröffentlicht.
Sollte nicht in einer obfuskierten Sprache geschrieben sein. Dazu gehören Sprachen, die zu niedrigstufig sind, den Zugriff auf nicht initialisierte Variablen erlauben, nicht zwischen Variablen und Funktionen/Prozeduren unterscheiden, Array-Indizes von willkürlichen Zahlen starten usw. ScratchABit ist in Python (moderne Version, Python3) geschrieben, zu Ihrem Vergnügen und Ihrer geistigen Gesundheit.
Das Benutzeroberflächen-Framework sollte Benutzerinteraktion auf dem erforderlichen Niveau ermöglichen, keine Abhängigkeiten, Aufblähung, Probleme oder Inkompatibilitäten zwischen Framework-Versionen hinzufügen. ScratchABit verwendet derzeit eine einfache Vollbild-Textbenutzeroberfläche mit ANSI/VT100-Terminal-Escape-Sequenzen (ja, selbst die curses-Bibliothek wurde als zu aufgeblähte Abhängigkeit angesehen, um sie den Benutzern aufzuzwingen).
Sollte einfach zu verwendende Textformate nutzen, um die "Datenbank" zu speichern, um die Wiederverwendung und das Erstellen von Tools sowie die Speicherung in Versionskontrollsystemen zu erleichtern.
Um ScratchABit zu verwenden, benötigen Sie Python3 (getestet mit Python 3.3 bis 3.7) und ein VT100- (Minimum) oder XTerm- (empfohlen) Terminal oder Terminalemulator (jedes Unix-System sollte kompatibel sein, z.B. Linux/BSD usw., siehe FAQ unten für weitere Informationen).
Klonen Sie den Code mit:
git clone --recursive https://github.com/pfalcon/ScratchABit
Wenn Sie den Code ohne --recursive geklont haben, führen Sie git submodule update --init im ScratchABit-Verzeichnis aus.
ScratchABit enthält jetzt Capstone Engine-basierte CPU-Plugins, die Zugriff auf eine Reihe von CPU-Architekturen ermöglichen. Um sie zu nutzen, sollte das aktuelle Python-Bindungsmodul für Capstone installiert sein (vorzugsweise gegenüber Paketen, die von Betriebssystem-Distributionen bereitgestellt werden, die oft veraltet sind). Der einfachste Weg, es zu installieren, ist in das Python-Benutzerpaketverzeichnis:
pip3 install --no-cache-dir --user capstone
Eine Alternative ist die Installation in eine Python virtuelle Umgebung innerhalb des ScratchABit-Verzeichnisses:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Wenn Sie eine neue Terminalsitzung für die Arbeit mit ScratchABit öffnen, führen Sie den Befehl source .venv/bin/activate erneut aus, um die virtuelle Umgebung zu aktivieren.
Wenn nichts davon funktioniert, können Sie versuchen, das Capstone-Paket systemweit zu installieren (nicht empfohlen):
sudo pip3 install --system capstone
Wenn Sie eine Datei in einem selbsterklärenden ausführbaren Format (wie ELF) disassemblieren möchten, übergeben Sie sie einfach als Argument an ScratchABit.py. Das Repository enthält mehrere example-*.elf-Dateien für verschiedene Architekturen für einen schnellen Start. Um zum Beispiel die x86 32-Bit-Version auszuprobieren:
python3 ScratchABit.py example-x86_32.elf
Alternativ, wenn Sie eine rohe Binärdatei disassemblieren möchten, müssen Sie eine .def (Definitions-)Datei erstellen, um anzugeben, welche Speicherbereiche für den Code definiert sind, unter welcher Adresse die Binärdatei geladen wird usw. (Hinweis: Eine .def-Datei kann auch für .elf und ähnliche Dateien nützlich sein.) Das Repository enthält einen einfachen rohen x86_64-Binärcode und die entsprechende example-x86_64.def-Datei (sehen Sie hinein für eine Beschreibung der verfügbaren Optionen):
python3 ScratchABit.py example-x86_64.def
Drücken Sie F9, um auf Menüs zuzugreifen (die Maus funktioniert auch in XTerm-kompatiblen Terminals). Drücken Sie F1, um Hilfe zu Tastenkombinationen zu erhalten (die meisten Aktionen sind auch über das Menü zugänglich). Der Arbeitsablauf von ScratchABit ähnelt anderen interaktiven Disassemblern (vorherige Erfahrung oder Hintergrundlektüre kann hilfreich sein).
IDAPython-Prozessor-Plugins können von überall im Python-Modulpfad geladen werden. Alternativ können Sie die Plugin-.py-Datei(en) in das Unterverzeichnis plugins/cpu/ verlinken oder kopieren.
Nachdem das Plugin verfügbar gemacht wurde, erstellen Sie eine neue Definitionsdatei basierend auf example-x86_64.def, die den Plugin-Modulnamen (ohne .py-Erweiterung) in der Zeile cpu xxx setzt.
Für ein sehr einfaches Beispiel, das ein externes Plugin verwendet, siehe diese esp8266.def-Datei, die mit dem xtensa.py-Plugin aus dem ida-xtensa2-Repository arbeitet.
F: Welche Prozessoren/Architekturen werden unterstützt?
A: ScratchABit unterstützt von sich aus keine Prozessorarchitekturen, es ist vollständig über IDAPython-API-Plugins umrüstbar. Viele Plugins sind verfügbar, das Schreiben eines neuen Plugins ist einfach. Um Benutzern ein Testen von ScratchABit zu ermöglichen, ist ein einfaches x86-Prozessor-Plugin im Lieferumfang enthalten, das den Pymsasid-Disassembler im Hintergrund verwendet.
Ab Version 2.0 ist auch ein Capstone-Plugin enthalten, das Zugriff auf eine Reihe von Architekturen ermöglicht, darunter x86, ARM, MIPS, PowerPC, SPARC usw. (Die Architekturunterstützung wird schrittweise basierend auf Benutzertests aktiviert.)
Sie können mehr über die mit ScratchABit ausgelieferten Plugins im README für das Verzeichnis plugins/cpu/ lesen.
F: Debugger?
A: ScratchABit widmet sich der statischen Analyse und der einfachen Unterstützung neuer CPU-Architekturen (einfach ein neues CPU-Plugin in Python programmieren – Sie können in wenigen Stunden erste Ergebnisse erzielen). Dynamische Analyse war nicht als Kernfunktion konzipiert, und es gibt keine unmittelbaren Pläne, sie zu implementieren. Patches sind jedoch willkommen.
F: Decompiler?
A: Es gibt ein verwandtes Projekt namens ScratchABlock für tiefgehende Programmanalyse, -transformation und -dekompilierung. Es wird erwartet, dass mit der Reife von ScratchABlock einige seiner Funktionen innerhalb von ScratchABit verfügbar sein werden (vielleicht über Plugins).
F: Ich bin nicht unter Linux, wie kann ich ScratchABit ausführen?
A: Installieren Sie Linux in einem Emulator/VM auf Ihrem System und freuen Sie sich.
F: Pflicht-Screenshot?
A: Sicher:
