Verschiedene Module für Ghidra, um die PC -Firmware Reverse Engineering zu unterstützen. Dies wurde als Corboot -Projekt für GSOC 2019 akzeptiert.
JDK 11 (oder neuer) und Ghidra 10.1 (oder neuer) sind erforderlich.
Das Standard -Gradle -Build -System von Ghidra wird verwendet. Stellen Sie die Umgebungsvariable GHIDRA_INSTALL_DIR vor dem Erstellen fest oder setzen Sie sie als Gradle -Eigenschaft (nützlich für das Aufbau in einer IDE):
$ export GHIDRA_INSTALL_DIR= " /path/to/ghidra "
$ ./gradlew echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties Der Modul -ZIP wird nach dist/ ausgegeben. Verwenden Sie die Datei> Erweiterungen installieren und wählen Sie das grüne Plus, um die Erweiterung zu durchsuchen. Starten Sie Ghidra neu, wenn Sie aufgefordert werden.
Für die richtige Funktionalität sollte das Plugin mit demselben JRE erstellt werden, das von Ihrer Ghidra -Installation verwendet wird. Wenn Sie über mehrere Java -Laufzeitumgebungen installiert sind, wählen Sie die richtige JRE aus, indem Sie vor dem Erstellen die Variable der JAVA_HOME -Umgebung festlegen.
Fügen Sie einem Ghidra -Projekt eine PCI -Option -ROM hinzu. Legacy X86 -Option -ROMs können direkt zur Analyse geladen werden. Stellen Sie sicher, dass das Binärformat auf X86 PCI -Options -ROM eingestellt ist, und importieren Sie das Binärdatum.
UEFI -Option ROMS oder Option ROMs, die mehr als ein Bild enthalten, sollten mit dem Dateisystemloader importiert werden. Wenn Sie aufgefordert werden, einen Importmodus auszuwählen, wählen Sie Dateisystem . Die in der Options -ROM enthaltenen Bilder werden angezeigt und können zur Analyse importiert werden. Legacy X86 -Bilder werden mit dem X86 -PCI -Options -ROM -Loader behandelt und UEFI -Bilder werden vom PE32 -Loader behandelt (Komprimierung wird unterstützt). Informationen für jedes Bild können angezeigt werden, indem Sie im Menü mit der rechten Maustaste Informationen erhalten .
Fügen Sie einem Ghidra -Projekt ein unterstütztes Firmware -Image hinzu. Der Firmware Image Loader unterstützt Intel -Bilder mit einem Flash -Deskriptor, Corboot -Bildern mit einem FMAP/CBFS -Layout und UEFI -Firmware -Volumes. Der Dateisystem -Importmodus kann verwendet werden, um eingebettete Dateien im angegebenen Firmware -Image anzuzeigen.
Beachten Sie, dass einige UEFI -Firmware -Bilder verschachtelte Firmware -Volumina in Freeform/RAW -Dateien (oder Freeform/RAW -FFS -Abschnitten) speichern können. Solche Dateien können als Firmware-Volumes importiert werden, indem im Menü mit der rechten Maustaste geöffnetes Dateisystem für die angegebene Freeform/RAW-Datei ausgewählt wird. Wenn kein verschachteltes Firmware -Volumen gefunden wird, wird eine Fehlermeldung angezeigt ( No file system provider for... ).
Das Helfer -Skript ist im Verzeichnis ghidra_scripts des Plugins enthalten, das automatisch in die Liste der Skriptverzeichnisse in Ghidra hinzugefügt werden sollte.
Führen Sie das UEFI -Helfer -Skript aus, indem Sie uefihelper.java im Fenster Skript -Manager auswählen (zugegriffen vom Fenster -> Skript -Manager ).
Um die UEFI -Datentypbibliothek zu ändern, ändern Sie die PRF -Vorlage nach Bedarf in data/gen_prf.sh und generieren Sie neue PRF -Dateien. Öffnen Sie die generierte PRF -Datei in der Datei -> analysieren Sie C -Quelle . Erstellen Sie die aktualisierte Datentypbibliothek, indem Sie analysieren , um die Datei zu erstellen . Überschreiben Sie die ursprünglichen Datentypbibliotheken in data und bauen Sie das Plugin neu auf.
Dies sind einige interessante Projekte im Zusammenhang mit der UEFI -Umkehrung:
Apache 2.0 mit einigen Ausnahmen:
src/efidecompress/c/efidecompress.c : BSD src/efidecompress/c/efidecompress.c ist eine leicht modifizierte Version von decompress.c aus uefi-firmware-parser (die selbst aus dem Original in edk2 basetools abgeleitet ist).
lib/xz-1.8.jar stammt aus dem XZ für Java-Projekt.
Der IFD -FS -Lader in src/main/java/firmware/ifd verwendete den Parser von Uefitool als Referenz.
Die GUID -Datenbank in data/guids.csv stammt von Uefitool.
Die UEFI -Datentyp -Bibliotheken in data/uefi_*.gdt wurden mit data/gen_prf.sh generiert, was teilweise auf der UEFI -Parser -Definition aus einer Ghidra Pull -Anforderung von WRFFRZ basiert. Diese Datentyp -Bibliotheken verwenden Header von EDK2 MDEPKG.
Ghidravitaloader von Xerpi wurde als Referenz für einige Teile des UEFI -Helferskripts verwendet.