
Ein ML-gestützter graphbasierter Multi-Architektur-Ansatz zur Erkennung von ROP-Gadgets
LCSAJdump ist ein statisches Analyse-Framework zur Erkennung von Return-Oriented-Programming (ROP)- und Jump-Oriented-Programming (JOP)-Gadgets. Im Gegensatz zu herkömmlichen Scannern ist LCSAJdump architekturunabhängig und verwendet einen graphbasierten Ansatz, um Schwachstellen aufzudecken, die für lineare Tools unsichtbar bleiben.
Gängige ROP-Scanner verwenden einen linearen "Sliding-Window"-Ansatz über die ausführbaren Bytes der Binärdatei. Diese Methode übersieht systematisch Schatten-Gadgets: Ausführungsketten, die nicht zusammenhängende Speicherblöcke durchqueren, die durch unbedingte Sprünge oder bedingte Verzweigungen verbunden sind.
LCSAJdump überwindet diese Einschränkung, indem es den Kontrollflussgraphen (CFG) mittels LCSAJ (Linear Code Sequence and Jump)-Analyse rekonstruiert. Durch die Modellierung der Binärdatei als gerichteten Graphen von Basisblöcken identifiziert das Tool:
.text-Abschnitt in LCSAJ-Basisblöcke und rekonstruiert Flussbeziehungen durch einen eigens erstellten Rückwärts-Kontrollflussgraphen (leichtgewichtige Adjazenzdarstellung, keine schwergewichtige Graph-Abhängigkeit).--depth Sprüngen von Gadget-Enden erreichbar sind, was Speicher und Build-Zeit bei großen Binärdateien (z. B. libc) drastisch reduziert, während identische Ergebnisse erzielt werden.(siehe Benchmarks).
LCSAJdump ist als universelles Werkzeug konzipiert. Derzeit unterstützt:
config.py implementiert werden.pip install lcsajdump
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt
LCSAJdump bietet eine leistungsstarke CLI für präzise Binäranalysen:
Standardanalyse (Standard RISC‑V):
python LCSAJdump.py <path_to_binary>
Erweiterte Analyse (Architektur und Ausgabedatei angeben):
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
Export als JSON mit Bad-Char-Filter:
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <path_to_binary>
Hinweis: Verwenden Sie
-onach--json, um JSON in eine Datei zu speichern. Ohne--jsonspeichert-oals Klartext.
Klartextausgabe speichern:
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
Alle ausführbaren Abschnitte analysieren:
lcsajdump --all-exec -d 25 -k 10 -l 30 <path_to_binary>
Streng algorithmisches Ranking erzwingen (ML umgehen):
lcsajdump --algo <path_to_binary>
| Flag | Typ | Standard | Beschreibung |
|---|---|---|---|
-a, --arch | TEXT | auto | Zielarchitektur (auto, riscv64, x86_64, arm64). Automatisch aus ELF-Header erkannt. |
-d, --depth | INTEGER | 20 | Maximale Suchtiefe in LCSAJ-Blöcken. Steuert die Kettenlänge. |
-k, --darkness | INTEGER | 5 | Pruning-Schwellenwert — max. Besuche pro Knoten. Höher = mehr Gadgets, langsamerer Scan. |
-l, --limit | INTEGER | 10 | Maximale Anzahl der anzuzeigenden Gadgets in der Ausgabe. |
-s, --min-score | INTEGER | 0 | Mindestheuristikwert, den ein Gadget für die Anzeige erreichen muss. |
-i, --instructions | INTEGER | 15 | Maximale Anzahl an Instruktionen in einem einzelnen LCSAJ-Knoten. |
-v, --verbose | FLAG | — | Ausführliche Ausgabe für detaillierte Ergebnisse pro Gadget aktivieren. |
-o, --output | PATH | — | Ausgabe in Datei schreiben. Standardmäßig Klartext; mit --json für JSON-Ausgabe. |
-b, --bad-chars | TEXT | — | Hex-Bytes, die aus Gadget-Adressen herausgefiltert werden sollen (z. B. "000a0d"). |
--json | FLAG | — | Gadgets als strukturiertes JSON ausgeben. Mit -o kombinieren, um in Datei zu speichern. |
--all-exec | FLAG | — | Alle ausführbaren Abschnitte analysieren, nicht nur .text. |
-al, --algo | FLAG | — | Streng algorithmisches Ranking verwenden (ML umgehen). |
--version | FLAG | — | Installierte Version anzeigen und beenden. |
--help | FLAG | — | Hilfemeldung anzeigen und beenden. |
LCSAJdump wird durch eine rigorose, schrittweise validierte Testsuite im Verzeichnis benchmarkTests/ untermauert.
Durch 14 große Iterationen semantischer Feature-Engineering hat das hybride Modell gelernt, Gadgets anhand tatsächlicher Speichernebenwirkungen (extrahiert durch angr-symbolische Ausführung) zu unterscheiden, anstatt rein syntaktischer Heuristiken.