HN vorgestellt: Ghidra-Erweiterung zum Exportieren von Teilen eines Programms als Objektdatei
(github.com/boricj)Objektdatei-Exporter-Erweiterung für Ghidra
Diese Ghidra-Erweiterung ermöglicht es, Teile eines Programms als Objektdateien zu exportieren. Diese Objektdateien enthalten gültige Metadaten wie Symbole, Relocation-Tabellen usw. und können daher direkt von Toolchains wiederverwendet werden.
Anwendungsfälle
- Fortgeschrittenes Binary-Patching: Original und geänderte Teile mit dem Linker statt manuell zusammenfügen
- Software-Portierung: Systemunabhängigen Code aus einem Programm herauslösen und den Rest ersetzen
- Dateiformat-Konvertierung: Ein Programm oder eine Objektdatei in ein anderes Dateiformat umwandeln
- Bibliothekserstellung: Teile eines Programms extrahieren und in einem anderen Kontext wiederverwenden
- Decompilation-Projekte: Ein Programm in mehrere Objektdateien aufteilen und neu implementieren
Unterstützte Befehlssatzarchitekturen und Objektdateiformate
- x86: COFF (unterstützt), ELF (unterstützt)
- MIPS: COFF (nicht unterstützt), ELF (unterstützt)
Build (CLI)
- Dieses Repository klonen
- Die Umgebungsvariable
GHIDRA_INSTALL_DIRauf das Ghidra-Installationsverzeichnis setzen - Den Befehl
gradle buildExtensionausführen - Das Ghidra-Erweiterungsarchiv wird im Verzeichnis
dist/erzeugt
Installation
- Die Erweiterung von der Release-Seite herunterladen oder lokal builden
- Die Erweiterung in einer Ghidra-Instanz über
File > Install Extensions…installieren - Im CodeBrowser-Fenster das Plugin
RelocationTableSynthesizedPluginüberFile > Configureaktivieren
Verwendung
- In der Listing-Ansicht eine Adressmenge auswählen
- Den Analyzer
Relocation table synthesizerausführen (auch im One-Shot-Modus nutzbar) - Über
File > Export Program…den Exporter für relocatable Objektdateien aufrufen - Unter
Window > Relocation table(synthesized)die rekonstruierte Relocation-Tabelle prüfen
- ⚠️ Der Analyzer Relocation table synthesizer benötigt eine vollständig gepflegte Ghidra-Datenbank (korrekt deklarierte Symbole, Datentypen und Referenzen). Ungenaue oder fehlende Informationen können während der Analyse zu falschen oder nicht erkannten Relocations führen
- ⚠️ Der Objektdatei-Exporter hängt von den Ergebnissen des Analyzers Relocation table synthesizer ab. Vor dem Export der Objektdatei diesen Analyzer ausführen und sicherstellen, dass der Inhalt der Relocation-Tabelle aktuell ist
Funktionsweise
Eine Objektdatei besteht aus drei Teilen:
- relocatable Abschnitts-Bytes
- Symboltabelle
- Relocation-Tabelle
Wenn ein Linker aus mehreren Objektdateien eine ausführbare Datei erzeugt:
- werden Abschnitte im Speicher platziert
- werden die Adressen der Symbole im virtuellen Adressraum berechnet
- werden Relocations in den Abschnitts-Bytes anhand der endgültigen Symboladressen angewendet
Normalerweise wird die Relocation-Tabelle nach diesem Prozess verworfen; auch die Symboltabelle wird verworfen, sofern keine Debug-Symbole erhalten bleiben. Durch sorgfältige Analyse lassen sich diese Daten jedoch rekonstruieren, wodurch ein Programm wieder in Objektdateien delinkt werden kann.
Zusammenfassung von GN⁺
- Diese Ghidra-Erweiterung ermöglicht es, Teile eines Programms als Objektdateien zu exportieren.
- Es gibt verschiedene Anwendungsfälle wie fortgeschrittenes Binary-Patching, Software-Portierung und Dateiformat-Konvertierung.
- Eine präzise Datenbank ist erforderlich, und es ist wichtig, den Analyzer vor dem Export der Objektdatei auszuführen.
- Ein ähnliches Projekt mit vergleichbarer Funktionalität ist ein Decompiler wie IDA Pro.
Noch keine Kommentare.