Objektdatei-Exporter-Erweiterung für Ghidra
Diese Ghidra-Erweiterung ermöglicht den Export von Teilen eines Programms als Objektdateien. Diese Objektdateien verfügen über gültige Metadaten (Symbole, Verschiebungstabellen …) und können daher direkt von einer Toolchain zur weiteren Verarbeitung wiederverwendet werden.
Zu den Anwendungsfällen gehören:
- Erweitertes binäres Patchen, indem der Linker genutzt wird, um sowohl Original- als auch geänderte Teile zusammenzuflicken, anstatt diese Arbeit manuell durchzuführen;
- Software-Ports, indem systemunabhängiger Code von einem Programm isoliert und der Rest ersetzt wird;
- Konvertieren von Programmen oder Objektdateien von einem Dateiformat in ein anderes;
- Erstellen von Bibliotheken, indem Teile eines Programms extrahiert und in einem anderen Kontext wiederverwendet werden;
- Dekompilierungsprojekte, indem ein Programm in mehrere Objektdateien aufgeteilt und diese im Ship of Theseus -Stil neu implementiert werden;
- …
Matrix der unterstützten Befehlssatzarchitekturen und Objektdateien:
Gebäude (CLI)
- Dieses Repository klonen;
- Definieren Sie die Umgebungsvariable
GHIDRA_INSTALL_DIR so, dass sie auf Ihr Ghidra-Installationsverzeichnis verweist. - Führen Sie
gradle buildExtension aus.
Das Ghidra-Erweiterungsarchiv wird im Verzeichnis dist/ erstellt.
Installation
- Laden Sie die Erweiterung von der Release-Seite herunter oder erstellen Sie sie lokal.
- Installieren Sie die Erweiterung in Ihrer Ghidra-Instanz mit
File > Install Extensions… ; - Aktivieren Sie das
RelocationTableSynthesizedPlugin -Plugin mit File > Configure in einem CodeBrowser-Fenster.
Verwendung
- Wählen Sie in der Listenansicht eine Reihe von Adressen aus.
- Führen Sie den
Relocation table synthesizer Analysator aus (verfügbar im One-Shot-Modus). - Rufen Sie mit
File > Export Program… einen verschiebbaren Objektdatei-Exporter auf.
Die rekonstruierten Umzüge können mit Window > Relocation table (synthesized) eingesehen werden.
- ️ Der Relocation-Table-Synthesizer- Analysator ist auf eine vollständig gefüllte Ghidra-Datenbank (mit korrekt deklarierten Symbolen, Datentypen und Referenzen) angewiesen, um zu funktionieren. Falsche oder fehlende Informationen können dazu führen, dass bei der Analyse fehlerhafte oder unentdeckte Verschiebungen auftreten .
- ️ Um zu funktionieren, sind die Objektdatei-Exporteure auf die Ergebnisse des Verschiebungstabellen-Synthesizer- Analysators angewiesen. Führen Sie diesen Analysator im Zweifelsfall unmittelbar vor dem Exportieren einer Objektdatei aus, um sicherzustellen, dass der Inhalt der Verschiebungstabelle mit dem aktuellen Status des Programms übereinstimmt.
Wie funktioniert es?
Objektdateien bestehen aus drei Teilen:
- Verschiebbare Abschnittsbytes;
- Eine Symboltabelle;
- Ein Umzugstisch.
Wenn ein Linker aufgerufen wird, um eine ausführbare Datei aus einer Reihe von Objektdateien zu generieren, geschieht Folgendes:
- Legen Sie ihre Abschnitte im Gedächtnis fest.
- Berechnen Sie die Adressen der Symbole im virtuellen Adressraum.
- Wenden Sie die Verschiebungen basierend auf den endgültigen Adressen der Symbole auf die Abschnittsbytes an.
Normalerweise wird die Verschiebungstabelle nach diesem Vorgang verworfen, ebenso wie die Symboltabelle, wenn die Debugging-Symbole nicht beibehalten werden, sodass nur die nicht verschiebbaren Abschnittsbytes übrig bleiben. Durch sorgfältige Analyse können diese Daten jedoch wiederhergestellt werden, sodass wir das Programm anschließend effektiv wieder in Objektdateien entkoppeln können.