Ruby、Kotlin、Groovy、Clojure、およびJshell Support for Ghidra。
プラグインの最新リリースビルドのリリースページをご覧ください。ダウンロード後、これをghidraにインストールしてFile->Install Extensions...て、 Add Extensionオプションを選択してから、ダウンロードしたzipファイルに移動します。新しい拡張機能がアクティブになるようにGhidraを再起動するように求められます。
その後、プラグインを使用する前にアクティブ化する必要があります。次回CodeBrowserツールを開くときにこれを行うように求められる場合があります。その場合、OKを選択するだけです。それ以外の場合は、コードブラウザーツールを開いてFile->Configure... 、およびRubyのRubyDragonプラグイン、Kotlin用のKotlinDragonプラグイン、Javaインタープレーター用のJShellDragonプラグイン、Clojure用のClojureDragonプラグインを選択して、手動でアクティブにすることができます。 Ghidra Coreリストに表示されるはずですが、見つけられない場合は、 Configure All Pluginsを確認できます。
言語プラグインを削除する必要がある場合は、CodeBrowserツールの[構成]ダイアログでボックスをチェックすることでそうすることができます。拡張機能全体を削除する場合は、プロジェクトブラウザーからInstall Extensionsメニューでチェックし、最後にGhidraを再起動する必要があります。また、特に開発のためにEclipseプラグインを介してプラグインをロードする場合は、 .ghidra/<ghidrainstall>/Extensionsフォルダーからフォルダーを手動で削除する必要があります。
Rubydragonプラグインが有効になると、 Window->Rubyに移動するか、ツールバーのRubyアイコンをクリックすることにより、CodeBrowserツールからインタラクティブRubyセッションを開くことができます。これは、Jrubyが提供するIRBセッションです。
JavaおよびPythonスクリプトで提供されるのと同じ環境変数も、次のグローバル変数として、いくつかのエキストラとともにこのセッションで利用できます。
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection $current_api変数は、 $current_programで作成されたFlatProgramAPIのインスタンスです。これには、 GhidraScriptインスタンス内で利用可能な利便性関数の多く(すべてではありませんが)があります。
Ghidraが提供する多くのクラスは、インタラクティブ端末に自動的にインポートできるため、 java_importステートメントを使用して使用する必要はありません。これをカスタマイズする場合は、インストールでauto-import.xmlデータファイルを変更できます。この機能を有効にするため(スタートアップ時間に影響を与えます)、 Ruby Dragon Interpretersカテゴリで関連するオプションを有効にすることができます。これは、同じデータファイルを使用して、他のすべての言語でも行われます。
また、JavaやPythonとほぼ同じ方法で、Rubyでスクリプトを書くこともできます。 Rubyは新しいスクリプトタイプとして利用可能になり、JrubyとGhidraの両方の基本の基本的な使用法を示すスクリプトマネージャーのRuby Examples.Rubyに、いくつかの例のスクリプトを表示できます。スクリプトには、 RubyScriptインスタンスへのアクセスを提供する追加のグローバル変数$scriptもあります。
インタラクティブセッションで利用可能な同じグローバル変数も、スクリプトが同じ方法で使用するために提供されています。
また、 Ghidra Functionality->Scripting->Ruby InterpreterページのGhidra Helpメニュー( F1を押す)で直接ヘルプを見つけることができます。
インタラクティブなインタープリターまたはスクリプトで宝石をインストールしたい場合は、GEM環境の孤立に応じて、いくつかの追加の手順を実行する必要があります。
RVMのようなものを使用してRuby環境を管理する場合は、 GEM_PATH環境変数を既に設定してGEMのインストールを指すように頼るだけです。ただし、最大限の成功のために、Rubydragonでパッケージ化されたものと同じバージョンのJrubyインストールに切り替えて、RVMがその中のGemsetを指すようにする必要があります。
Ghidra GemセットをGhidraに固有のものにしたい場合、またはGhidraの外にRuby環境がない場合は、自分で場所を選択し、 GEM_PATH環境変数を設定してそれを指すことができます。新しい宝石をパスにインストールするには、必要に応じてバージョンとパスを変更して、バンドルされたJruby Jarのgemのバージョンを呼び出します。ここで、宝石のパスは~/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これが完了したら、スクリプトとインタラクティブ端末からwraptureジェム(またはインストールすることを選択したもの)を要求できます。
グローバル構成で環境変数を作成したくない場合は、 GEM_PATH適切に設定するためにGhidraを起動するために使用されるスクリプトを台無しにする必要があります。これを行うには、 launch.batまたはlaunch.shにsetコマンドを追加して(OSに応じて)。 Windowsシステムの場合、環境変数が渡されるようにGhidraを起動するために使用されるstartコマンドから/Iパラメーターを削除する必要があります。
Kotlinは、 KotlinDragonプラグインによって提供されたり、 Window->Kotlinメニューオプションから到達したりするなど、いくつかの明らかな違いがあるRubyツールセットとほぼ同じ方法で使用されます。スクリプトの変数とコトリンのインタープリターウィンドウは、Javaと同じです。
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Kotlinスクリプトは、最初にJavaにコンパイルされるのではなく、スクリプトとして解釈されるため、 kts拡張機能を使用します。
Groovyは、 GroovyDragonプラグインで提供され、 Window->Groovyメニューオプションから到達可能である他の言語と同じパターンに従います。他の人が提供するのと同じ組み込み変数があります。
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Clojureは、 ClojureDragonプラグインとメニュー項目Window->Clojureで提供されている他の言語と同じパターンに従います。
Clojureの通訳とスクリプトには、 ghidra名前空間内で、州の情報を利用可能にするバインディングもあります。彼らです:
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他の通訳者と同様に、 currentProgramで作成されたFlatProgramAPIのインスタンスとして提供されます。 Ghidraクラスの自動インポートは、 ghidra Namespaceでも行われます。
また、Rubyと同様に、 ghidra/script Bindingは、基礎となるClojureScriptインスタンスへのアクセスを提供するスクリプト内で利用できます。ただし、Rubyとは異なり、この変数は保護されたフィールドやプライベートメソッドへのアクセスを許可していません。代わりに、これらはghidra名前空間にも注入されます。たとえば、スクリプトのTaskMonitorにアクセスするには、 ghidra/monitorを参照して、進捗状況を更新するなどのことを実行できます。 Clojure Ghidra Basicsスクリプトには、このタイプのアクセスの例があります。 Pythonスクリプトインターフェイスに精通している人は、このパラダイムが同じであるため、このパラダイムを認識する場合があります。
JShellプラグインは、Javaに含まれるJava ReplであるJshellによるインタラクティブなJavaインタープリターを提供します。 Javaスクリプトで使用できる同じ組み込み変数を提供します。
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
この通訳は、Javaスクリプトを書くときに特に便利です。これにより、PythonやKotlinなどの他の言語への変換を行う必要なく、スクリプトのコードのスニペットを繰り返しテストすることができます。
現在、貢献する最も簡単な方法は、提案を投稿するか、それを試して問題がある場合は問題を開くことです。ディスカッションに参加するために問題リストにアクセスしてください!
冒険心を感じている場合は、選択した言語にサンプルスクリプトを追加できます。これは、Ghidraでパッケージ化されたスクリプトの1つに相当するか、まったく新しいスクリプトに相当する可能性があります。 GitHubアクションワークフローにテストを追加して、後で壊れないようにしてください。 ghidra_scriptsフォルダーをチェックして、今何があるかを確認し、おそらく追加できるものにインスピレーションを得てください。
または、そのすべてが少し大きい場合は、Twitterの#Ghidrarubydragonであなたの考えを叫んでください!