Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
GhidraEmu — Native Pcode emulator | Kitploit
Tools/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

Repository anzeigen
30523vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

GhidraEmu



Dieses experimentelle Ghidra-Plugin ermöglicht es Ihnen, einfach mit nativer Pcode-Emulation zu arbeiten. Skripte werden nicht mehr benötigt, verwenden Sie es einfach direkt aus Ghidra. Es kann besonders nützlich sein, wenn Sie mit einer Vielzahl exotischer Prozessoren arbeiten, die von gängigen Emulatoren nicht unterstützt werden.

Wenn der Prozessor/die VM von Ghidra für das Reverse Engineering unterstützt wird, kann er emuliert werden! Zum Beispiel wird unten die Emulation von eBPF-Anweisungen demonstriert:

GhidraEmu

Was es kann

Im Wesentlichen ist das Plugin ein erweiterter Wrapper um die Klassen im Paket ghidra.app.emulator. Folgendes wurde implementiert:

  • Funktioniert mit allen Architekturen, die Ghidra unterstützt, sodass Sie exotische Prozessoren hinzufügen und emulieren können
  • CPU-Kontext-, Stack- und Heap-Emulation
  • Anwenden gepatchter Bytes über die Ghidra-GUI, um den Verlauf der Emulation zu ändern
  • Haltepunkte zur Steuerung des Emulationsprozesses
  • Anzeige geänderter Bytes während der Emulation im ByteViewer
  • Hooking einiger libc-Funktionen (obwohl dies noch dürftig ist)

Obwohl PCode-Emulation idealerweise eine Vereinheitlichung bedeutet, benötigen die meisten Prozessoren ihren eigenen Ansatz. Zögern Sie nicht, alle Probleme zu melden, auf die Sie stoßen. Ich würde wirklich gerne alle Prozessoren testen, aber das ist kaum möglich.

Was es nicht kann

  • Hineinsteppen in externe Bibliotheksfunktionen (EmulatorHelper-Einschränkungen)
  • Syscall-Emulation

Alle Plugin-Fenster in einer Übersicht

GhidraEmu

Funktionen

Menüfenster

Enthält alle Plugin-Fenster: Stack-Ansicht, Register, Haltepunkt-Ansicht und Hauptfenster.

GhidraEmu-Menü

Popup-Fenster

Enthält Hotkeys zum Festlegen von Start und Ende der Emulation, von Haltepunkten und zum Anwenden geänderter Bytes auf den Emulatorzustand.

Registeransicht

Ändern Sie die Register nach Belieben. Das Setzen des Link-Registers (grüner Pfeil) hilft dem Emulator zu verstehen, welches Register die Rücksprungadresse enthält. Das Plugin weiß, wie das über den Stack, das LR-Register sowie AARCH64- und MIPS-Register funktioniert. Wenn Sie ein exotisches Register haben, wählen Sie das Link-Register aus und drücken Sie die Schaltfläche.

Stack-Ansicht

Wenn Sie Ihr Programm im CodeBrowser öffnen, bildet GhidraEmu den Stack-Speicherplatz automatisch ab. Der Stack-Pointer wird in der Mitte des Stack-Bereichs gesetzt. Dadurch können Sie Werte am oberen oder unteren Ende der Stack-Frames setzen. Scrollen Sie, wenn es beim Aktualisieren oder Zurücksetzen zu Aussetzern kommt. Während der Emulation weist das Plugin automatisch mehr Speicherplatz für den Stack zu, falls das Programm diesen benötigt.

Haltepunkt-Ansicht

RAM-Ansicht

Wenn sich während der Emulation Bytes ändern, sehen Sie diese im klassischen ByteViewer. Keine Sorge, nach dem Drücken der „Reset“-Schaltfläche werden sie auf ihre ursprünglichen Werte zurückgesetzt.

Gepatchte Bytes anwenden

Wenn Sie Änderungen vorgenommen haben, teilen Sie dem Emulator die geänderten Bytes mit (der Stack wird automatisch aktualisiert – nicht nötig). Wählen Sie sie nach dem Ändern aus (sie werden grün) und drücken Sie diese Option (oder verwenden Sie den Hotkey „M“).

GhidraEmu – Gepatchte Bytes anwenden

Konsole

Hier gibt das Plugin Ausgabeinformationen aus. Zum Beispiel Emulationsfehlermeldungen wie diese:

