Ruby,Kotlin,Groovy,Clojure和Jshell對Ghidra的支持。
查看版本頁面以獲取插件的最新版本。下載後,您可以通過轉到File->Install Extensions... ,選擇Add Extension選項,然後導航到下載的zip文件,然後將其安裝在Ghidra中。提示您將重新啟動Ghidra,以使新的擴展名活躍。
然後,您需要在使用插件之前激活該插件。下次打開CodeBrowser工具時,您可能會提示這樣做,在這種情況下,您可以選擇“確定”。否則,您可以通過打開CodeBrowser工具,轉到File->Configure...並為Ruby選擇Ruby的RubyDragon插件,Kotlindragon插件,kotlin的KotlinDragon插件, JShellDragon插件,用於Java Instrumer的Java Interver的jshelldragon插件以及用於Clojure的ClojureDragon插件。它們應該出現在Ghidra Core列表中,但是如果您找不到它們,則可以檢查Configure All Plugins選項。
如果您需要刪除語言插件,則可以通過在CodeBrowser工具中的“配置”對話框中取消選中框來進行操作。如果要整體上刪除擴展名,則還需要在項目瀏覽器的Install Extensions菜單中取消選中它,最後重新啟動Ghidra。您可能還需要手動從.ghidra/<ghidrainstall>/Extensions文件夾中刪除該文件夾,以完全刪除它,特別是如果您想通過Eclipse插件加載插件以進行開發。
啟用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類別中啟用相關選項。使用相同的數據文件也針對所有其他語言完成。
您也可以用Ruby編寫腳本,與Java或Python的方式幾乎相同。 Ruby將作為新腳本類型可用,您可以在Examples.Ruby中看到幾個示例腳本。腳本還具有附加的全局變量$script ,可為其提供對RubyScript實例的訪問。
還提供了以相同方式使用的腳本中相同的全局變量。
您還可以在Ghidra Functionality->Scripting->Ruby Interpreter頁面上的Ghidra幫助菜單(按F1 )中直接找到幫助。
如果您想在交互式解釋器或腳本中安裝寶石,則需要採取一些額外的步驟,具體取決於您希望GEM環境的隔離程度。
如果您使用RVM之類的東西來管理Ruby環境,那麼您可以簡單地依靠它來設置GEM_PATH環境變量以指向您的GEM安裝。但是,為了獲得最大的成功,您應該切換到Jruby安裝,理想情況下,與Rubydragon中包裝的版本相同,然後讓RVM指向其中的GEMSET。
如果您希望Ghidra Gem設置為Ghidra,或者如果您在Ghidra以外沒有紅寶石環境可以指向的情況下,則可以自己選擇一個位置,並設置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寶石(或任何選擇安裝的東西)。
如果您不想在全局配置中創建環境變量,則需要弄亂用於啟動Ghidra的腳本,以便設置GEM_PATH 。您可以通過在launch.bat或launch.sh中添加set命令來執行此操作(取決於您的操作系統)。對於Windows系統,您還需要從用於啟動Ghidra的start命令中刪除/I參數,以便將環境變量傳遞。
Kotlin的使用方式與Ruby Toolset幾乎相同,並具有明顯的差異,例如KotlinDragon插件提供,並從Window->Kotlin菜單選項到達。腳本的內置變量和Kotlin中的解釋器窗口與Java相同:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Kotlin腳本使用kts擴展名,因為它們被解釋為腳本,而不是首先將其編譯到Java。
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名稱空間中完成。
而且,與Ruby一樣,在腳本中提供了ghidra/script綁定,該腳本可提供對基礎ClojureScript實例的訪問。但是,與Ruby不同,此變量不允許訪問受保護的字段或私人方法。相反,這些也被注入ghidra名稱空間。例如,要訪問TaskMonitor腳本,您只需引用ghidra/monitor即可完成更新進度之類的事情。 Clojure Ghidra Basics腳本具有此類訪問的示例。那些熟悉Python腳本界面的人可以識別此範式,因為那裡的範例是一樣的。
JSHELL插件提供了Jshell的交互式Java解釋器,該解釋器是Java中包含的Java Repl。它提供了與Java腳本中可用的變量相同的內置變量:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
在編寫Java腳本時,該解釋器特別方便,因為它允許您從腳本中迭代測試代碼段,而無需對Python或Kotlin(例如Python或Kotlin)進行任何類型的轉換。
目前,最簡單的貢獻方法是發布任何建議或嘗試一下,如果您有任何問題,請打開問題。前往問題列表加入討論!
如果您喜歡冒險,可以在選擇的語言中添加示例腳本。這可能等同於包裝吉德拉(Ghidra)包裝的腳本之一,也可能是全新的!只需確保您在GitHub Action Workflow中添加測試,以便以後不會打破。查看ghidra_scripts文件夾以查看現在的內容,也許會在您可以添加的內容上汲取一些靈感。
或者,如果所有這些都有點多,請在Twitter上在Twitter上向我們大喊大叫!