ScratchABit ist ein interaktiver inkrementeller Disassembler mit Funktionen zur Daten-/Kontrollflussanalyse. ScratchABit widmet sich den Bemühungen der OpenSource-Reverse-Engineering-Community (Reverse-Engineering zur Erstellung von OpenSource-Treibern/Firmware für Hardware, die von den Anbietern nicht ordnungsgemäß unterstützt wird, für Hardware- und Software-Interoperabilität, für Sicherheitsforschung).
ScratchABit unterstützt die in der Community bekannte IDAPython-API zum Schreiben von Disassemblierungs-/Erweiterungsmodulen.
ScratchABit ist in Arbeit, 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 verschleierten Sprache verfasst sein. Dazu gehören Sprachen, die zu niedrig sind, die den Zugriff auf nicht initialisierte Variablen ermöglichen, die nicht zwischen Variablen und Funktionen/Prozeduren unterscheiden, die Array-Indizes aus beliebigen Zahlen starten usw. usw. ScratchABit ist in Python geschrieben ( moderne Version, Python3) zu Ihrem Vergnügen und Ihrer Vernunft.
Das Benutzeroberflächen-Framework sollte eine Benutzerinteraktion auf dem erforderlichen Niveau ermöglichen und keine Abhängigkeiten, Aufblähungen, Probleme und Inkompatibilitäten zwischen den Framework-Versionen verursachen. ScratchABit verwendet derzeit eine einfache Vollbild-Textbenutzeroberfläche mit ANSI/VT100-Terminal-Escape-Sequenzen (ja, selbst die Curses-Bibliothek galt als zu aufgeblasene Abhängigkeit, um sie den Benutzern aufzuzwingen).
Sollte einfach zu verwendende Textformate zum Speichern von „Datenbanken“ nutzen, um eine einfache Wiederverwendung und das Schreiben von Tools sowie die Speicherung in Versionskontrollsystemen zu ermöglichen.
Um ScratchABit verwenden zu können, müssen Sie Python3 installiert (getestet mit Python 3.3 bis 3.7) und VT100 (mindestens) oder XTerm (empfohlen) ein Terminal oder einen Terminalemulator haben (jedes Unix-System sollte kompatibel sein, wie Linux/BSD usw., siehe FAQ unten). mehr).
Klonen Sie den Code mit:
git clone --recursive https://github.com/pfalcon/ScratchABit
Wenn Sie Code ohne --recursive
geklont haben, führen Sie git submodule update --init
im ScratchABit-Verzeichnis aus.
ScratchABit wird jetzt mit Capstone Engine-basierten CPU-Plugins ausgeliefert, die den Zugriff auf eine Reihe von CPU-Architekturen ermöglichen. Um es zu verwenden, sollte das aktuelle Python-Bindungsmodul für Capstone installiert sein (vorzugsweise Pakete, die von Betriebssystem-Distributionen geliefert werden, die oft veraltet sind). Der einfachste Weg, es zu installieren, ist im Verzeichnis der Python-Benutzerpakete:
pip3 install --no-cache-dir --user capstone
Eine Alternative besteht darin, es in einer virtuellen Python-Umgebung im ScratchABit-Verzeichnis zu installieren:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Wenn Sie eine neue Terminalsitzung öffnen, um mit ScratchABit zu arbeiten, 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 ein selbstbeschreibendes ausführbares Format (wie ELF) zerlegen möchten, übergeben Sie sie einfach als Argument an ScratchABit.py
. Für einen schnellen Einstieg enthält das Repository eine Reihe von example-*.elf
Dateien für verschiedene Architekturen. Um beispielsweise die x86-32-Bit-Version auszuprobieren:
python3 ScratchABit.py example-x86_32.elf
Wenn Sie alternativ eine rohe Binärdatei zerlegen möchten, müssen Sie eine .def-Datei (Definition) erstellen, um anzugeben, welche Speicherbereiche für den Code definiert sind, an welche Adresse die Binärdatei geladen werden soll usw. (Hinweis: Eine . Die def-Datei kann auch für .elf und ähnliche Dateien nützlich sein.) Das Repository enthält einen einfachen x86_64-Rohbinärcode und die entsprechende Beispiel-x86_64.def-Datei (eine Beschreibung der verfügbaren Optionen finden Sie im Inneren):
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 (auf die meisten Aktionen kann auch über das Menü zugegriffen werden). Der Arbeitsablauf von ScratchABit ähnelt dem anderer interaktiver Dissambler (einige Vorkenntnisse oder Hintergrundinformationen können 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/
verknüpfen/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
festlegt.
Ein sehr einfaches Beispiel, das ein externes Plugin verwendet, finden Sie in dieser esp8266.def-Datei, die mit dem xtensa.py-Plugin aus dem ida-xtensa2-Repository funktioniert.
F: Welche Prozessoren/Architekturen werden unterstützt?
A: ScratchABit unterstützt keine eigenen Prozessorarchitekturen, es ist mit IDAPython-API-Plugins vollständig retargetierbar. Es sind viele Plugins verfügbar, das Schreiben eines neuen Plugins ist einfach. Damit Benutzer ScratchABit testen können, ist in der Distribution ein einfaches x86-Prozessor-Plugin enthalten, das den Pymsasid-Disassembler unter der Haube verwendet.
Ab Version 2.0 ist auch das Capstone-Plugin enthalten, das den Zugriff auf eine Reihe von Architekturen ermöglicht, darunter x86, ARM, MIPS, PowerPC, SPARC usw. (die Architekturunterstützung wird basierend auf Benutzertests schrittweise aktiviert).
Informationen zu den mit ScratchABit gelieferten Plugins finden Sie in der README-Datei für plugins/cpu/
dir“.
F: Debugger?
A: ScratchABit widmet sich der statischen Analyse und der einfachen Unterstützung neuer CPU-Architekturen (programmieren Sie einfach ein neues CPU-Plugin in Python – Sie können in wenigen Stunden erste Ergebnisse erhalten). Die dynamische Analyse war nicht als Kernfunktion konzipiert und es gibt keine unmittelbaren Pläne, sie zu implementieren. Patches sind jedoch willkommen.
F: Dekompiler?
A: Es gibt ein verwandtes Projekt namens ScratchABlock zur umfassenden Programmanalyse, -transformation und -dekompilierung. Es wird erwartet, dass mit zunehmender Reife von ScratchABlock einige seiner Funktionen in ScratchABit verfügbar sein werden (vielleicht über Plugins).
F: Ich verwende kein Linux. Wie kann ich ScratchABit ausführen?
A: Installieren Sie Linux in einem Emulator/einer VM auf Ihrem System und freuen Sie sich.
F: Obligatorischer Screenshot?
A: Sicher: