- Reverse Engineering mit großen Sprachmodellen
1. Einführung in LLM4Decompile und Decompile-Eval
- Unser Ziel ist es, das erste Open-Source-LLM speziell für die Dekompilierung zu erstellen und zu veröffentlichen sowie den ersten Dekompilierungs-Benchmark mit Fokus auf Re-Kompilierbarkeit und Wieder-Ausführbarkeit aufzubauen, um seine Fähigkeiten zu bewerten.
- Eine Million C-Code-Samples aus AnghaBench wurden mit GCC in Assemblercode kompiliert, wodurch ein Datensatz aus 4 Milliarden Token mit Assembler-Quellcode-Paaren aufgebaut wurde.
- Mit diesem Datensatz wurde das führende Code-LLM DeepSeek-Coder feinabgestimmt, und auf Basis von HumanEval-Fragen und Test-Samples wurde der Bewertungs-Benchmark Decompile-Eval erstellt.
- Die Bewertung erfolgt aus zwei Perspektiven: ob sich der dekompilierte Code erfolgreich erneut kompilieren lässt und ob er alle Assertions der Testfälle besteht.
2. Bewertungsergebnisse
Metriken
- Re-Kompilierbarkeit und Wieder-Ausführbarkeit sind wichtige Kennzahlen zur Überprüfung der Wirksamkeit des Dekompilierungsprozesses.
- Wenn sich dekompilierter Code erneut kompilieren lässt, ist das ein starker Hinweis auf syntaktische Integrität.
- Da Syntax allein nicht garantiert, dass ein Programm semantisch mit dem Original identisch ist, ist die Wieder-Ausführbarkeit ein wichtiger Maßstab zur Bewertung der semantischen Korrektheit.
- Re-Kompilierbarkeit und Wieder-Ausführbarkeit stehen für Syntax-Rekonstruktion und Bedeutungswahrung, was für nutzbare und robuste Dekompilierung essenziell ist.
3. Verwendung des Modells
- LLM4Decompile umfasst Modelle mit 1,3 bis 33 Milliarden Parametern, die auf Hugging Face verfügbar sind.
- Modellbeispiele: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
- Das NSP-Modell wurde mit Assemblercode trainiert; die durchschnittliche Wieder-Ausführbarkeit liegt bei etwa 0,17.
- Das UO-Modell wurde ohne Vorwissen über das Optimierungsniveau (O0~O3) trainiert; die durchschnittliche Wieder-Ausführbarkeit liegt bei etwa 0,21.
- Beispiel für die Modellnutzung: C-Code in Binärdateien kompilieren, die Binärdateien in Assembler-Instruktionen disassemblieren und mit LLM4Decompile die Assembler-Instruktionen nach C übersetzen.
4. Verwendung von Decompile-Eval
- Die Daten sind im JSON-Listenformat unter
llm4decompile/decompile-eval/decompile-eval.json gespeichert.
- Es werden Methoden angeboten, um die Bewertung auf einer einzelnen GPU mit einem einzelnen Prozess auszuführen, sowie mit TGI (10-fach schneller, mit Unterstützung für mehrere GPUs und Multiprozesse).
5. In Arbeit
- LLM4Binary: Geplant ist ein größerer Datensatz, um das Modell mit Assemblercode und C-Code vorzutrainieren.
- Decompiler-ALL: Geplant ist Unterstützung für mehr Sprachen/Plattformen und Konfigurationen (z. B. die Dekompilierung mehrerer Funktionen).
6. Lizenz
Meinung von GN⁺
- LLM4Decompile stellt im Vergleich zu bestehenden Ansätzen zur Binär-Dekompilierung einen innovativen Ansatz vor und ermöglicht insbesondere durch den Einsatz großer Sprachmodelle eine präzisere und effizientere Dekompilierung.
- Diese Technik kann im Bereich der Software-Sicherheit sehr nützlich sein und bei der Analyse von Malware oder der Wartung von Legacy-Systemen helfen.
- Dass die Wieder-Ausführbarkeit des dekompilierten Codes nicht perfekt ist, deutet darauf hin, dass diese Technik noch Verbesserungspotenzial hat. Zusätzliche Forschung ist nötig, um Genauigkeit und Effizienz in realen Umgebungen zu steigern.
- Zu den bestehenden Tools mit ähnlichen Funktionen gehören kommerzielle und Open-Source-Dekompilierer wie Ghidra oder IDA Pro, LLM4Decompile bietet jedoch einen neuen, auf Machine Learning basierenden Ansatz.
- Bei der Einführung dieser Technik sollten die Qualität und Reichweite der Trainingsdaten, die Genauigkeit des Modells und die Ausführungsgeschwindigkeit berücksichtigt werden. Vorteile sind hohe Genauigkeit und Flexibilität, während die Komplexität großer Modelle und der Bedarf an Rechenressourcen Nachteile sein können.
1 Kommentare
Hacker-News-Kommentare
Meinung zu den Ergebnissen der „Wiederausführbarkeit“:
Frage zur Zuverlässigkeit des dekompilierten Ergebnisses:
Hervorragender Anwendungsfall für LLM-Finetuning:
Interesse am Training eines entwicklerbasierten Dekompilierungsmoduls:
Interesse an idealen Anwendungsfällen für Dekompilierer und an der Datensatzerstellung:
Vorstellung eines persönlichen laufenden Projekts für einen LLM-basierten Dekompilierer:
Bedenken hinsichtlich AI-basierter Ansätze und Benchmarks ohne Vergleich:
Interesse an der großen Differenz zwischen Rekompilierbarkeits- und Wiederausführbarkeitswerten:
Neugier auf den Vergleich mit anderen, nicht auf LLMs basierenden Dekompilierern:
Neugier darüber, dass das 6b-Modell besser abschnitt als das 33b-Modell: