Ruby, Kotlin, Groovy, Clojure et Jshell Support pour Ghidra.
Consultez la page des versions pour la dernière version de version du plugin. Après le téléchargement, vous pouvez l'installer dans Ghidra en allant à File->Install Extensions... , en choisissant l'option Add Extension , puis en naviguant vers le fichier zip téléchargé. Vous serez invité à redémarrer Ghidra pour que la nouvelle extension soit active.
Vous devrez alors activer le plugin avant de l'utiliser. Vous pourriez être invité à le faire la prochaine fois que vous ouvrez l'outil CodeBrowser, auquel cas vous pouvez simplement sélectionner OK. Sinon, vous pouvez l'activer manuellement en ouvrant l'outil CodeBrowser, en allant au File->Configure... et en sélectionnant le plugin RubyDragon pour Ruby, le plugin KotlinDragon pour Kotlin, le plugin JShellDragon pour l'interpréteur Java et le plugin ClojureDragon pour Clojure. Ils devraient apparaître dans la liste Ghidra Core , mais vous pouvez vérifier l'option Configure All Plugins si vous n'êtes pas en mesure de les trouver.
Si vous devez supprimer un plugin de langue, vous pouvez le faire en décochez la boîte dans la boîte de dialogue de configuration dans l'outil CodeBrowser. Si vous souhaitez supprimer l'extension dans son ensemble, vous devrez également le décocher dans le menu Install Extensions du navigateur de projet et enfin redémarrer Ghidra. Vous devrez peut-être également supprimer manuellement le dossier de votre dossier .ghidra/<ghidrainstall>/Extensions pour le supprimer complètement, en particulier si vous souhaitez charger le plugin via le plugin Eclipse pour le développement.
Une fois le plugin Rubydragon activé, vous pourrez ouvrir une session Ruby interactive à partir de l'outil CodeBrowser en allant à Window->Ruby , ou en cliquant sur l'icône Ruby dans la barre d'outils. Il s'agit d'une session IRB fournie par JRuby.
Les mêmes variables environnementales fournies dans les scripts Java et Python sont également disponibles dans cette session avec quelques extras, comme les variables globales suivantes:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection La variable $current_api est une instance de FlatProgramAPI créée avec $current_program . Cela a de nombreuses (mais pas toutes) des fonctions de commodité qui seraient disponibles dans une instance GhidraScript .
De nombreuses classes fournies par Ghidra peuvent être automatiquement importées dans le terminal interactif, vous n'avez donc pas besoin d'utiliser des instructions java_import pour les utiliser. Si vous souhaitez personnaliser cela, vous pouvez modifier le fichier de données auto-import.xml dans l'installation. Pour activer cette fonctionnalité (cela a un impact sur le temps de démarrage), vous pouvez activer l'option pertinente dans la catégorie Ruby Dragon Interpreters . Cela est également fait pour toutes les autres langues, en utilisant le même fichier de données.
Vous pouvez également écrire des scripts dans Ruby, à peu près de la même manière que vous le feriez avec Java ou Python. Ruby sera disponible en tant que nouveau type de script, et vous pouvez voir plusieurs exemples de scripts dans le répertoire Examples.Ruby du gestionnaire de scripts qui montrent l'utilisation de base des bases JRuby et Ghidra. Les scripts ont également un $script supplémentaire qui donne accès à l'instance RubyScript pour eux.
Les mêmes variables globales disponibles dans les sessions interactives sont également fournies aux scripts à utiliser de la même manière.
Vous pouvez également trouver de l'aide directement dans le menu de l'aide Ghidra (appuyez sur F1 ) sur la page Ghidra Functionality->Scripting->Ruby Interpreter .
Si vous souhaitez installer des gemmes pour être disponibles dans votre interprète ou script interactif, vous devrez prendre quelques étapes supplémentaires, selon l'isolement que vous souhaitez que l'environnement GEM soit.
Si vous utilisez quelque chose comme RVM pour gérer votre environnement Ruby, vous pouvez simplement vous fier à cela pour avoir déjà défini la variable d'environnement GEM_PATH pour pointer vers votre installation GEM. Pour un maximum de succès cependant, vous devez passer à une installation JRuBy, idéalement de la même version que l'emballage dans Rubydragon, et laissez RVM pointer vers une gemme à l'intérieur.
Si vous voulez que l'ensemble Ghidra GEM soit spécifique à Ghidra, ou si vous n'avez pas un environnement rubis en dehors de Ghidra pour pointer, vous pouvez choisir un emplacement par vous-même et définir la variable d'environnement GEM_PATH pour le pointer. Pour installer de nouveaux gemmes sur le chemin, invoquez la version de gem du pot JRuby groupé comme ainsi, modifiant la version et les chemins au besoin. Ici, le chemin de la gemme sera défini sur ~/ghidra_gems
# 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 Une fois cela fait, vous pouvez nécessiter le joyau wrapture (ou tout ce que vous avez choisi d'installer) à partir des scripts et du terminal interactif.
Si vous ne souhaitez pas créer une variable d'environnement dans votre configuration globale, vous devrez jouer avec le script utilisé pour lancer Ghidrera afin de définir GEM_PATH de manière appropriée. Vous pouvez le faire en ajoutant une commande set dans launch.bat ou launch.sh (selon votre système d'exploitation). Pour les systèmes Windows, vous devrez également supprimer le paramètre /I de la commande start utilisée pour lancer Ghidra afin que la variable d'environnement soit transmise.
Kotlin est utilisé de la même manière que le jeu d'outils Ruby avec des différences évidentes, comme être fournie par le plugin KotlinDragon et être atteint à partir de l'option de menu de Window->Kotlin . Les variables intégrées pour les scripts et la fenêtre interprète de Kotlin sont les mêmes que Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Les scripts Kotlin utilisent une extension kts car ils sont interprétés comme des scripts plutôt que d'être compilés en Java en premier.
Groovy suit les mêmes motifs que les autres langues, étant fournis dans le plugin GroovyDragon et accessibles à partir de l'option de menu Window->Groovy . Il a les mêmes variables intégrées que les autres fournissent:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Clojure suit les mêmes modèles que les autres langues, étant fournies dans le plugin ClojureDragon et la Window->Clojure .
L'interprète Clojure et les scripts ont également des liaisons qui mettent les informations d'état à leur disposition, dans l'espace de noms ghidra . Ils sont:
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 est fourni comme l'instance de FlatProgramAPI créé avec currentProgram , comme avec les autres interprètes. L'importation automatique des classes Ghidra se fait également dans l'espace de noms ghidra .
Et, comme pour Ruby, une liaison ghidra/script est disponible dans les scripts qui donne accès à l'instance ClojureScript sous-jacente. Contrairement à Ruby cependant, cette variable ne permet pas l'accès à des champs protégés ou à des méthodes privées. Ceux-ci sont également injectés dans l'espace de noms ghidra . Par exemple, pour accéder au TaskMonitor pour un script, vous pouvez simplement référencer ghidra/monitor pour faire des choses comme mettre à jour les progrès. Le script Clojure Ghidra Basics a un exemple de ce type d'accès. Ceux qui connaissent l'interface de script Python peuvent reconnaître ce paradigme, car il en est la même.
Le plugin JShell fournit un interprète Java interactif de JShell, un Java REPLICALLE inclus dans Java. Il fournit les mêmes variables intégrées qui sont disponibles dans les scripts Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Cet interprète est particulièrement pratique lors de l'écriture de scripts Java, car il vous permet de tester itérativement des extraits de code à partir du script sans avoir besoin de faire une sorte de conversion à d'autres langues comme Python ou Kotlin.
À l'heure actuelle, le moyen le plus simple de contribuer est de publier des suggestions ou de l'essayer et d'ouvrir un problème si vous avez des problèmes. Rendez-vous sur la liste des problèmes pour rejoindre la discussion!
Si vous vous sentez aventureux, vous pouvez ajouter un exemple de script dans votre langue de choix. Cela pourrait être un équivalent à l'un des scripts qui viennent emballés avec du Ghidra, ou cela pourrait être nouveau! Assurez-vous simplement d'ajouter un test pour cela dans le flux de travail GitHub Action afin qu'il ne soit pas cassé plus tard. Découvrez le dossier ghidra_scripts pour voir ce qui existe maintenant, et peut-être inspirer ce que vous pourriez ajouter.
Ou, si tout cela est un peu trop, donnez-nous un cri sur #GhidRarubydragon sur Twitter avec vos pensées!