GhidraEmu-Konsole

Neue Funktion - Jump Over

Die Funktion „Jump Over“ ermöglicht es Ihnen, eine Anweisung zu überspringen, wenn Sie die aktuelle aus irgendeinem Grund nicht emulieren möchten. Da der Emulationsprozess abgebrochen wird, wenn ein Versuch erkannt wird, nicht initialisierten Speicher zu lesen, können Sie ihn mit dieser Funktion umgehen. Sehen Sie sich ein Beispiel an. Hier ist eine der ersten Anweisungen in vielen x86_64-Programmen, das Sichern des Canary-Werts auf dem Stack:

MOV RAX, qword ptr FS:[0x28]

Wir versuchen einfach, ein wenig zu schummeln und darüber zu springen, indem wir den PC-Wert erhöhen. Halten Sie dazu an der Anweisung an, die Sie nicht emulieren möchten, und drücken Sie die J-Taste. Andernfalls würde ein weiterer Schritt zu einem Fehler beim Lesen nicht initialisierten Speichers führen.

Jump Over

Neue Funktion - Step Over

Wenn Sie an einer Anweisung anhalten, die zu einer Unterroutine (internem Aufruf) führt, und Sie alles bis zur nächsten Anweisung emulieren möchten (klassisches „Step Over“), drücken Sie die F6-Taste, und genau das wird passieren:

Step Over

Vor dem Start

Einige wichtige Punkte, die Sie beachten sollten:

  • Vergessen Sie nicht, Ihr Programm in Ghidra zu analysieren, der Emulator hängt davon ab.
  • Wie bereits erwähnt, setzen Sie das Link-Register, wenn Sie einen exotischen Prozessor/eine exotische VM haben.
  • Wenn der Prozessor Ihrer Binärdatei gemäß der Spezifikation bestimmte Speichersegmente benötigt, vergessen Sie nicht, diese im Ghidra-MemoryMap-Fenster zu erstellen und mit Nullen zu initialisieren. Andernfalls beschwert sich der Emulator bei Lese-/Schreibvorgängen über unbekannte Speicherbereiche und stoppt den Emulationsprozess. Wenn ein Speicherblock vorhanden, aber nicht mit Nullen initialisiert ist und vom Emulator benötigt wird, versucht das Plugin, ihn zu initialisieren, damit die Emulation fortgesetzt wird.
  • Wenn Sie über den ByteViewer Bytes geändert haben, stellt das Plugin diese beim Zurücksetzen des Emulationszustands nicht auf ihre ursprünglichen Werte zurück.
  • Bevor Sie das Projekt in Ghidra schließen, sollten Sie die „Reset“-Schaltfläche drücken und den Zustand der letzten Emulation zurücksetzen, falls dies noch nicht geschehen ist. Dies ist wichtig, da beim Schließen Transaktionen zum Neufärben verfolgter Anweisungen im Listing sowie Transaktionen zur Wiederherstellung der Programmbytes nach der Emulation nicht ausgeführt werden. Dies kann nicht nur dazu führen, dass Sie den „alten gelben Papagei“ sehen – was das geringste Problem ist –, sondern auch dazu, dass die geänderten Bytes so bleiben und nicht zu ihren ursprünglichen Werten zurückkehren (sofern das Projekt nicht natürlich in Ghidra zurückgerollt wird).

Installation

  1. Verwenden Sie Gradle, um die Erweiterung zu bauen: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle und verwenden Sie Ghidra, um sie zu installieren: File → Install Extensions...

  2. Gehen Sie im CodeBrowser zu File → Configure → Miscellaneous und aktivieren Sie das Kontrollkästchen für das GhidraEmu-Plugin.

Feedback

Sind Ihnen bei der Verwendung des Plugins Fehler begegnet oder haben Sie Ideen für Verbesserungen? Scheuen Sie sich nicht, ein neues Issue zu eröffnen, und ich werde mich darum kümmern.

Zukünftige Arbeit

Die Einschränkungen des EmulatorHelper erlauben nicht, den Programm-Adressraum in einem anderen zu verwenden. Ihre externe Shared Library wird zum Beispiel also nie etwas über den Programm-Adressraum erfahren und umgekehrt. Sie können das also nicht als einen Prozess mit einem Adressraum emulieren. Lassen Sie mich wissen, falls ich hier etwas übersehe.

Tool herunterladen