Ollama API-Interaktion Ghidra-Skript für LLM-unterstütztes Reverse Engineering.
Was ist das?
Dieses Skript interagiert mit der API von Ollama, um mit Large Language Models (LLMs) zu interagieren. Es nutzt die Ollama-API, um verschiedene Reverse-Engineering-Aufgaben durchzuführen, ohne Ghidra zu verlassen. Es unterstützt sowohl lokale als auch Remote-Instanzen von Ollama. Dieses Skript ist von GptHidra inspiriert.
Unterstützte Modelle
Dieses Skript unterstützt jedes Modell, das Ollama unterstützt
Ollama hat kürzlich auch Unterstützung für jedes auf HuggingFace verfügbare Modell im GGUF-Format hinzugefügt, zum Beispiel:
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
Voraussetzungen
- Ghidra
- Ollama
- Jedes der Ollama-Modelle
Ollama-Setup
Fühlen Sie sich frei, llama3.1:8b
durch eines der Ollama-kompatiblen Modelle zu ersetzen
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
Jetzt sollten Sie startklar sein, localhost:11434
sollte bereit sein, Anfragen zu bearbeiten
Hinweis: Dieses Skript unterstützt auch Remote-Instanzen. Legen Sie die IP-Adresse und den Port bei der ersten Konfiguration fest.
Was kann es tun?
- Erklären Sie die Funktion, die sich derzeit im Dekompilerfenster befindet
- Schlagen Sie einen Namen für die aktuelle Funktion vor. Die Funktion wird automatisch benannt, wenn dies aktiviert wurde
- Aktuelle Funktion mit empfohlenen Kommentaren neu schreiben
- Schreiben Sie die aktuelle Funktion komplett neu und versuchen Sie, die Funktions-/Parameter-/Variablennamen zu verbessern und auch Kommentare hinzuzufügen
- Der Benutzer kann eine Frage zu einer Funktion stellen
- Suchen Sie nach Fehlern/schlagen Sie potenzielle Schwachstellen in der aktuellen Funktion vor (nur um sicherzustellen, dass Sie alles abgedeckt haben; einige Vorschläge sind dumm, da sie keinen Kontext haben)
- Verwenden Sie eine modifizierte Version dieses LeafBlowerLeafFunctions.py Ghidra-Skripts, um die Analyse potenzieller „Blatt“-Funktionen wie strcpy , memcpy , strlen usw. in Binärdateien mit entfernten Symbolen zu automatisieren. Automatische Umbenennung, wenn dies aktiviert ist
- Erläutern Sie die einzelne Montageanleitung, die derzeit im Listenfenster ausgewählt ist
- Erläutern Sie mehrere Montageanweisungen, die derzeit im Listenfenster ausgewählt sind
- Allgemeiner Eingabeaufforderungseintrag zum Stellen von Fragen (anstatt Google zu verwenden, gut für einfache Dinge)
Konfigurationsoptionen
Die folgenden Konfigurationsoptionen sind verfügbar und können beim ersten Start konfiguriert werden:
- Server-IP : Wenn Sie eine Remote-Instanz verwenden, stellen Sie die IP der Remote-Instanz ein, andernfalls geben Sie
localhost
ein - Port : Wenn sich Ihre Instanz auf einem anderen Port befindet, ändern Sie ihn hier – der Standardwert ist
11434
- Schema : Wählen Sie
http
oder https
je nachdem, wie Ihre Instanz konfiguriert ist - Modell : Wählen Sie das Modell aus, das Sie für die Analyse verwenden möchten. Sie können dies jederzeit ändern
- Projektspezifische Eingabeaufforderung : Wird verwendet, um dem Modell bei Bedarf zusätzlichen Kontext zu geben
- Antwortkommentare : Einige Optionen speichern die Antworten als Kommentar oben in der Funktion. Dies kann hier aktiviert/deaktiviert werden
- Automatisches Umbenennen : Einige Optionen versuchen, Funktionen basierend auf den Antworten automatisch umzubenennen. Dies kann hier aktiviert/deaktiviert werden
Mit den Optionen 11 und 12 können die Einstellungen nach dem ersten Start angepasst werden.
Verwendung
- Platzieren Sie das Skript GhidrOllama.py und das Verzeichnis ghidrollama_utils in Ihrem Ghidra-Skriptverzeichnis (normalerweise
~/ghidra_scripts
). - Suchen Sie eine Funktion/Anweisung, die Sie dem LLM zuführen möchten
- Führen Sie das Skript im Skript-Manager-Fenster aus
- Wenn Sie das Skript zum ersten Mal ausführen, schließen Sie die Erstkonfiguration ab (dies kann später geändert werden).
- Wählen Sie aus, wie die Funktion/Anweisung analysiert werden soll
- Warten Sie, bis die Ausgabe auf der Konsole gedruckt wird (die Wartezeit variiert je nach Modell und Spezifikationen des Hosts).
Wege zum Laufen
Es ist umständlich, jedes Mal in das Skriptfenster zu gehen, um dieses Skript auszuführen. Das Skript kann einfach auf folgende Weise ausgeführt werden:
- Tastenkombination : Die Standardtastenkombination für dieses Skript ist Q
- Symbolleiste : Ein kleines Symbol in der Symbolleiste kann angeklickt werden, um das Skript auszuführen
Tastenkombination
Um es zu aktivieren, suchen Sie nach dem Hinzufügen Ihres Skripts zur Liste der Ghidra-Skriptverzeichnisse das Skript in der Liste. Klicken Sie mit der rechten Maustaste auf das Ergebnis und wählen Sie „Tastenbelegung zuweisen“. Wenn Sie zur Eingabe eines Schlüssels aufgefordert werden, geben Sie q ein.
Symbolleiste
Um das Symbolleistensymbol zu aktivieren, suchen Sie das Skript im Skriptmanager und klicken Sie auf das Kontrollkästchen in der ersten Spalte (Spalte „ In der Symbolleiste“ ). Das GhidrOllama-Symbol sollte in der Symbolleiste erscheinen.
Notizen
- Es ist erwähnenswert, dass die Analyse nur so gut sein wird wie das Modell. Dieses Skript verbindet im Grunde nur die Modelle und Ghidra
- Je besser das Modell (mehr Parameter, langsamer), desto umfassender und korrekter wird die Analyse sein (meistens!)
- Wenn Sie einen schnellen Überblick über eine Funktion wünschen, ist llama3.1:8b schnell und liefert eine anständige Analyse
- Seien Sie vorsichtig bei großen Funktionen und Modellen mit geringem Kontext. Wenn die Funktion zu groß für das Kontextfenster ist, antwortet das Modell mit völligem Kauderwelsch (wenn es überhaupt antwortet).
Beispiele für Funktionsanalysen
Unten ist eine Implementierung von strchr(), wie sie im Ghidra-Dekompilierungsfenster mit entfernten Symbolen zu sehen ist: