
Quokka: Ein schneller und präziser Binär-Exporter
Bild erzeugt von DALL-E
Quokka ist ein Binärdatei-Exporter: Aus der Disassemblierung eines Programms erzeugt er eine Exportdatei, die ohne den Disassembler verwendet werden kann. Derzeit werden IDA Pro, Ghidra und Binary Ninja als Disassemblierungs-Backends unterstützt.
Das Hauptziel von Quokka ist es, die vollständige Manipulation der Binärdatei zu ermöglichen, ohne nach dem anfänglichen Export jemals einen Disassembler zu öffnen. Darüber hinaus abstrahiert es die API des Disassemblers, um den Benutzern eine saubere Schnittstelle zu bieten.
Quokka ist stark von BinExport inspiriert, dem Binär-Exporter, der von BinDiff verwendet wird.
IDA Pro Ghidra Binary Ninja
│ │ │
IDA Plugin (C++) Ghidra Plugin (Java) BinaryNinja Plugin (Python)
│ │ │
└────────────── quokka.proto ─────────────────┘
(protobuf schema)
│
.quokka files
│
Python bindings (quokka.Program)
├── Capstone backend (primary)
└── Pypcode backend (optional)
Das Plugin wird in der CI erstellt und ist in der Registry verfügbar.
Es sollte möglich sein, es direkt über PIP mit einem Befehl wie diesem zu installieren:
$ pip install quokka-project
Hinweis: Das IDA-Plugin wird nicht benötigt, um eine mit Quokka erzeugte Datei zu lesen. Es wird nur zur Erzeugung verwendet.
Quokka ist mit IDA 9.1+ kompatibel.
Quokka wird im Hex-Rays-Plugin-Repository veröffentlicht und kann mit hcli installiert werden:
user@host:~$ hcli plugin install quokka
Das Plugin wird ebenfalls in der CI erstellt und ist im Tab Releases verfügbar.
Laden Sie zum Herunterladen des Plugins die Datei quokka_plugin.so (oder das Archiv quokka-ida<version>.zip für Ihre IDA-Version) herunter und kopieren Sie sie in Ihr IDA-Verzeichnis plugins.
Quokka unterstützt auch den Export aus Ghidra (>= 12.0.3) über eine eigene Erweiterung. Sie erzeugt dieselben .quokka-Protobuf-Dateien, die die Python-Bibliothek laden kann.
Anweisungen zum Erstellen, zur Installation und zur Verwendung finden Sie in der README der Ghidra-Erweiterung.
Quokka unterstützt auch den Export aus Binary Ninja über ein Python-Plugin. Es erzeugt dieselben .quokka-Protobuf-Dateien, die die Python-Bibliothek laden kann.
Details zur Installation und Verwendung finden Sie in der README der BinaryNinja-Erweiterung.
Die erste manuelle Möglichkeit, eine Binärdatei zu exportieren, ist die Verwendung des Plugins in IDA Pro. Die Standard-Tastenkombination in IDA ist Alt+A. Es öffnet sich der folgende Dialog:

Verfügbare Modi sind:
Hinweis: Der FULL-Modus ist noch nicht implementiert. Derzeit ist nur der LIGHT-Modus funktionsfähig.
Hinweis: Hierfür ist eine funktionierende IDA-Installation erforderlich.
$ idat -OQuokkaAuto:true -OQuokkaDecompiled:true -A /path/to/hello.i64
Alle verfügbaren Optionen sind in der Verwendung beschrieben.
Hinweis: idat wird anstelle von ida verwendet, um die Exportgeschwindigkeit zu erhöhen, da keine grafische Oberfläche benötigt wird.
$ analyzeHeadless /tmp/proj Test \
-import /path/to/binary \
-scriptPath ghidra_extension/src/script/ghidra_scripts \
-postScript QuokkaExportHeadless.java \
--out=/path/to/output.quokka --mode=LIGHT
Weitere Einzelheiten finden Sie in der README der Ghidra-Erweiterung.
Hinweis: Die Headless-Nutzung der Binary Ninja API erfordert eine kommerzielle Lizenz. Ohne eine solche verwenden Sie stattdessen den Exportbefehl in der Binary Ninja-Benutzeroberfläche.
$ python binaryninja_extension/export_headless.py /path/to/binary \
-o /path/to/output.quokka --mode LIGHT
Weitere Einzelheiten finden Sie in der README der BinaryNinja-Erweiterung.
Quokka stellt ein CLI-Dienstprogramm bereit, um eine oder mehrere Dateien und/oder Verzeichnisse (alle ausführbaren Dateien in jedem Verzeichnis) automatisch parallel zu exportieren. Es unterstützt sowohl IDA Pro als auch Ghidra als Backends:
$ quokka-cli --backend ghidra -t 8 dir/
$ quokka-cli --backend ida --ida-path /opt/ida -t 8 dir/
$ quokka-cli -t 8 dir/ # auto-detect backend
$ quokka-cli -o "%p/exports/%f.quokka" binary # custom output directory
$ quokka-cli -b ida -o %F_ida.quokka -t 4 dir/ # Using relative path
$ quokka-cli -t 8 dir1/ dir2/ binary1 binary2 # multiple inputs
Standardmäßig wird die .quokka-Datei neben der Eingabebinärdatei abgelegt (z. B. erzeugt /usr/bin/ls die Datei /usr/bin/ls.quokka). Mit -o können Sie dies durch einen direkten Pfad oder eine Vorlage überschreiben, die pro Datei expandiert wird (%f = Stammname, %F = Dateiname, %p = übergeordnetes Verzeichnis, %P = vollständiger Pfad, %e = Erweiterung, %% = literales %).
Führen Sie quokka-cli --help aus, um alle Optionen zu sehen. Die wichtigsten Flags sind:
-b, --backend: wählt das Disassembler-Backend (ida, ghidra oder auto)-i, --ida-path: Pfad zum IDA-Installationsverzeichnis (der Ordner, der idat enthält)--ghidra-path: Pfad zum Ghidra-Installationsverzeichnis (überschreibt GHIDRA_INSTALL_DIR)-o, --output: legt den Ausgabepfad oder die Vorlage fest (Standard: %F.quokka)-m, --mode: wählt den Exportmodus (light oder full)--decompiled: aktiviert den Export dekompilierten Codes (nur IDA)-v, --verbose: aktiviert ausführliche Protokollierungimport quokka
from quokka.types import Disassembler
# Directly from the binary (auto-detects available backend)
prog = quokka.Program.from_binary("/bin/ls")
# Explicitly choose a backend
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.GHIDRA)
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.IDA)
# From the exported file
prog = quokka.Program("ls.quokka", # the exported file
"/bin/ls") # the original binary