Ruby, Kotlin, Groovy, Clojure und Jshell unterstützen Ghidra.
In der Seite "Releases" finden Sie den neuesten Release -Build des Plugins. Nach dem Herunterladen können Sie dies in Ghidra installieren, indem Sie zu File->Install Extensions... die Option Add Extension hinzufügen und dann zur heruntergeladenen ZIP-Datei navigieren. Sie werden aufgefordert, Ghidra neu zu starten, damit die neue Erweiterung aktiv ist.
Sie müssen das Plugin dann aktivieren, bevor Sie es verwenden. Sie werden möglicherweise aufgefordert, dies das nächste Mal zu tun, wenn Sie das CodeBrowser -Tool öffnen. In diesem Fall können Sie einfach OK auswählen. Andernfalls können Sie es manuell aktivieren, indem Sie das CodeBrowser-Tool öffnen, File->Configure... und das RubyDragon -Plugin für Ruby, das KotlinDragon -Plugin für Kotlin, das JShellDragon -Plugin für den Java-Interpreter und das ClojureDragon -Plugin für Clojure. Sie sollten in der Ghidra Core -Kernliste angezeigt werden. Sie können jedoch die Option Configure All Plugins wenn Sie sie nicht finden können.
Wenn Sie ein Sprach -Plugin entfernen müssen, können Sie dies tun, indem Sie das Feld im Dialogfeld Konfiguration im CodeBrowser -Tool deaktivieren. Wenn Sie die Erweiterung als Ganzes entfernen möchten, müssen Sie sie auch im Menü Install Extensions im Projektbrowser deaktivieren und schließlich Ghidra neu starten. Möglicherweise müssen Sie den Ordner möglicherweise auch manuell aus Ihrem .ghidra/<ghidrainstall>/Extensions -Ordner löschen, um ihn vollständig zu entfernen, insbesondere wenn Sie das Plugin über das Eclipse -Plugin für die Entwicklung laden möchten.
Sobald das Rubydragon-Plugin aktiviert ist, können Sie eine interaktive Ruby-Sitzung aus dem CodeBrowser-Tool öffnen, indem Sie zum Window->Ruby gehen oder auf das Ruby-Symbol in der Symbolleiste klicken. Dies ist eine IRB -Sitzung von JRUBY.
Die gleichen Umgebungsvariablen in Java- und Python -Skripten sind in dieser Sitzung zusammen mit einigen Extras ebenfalls verfügbar, wie die folgenden globalen Variablen:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection Die Variable $current_api ist eine Instanz von FlatProgramAPI , die mit $current_program erstellt wurden. Dies hat viele (aber nicht alle) der Komfortfunktionen, die in einer GhidraScript -Instanz verfügbar wären.
Viele von Ghidra bereitgestellte Klassen können automatisch in das interaktive Terminal importiert werden, sodass Sie keine java_import -Anweisungen verwenden müssen, um sie zu verwenden. Wenn Sie dies anpassen möchten, können Sie die Datendatei auto-import.xml in der Installation modifizieren. Um diese Funktion zu aktivieren (sie wirkt sich auf die Startzeit aus) befähigen Sie die relevante Option in der Kategorie Ruby Dragon Interpreters . Dies geschieht auch für alle anderen Sprachen mit derselben Datendatei.
Sie können auch Skripte in Ruby schreiben, ähnlich wie mit Java oder Python. Ruby wird als neuer Skripttyp erhältlich sein, und Sie können mehrere Beispielskripte in den Examples.Ruby sehen. Skripte verfügen außerdem über eine zusätzliche globale Variable $script , die Zugriff auf die RubyScript -Instanz für sie bietet.
Die gleichen globalen Variablen, die in den interaktiven Sitzungen verfügbar sind, werden auch für Skripte bereitgestellt, die auf die gleiche Weise verwendet werden können.
Sie können auch direkt im Ghidra-Hilfemenü (Drücken Sie F1 ) auf der Seite Ghidra Functionality->Scripting->Ruby Interpreter Seite.
Wenn Sie Edelsteine so installieren möchten, dass Sie in Ihrem interaktiven Interpreter oder Skripten verfügbar sind, müssen Sie einige zusätzliche Schritte unternehmen, je nachdem, wie isoliert Sie die GEM -Umgebung haben möchten.
Wenn Sie so etwas wie RVM verwenden, um Ihre Ruby -Umgebung zu verwalten, können Sie sich einfach darauf verlassen, dass die Umgebungsvariable GEM_PATH bereits auf Ihre GEM -Installation hinweist. Für den maximalen Erfolg sollten Sie jedoch zu einer JRUBY -Installation wechseln, idealerweise derselben Version wie in Rubydragon verpackt, und RVM auf ein Edelstand in diesem Sinne verweisen.
Wenn Sie möchten, dass das Ghidra -Edelstein für Ghidra spezifisch ist oder wenn Sie keine Ruby -Umgebung außerhalb von Ghidra haben, können Sie einen eigenen Ort auswählen und die Umgebungsvariable GEM_PATH festlegen, um darauf hinzuweisen. Um neue Edelsteine auf dem Pfad zu installieren, rufen Sie die Version von gem aus dem gebündelten JRUBY JAR Lust auf, wodurch die Version und die Pfade nach Bedarf geändert werden. Hier wird der Edelsteinpfad auf ~/ghidra_gems eingestellt
# from a shell environment
java -jar ~ /.ghidra/.ghidra_10.2_PUBLIC/Extensions/RubyDragon/lib/jruby-complete-9.3.9.0.jar -S gem install -i ~ /ghidra_gems wrapture REM from a windows command line
java -jar %USERPROFILE% .ghidra.ghidra_10.2_PUBLICExtensionsRubyDragonlibjruby-complete-9.3.9.0.jar -S gem install -i %USERPROFILE% ghidra_gems wrapture Sobald dies erledigt ist, können Sie das wrapture -Edelstein (oder alles, was Sie für die Installation entschieden haben) aus Skripten und dem interaktiven Terminal benötigen.
Wenn Sie in Ihrer globalen Konfiguration keine Umgebungsvariable erstellen möchten, müssen Sie sich mit dem Skript anlegen, mit dem Ghidra gestartet wird, um GEM_PATH angemessen festzulegen. Sie können dies tun, indem Sie einen set -Befehl im Start in launch.bat oder launch.sh (abhängig von Ihrem Betriebssystem) hinzufügen. Für Windows -Systeme müssen Sie auch den Parameter /I aus dem start entfernen, der zum Starten von Ghidra verwendet wird, damit die Umgebungsvariable weitergegeben wird.
Kotlin wird ähnlich Window->Kotlin das Ruby Toolset mit einigen offensichtlichen Unterschieden verwendet, z KotlinDragon Die integrierten Variablen für Skripte und das Interpreter -Fenster in Kotlin sind mit Java übereinstimmend:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Kotlin -Skripte verwenden eine kts -Erweiterung, da sie als Skripte interpretiert werden, anstatt zuerst mit Java zusammengestellt zu werden.
Groovy folgt den gleichen Mustern wie die anderen Sprachen, die im GroovyDragon Plugin bereitgestellt und aus der Window->Groovy -Menüoption erreichbar sind. Es hat die gleichen integrierten Variablen, die die anderen anbieten:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Clojure folgt den gleichen Mustern wie die anderen Sprachen, die im ClojureDragon -Plugin und im Menüpunktfenster- Window->Clojure bereitgestellt werden.
Der Clojure -Interpreter und die Skripte haben auch Bindungen, die die staatlichen Informationen im Rahmen des ghidra -Namespace zur Verfügung stellen. Sie sind:
ghidra/current-address
ghidra/current-api
ghidra/current-data
ghidra/current-function
ghidra/current-highlight
ghidra/current-instruction
ghidra/current-location
ghidra/current-program
ghidra/current-selection ghidra/current-api wird als Instanz von FlatProgramAPI bereitgestellt, die mit currentProgram erstellt wurden, wie bei den anderen Dolmetschern. Der automatische Import von Ghidra -Klassen erfolgt auch im ghidra -Namespace.
Und wie bei Ruby ist in Skripten eine ghidra/script -Bindung verfügbar, die Zugriff auf die zugrunde liegende ClojureScript -Instanz ermöglicht. Im Gegensatz zu Ruby ermöglicht diese Variable jedoch keinen Zugriff auf geschützte Felder oder private Methoden. Diese werden stattdessen auch in den ghidra -Namespace injiziert. Um beispielsweise auf den TaskMonitor für ein Skript zugreifen zu können, können Sie einfach auf ghidra/monitor verweisen, um Dinge wie die Aktualisierung des Fortschritts zu tun. Das Clojure Ghidra Basics Skript hat ein Beispiel für diese Art von Zugriff. Diejenigen, die mit der Python Scripting -Schnittstelle vertraut sind, können dieses Paradigma erkennen, da es dort dasselbe ist.
Das JSHELL -Plugin bietet einen interaktiven Java -Dolmetscher von JSHELL, einem in Java enthaltenen Java -Repl. Es bietet die gleichen integrierten Variablen, die in Java -Skripten erhältlich sind:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Dieser Interpreter ist besonders praktisch beim Schreiben von Java -Skripten, da Sie es mit iterativen Testen von Code -Snippets aus dem Skript testen können, ohne irgendeine Art von Konvertierung in andere Sprachen wie Python oder Kotlin durchzuführen.
Derzeit ist der einfachste Weg, um Vorschläge zu veröffentlichen oder es auszuprobieren und ein Problem zu eröffnen, wenn Sie Probleme haben. Besuchen Sie die Ausgabenliste, um der Diskussion beizutreten!
Wenn Sie sich abenteuerlustig fühlen, können Sie in Ihrer Sprache ein Beispielskript hinzufügen. Dies könnte ein Äquivalent zu einem der Skripte sein, die mit Ghidra verpackt werden, oder es könnte alles neu sein! Stellen Sie nur sicher, dass Sie einen Test dafür im GitHub -Action -Workflow hinzufügen, damit er später nicht gebrochen wird. Schauen Sie sich den Ordner ghidra_scripts an, um zu sehen, was jetzt da ist, und lassen Sie sich vielleicht inspirieren, was Sie hinzufügen können.
Oder, wenn das alles ein bisschen viel ist, schieben Sie uns einfach bei #Ghidrarubydragon auf Twitter mit Ihren Gedanken!