Aktualisierte Demo folgt bald!
Der Reverse Engineering Assistant (ReVA) ist ein Projekt zum Aufbau eines Disassembler-unabhängigen KI-Assistenten für Reverse Engineering-Aufgaben. Dazu gehören sowohl Offline- als auch Online-Inferenz und eine einfache Architektur.
ReVa unterscheidet sich von anderen Bemühungen zur Entwicklung von KI-Assistenten für RE-Aufgaben dadurch, dass es einen werkzeuggesteuerten Ansatz verwendet. Ziel von ReVa ist es, dem LLM eine Vielzahl kleiner Tools zur Verfügung zu stellen, so wie Ihre RE-Umgebung Ihnen eine Reihe kleiner Tools zur Verfügung stellt. ReVa kombiniert diesen Ansatz mit Chain-of- Reasoning-Techniken, um den LLM in die Lage zu versetzen, komplexe Aufgaben zu erledigen.
Jedes der dem LLM zur Verfügung gestellten Werkzeuge ist so konstruiert, dass es für den LLM einfach zu verwenden ist, eine Vielzahl von Eingaben toleriert und Halluzinationen durch den LLM reduziert. Wir tun dies, indem wir dem LLM ein Schema zur Verfügung stellen, aber andere Eingaben tolerieren, einschließlich Beschreibungen, die den LLM leiten, und korrigierbare Fehler zurück an den LLM umleiten und zusätzliche Ausgaben hinzufügen, um die nächste Entscheidung des LLM zu leiten.
Wenn das LLM beispielsweise eine Dekompilierung von Ihrem RE-Tool anfordert, akzeptieren wir eine Rohadresse im Hexadezimalformat, eine Rohadresse in Basis 10, einen Symbolnamen mit einem Namespace oder ein Symbol. Wenn das LLM uns fehlerhafte Eingaben gibt, melden wir dies dem LLM zusammen mit Anweisungen zur Korrektur der Eingabe (und ermutigen es beispielsweise, die Funktionsliste zu verwenden). Um die Erkundung so zu fördern, wie es ein Mensch tun würde, melden wir zusammen mit der Dekompilierung zusätzlichen Kontext wie den Namespace und Querverweise. Dies ist ein kleiner Anstoß, damit das LLM die Binärdatei auf die gleiche Weise erkundet, wie es ein Mensch tun würde.
Mit dieser Technik können Sie allgemeine Fragen stellen und relevante Antworten erhalten. Das Modell priorisiert Informationen aus den Tools, kann aber auch dann, wenn keine Informationen vorhanden sind, auf allgemeine Fragen aus dem Training antworten.
Sie können Fragen stellen wie:
__mod_init
Segments.mmap
zurück?Ein wichtiger Teil des Reverse Engineering ist der Prozess. Viele andere Tools stellen lediglich eine einzige Frage an den LLM, was bedeutet, dass es schwierig ist, festzustellen, warum etwas passiert ist. In ReVa zerlegen wir alle Aktionen in kleine Teile und beziehen die LLM-Gedanken in die Ausgabe ein. Dies ermöglicht es dem Analysten, die Aktionen und Überlegungen des LLMs zu überwachen und die Eingabeaufforderung bei Bedarf abzubrechen und zu ändern.
RevA basiert auf Langchain, das eine Reihe von Modellen unterstützt.
Es gibt integrierte Unterstützung für:
Weitere Informationen zu den Einstellungen für die Anbieter finden Sie unter Konfiguration.
Das Hinzufügen zusätzlicher Inferenzserver ist einfach, wenn es von Langchain unterstützt wird.
Die Konfiguration für ReVa erfolgt in den CodeBrowser Tool-Optionen. Öffnen Sie ein Programm und gehen Sie zu Bearbeiten -> Werkzeugoptionen -> ReVa.
Es gibt Optionen für:
Es gibt Abschnitte für die Anbieter.
Standardmäßig wird der OpenAI-Schlüssel aus der Umgebungsvariablen OPENAI_API_KEY
geladen. Sie können Ihren Schlüssel auch in Ghidra festlegen. Durch Zurücksetzen des Schlüssels auf den Wert OPENAI_API_KEY
wird der Schlüssel aus der Ghidra-Konfiguration gelöscht und aus der Umgebung geladen.
Sie können auch das Modell auswählen. Standardmäßig ist gpt-4o
ausgewählt. Dieses Modell funktioniert am besten mit den Tools und der Eingabeaufforderung von ReVa.
gpt-4
funktioniert ebenfalls gut, ist jedoch langsam und erfordert mehr Aufforderungen durch den Benutzer, um eine Binärdatei zu erkunden.
Ollama ist ein lokaler Inferenzserver. Der Standardserver ist auf „localhost“ mit dem Standard-Ollama-Port eingestellt. Sie können dies auf einen Remote-Server ändern, wenn Sie Rückschlüsse auf einem Remote-Computer durchführen möchten. Dies ist nützlich für Organisationen, die sich selbst hosten.
Sie können auch ein Modell auswählen. Das Modell muss bereits auf dem Server geladen sein. Gute Leistungen wurden erzielt mit:
mixtral
llama3
phi
RevA verfügt über einen zweistufigen Arbeitsablauf.
ReVa verwendet eine Erweiterung für Ihr RE-Tool, um Analysen durchzuführen. Siehe Ghidra-Support unten.
Um Fragen zu stellen und die Inferenz auszuführen, steht ein Befehlszeilentool zur Verfügung. Führen Sie reva-chat
aus, um die Chat-Sitzung zu starten. Dieser Befehl findet Ihr geöffnetes Ghidra und stellt eine Verbindung zu ihm her. Um einen neuen Chat zu öffnen, führen Sie den Befehl erneut in einem anderen Terminal aus.
Wenn Sie mehr als ein Ghidra geöffnet haben, können Sie mit reva-chat --project ${project-name}
das richtige auswählen. Wenn es nicht festgelegt ist, werden Sie reva-chat
gefragt, mit welchem Projekt Sie eine Verbindung herstellen möchten.
Zur Kommunikation zwischen reva-server
und der Erweiterung wird gRPC verwendet. Mehr darüber können Sie (hier)[./DEVELOPER.md] lesen. Die Erstellung der Quelldateien aus diesen Protokolldefinitionen wird vom Makefile gesteuert. Um die Protokollquellcodedateien zu erstellen, führen Sie diesen Befehl im Stammverzeichnis des Projekts aus:
make protocol
Installieren Sie zuerst die Python-Komponente, ich verwende gerne pipx
. Installieren Sie es mit etwas wie:
pip install pipx
Führen Sie im Ordner reverse-engineering-assistant
Folgendes aus:
pipx install .
Nach der Installation des Python-Projekts werden Sie möglicherweise von pipx gewarnt, dass Sie einen Ordner zu Ihrer PATH-Umgebungsvariablen hinzufügen müssen. Stellen Sie sicher, dass sich der Ordner (der jetzt reva-server
und reva-chat
enthält) in Ihrer PATH-Variablen befindet. pipx kann das mit diesem Befehl für Sie erledigen:
pipx ensurepath
Die Erweiterung muss reva-server
starten und Sie müssen reva-chat
ausführen. Falls Sie sie nicht zu Ihrem PATH hinzufügen möchten, lesen Sie im Abschnitt Konfiguration nach, wie Sie den Pfad zu den ausführbaren Dateien festlegen.
Sobald der reva-server
durch die Erweiterung gestartet wurde, kann der Chat gestartet werden mit:
reva-chat
Damit die Ghidra-Erweiterung funktioniert, muss das Python-Paket installiert sein!
Befolgen Sie die Anweisungen im ghidra-assistant-Plugin.
Aktivieren Sie nach der Installation die ReVa Plugin
Erweiterung im CodeBrowser-Tool (Öffnen Sie eine Datei und klicken Sie auf: Datei -> Konfigurieren -> Verschiedenes).
Wenn ReVa standardmäßig aktiviert sein soll, klicken Sie auf Datei -> Tool speichern, um die Konfiguration zu speichern.
Wenn alles ordnungsgemäß funktioniert, wird in Ihrer Menüleiste ein ReVa-Menü angezeigt.
Sie können die Plugin-Konfiguration unter Edit -> Tool Options -> ReVa
ändern.
Immer wenn ReVa eine Aktion ausführt, erstellt es für jede Aktion einen Rückgängig-Punkt. Wenn ReVa 5 Variablen umbenennt, ist dies ein Rückgängigmachen.
ReVa fügt dem Fenstermenü des CodeBrowser Tools eine Option hinzu. Wählen Sie Fenster -> ReVa-Aktionsprotokoll, um das Fenster „ReVa-Aktionsprotokoll“ zu öffnen.
In diesem Fenster werden Aktionen angezeigt, die ReVa durchgeführt hat und ausführen möchte. Sie können eine Änderung akzeptieren oder ablehnen, indem Sie auf das Symbol ✅ oder doppelklicken. Sie können auch zu dem Ort gehen, an dem die Aktion ausgeführt wird, indem Sie auf die Adresse doppelklicken.
Wenn Sie eine Aktion ablehnen, wird ReVa darüber informiert und sie wird fortfahren.
Sie können in den ReVa-Optionen auch „Automatisch zulassen“ aktivieren. Dadurch werden automatisch alle Aktionen akzeptiert, die ReVa durchführen möchte.
ReVa fügt der Ghidra-Benutzeroberfläche auch einige Elemente hinzu. Sie können ReVa entweder bitten, im Chat-Fenster etwas zu tun: „Untersuchen Sie die Variablenverwendung in main
im Detail, benennen Sie die Variablen mit aussagekräftigeren Namen um.“ oder verwenden Sie das Menüsystem.
Sie können beispielsweise mit der rechten Maustaste auf eine Variable in der Dekompilierung klicken, Reva -> Variable umbenennen auswählen und ReVa führt die Aktion aus.
Gefällt Ihnen meine Arbeit? Möchten Sie dieses und andere Projekte unterstützen? Interessiert es Sie, wie dieses Projekt entworfen und gebaut wurde? Dieses und viele andere Projekte entstehen live in meinem Stream unter https://twitch.tv/cyberkaida!