1 Punkte von GN⁺ 2024-08-24 | Noch keine Kommentare. | Auf WhatsApp teilen

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_DIR auf das Ghidra-Installationsverzeichnis setzen
  • Den Befehl gradle buildExtension ausfü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 über File > Configure aktivieren

Verwendung

  1. In der Listing-Ansicht eine Adressmenge auswählen
  2. Den Analyzer Relocation table synthesizer ausführen (auch im One-Shot-Modus nutzbar)
  3. Über File > Export Program… den Exporter für relocatable Objektdateien aufrufen
  4. 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.

Noch keine Kommentare.