Руби, Котлин, Грейв, Клоджюр и джшлл.
Ознакомьтесь с страницей релизов для последней сборки плагина. После загрузки вы можете установить это в Ghidra, перейдя на File->Install Extensions... , выбрав опцию Add Extension , а затем перейдя в загруженный zip-файл. Вам будет предложено перезапустить Ghidra, чтобы новое расширение было активным.
Затем вам нужно будет активировать плагин перед его использованием. Вам может быть предложено сделать это в следующий раз, когда вы откроете инструмент CodeBrowser, и в этом случае вы можете просто выбрать OK. В противном случае вы можете вручную активировать его, открыв инструмент CodeBrowser, отправившись в File->Configure... и выбрав плагин RubyDragon для Ruby, плагин KotlinDragon для Kotlin, плагин JShellDragon для интерпретатора Java и плагин ClojureDragon для Clojure. Они должны появиться в списке Ghidra Core , но вы можете проверить опцию Configure All Plugins если вы не сможете их найти.
Если вам нужно удалить языковой плагин, вы можете сделать это, не проверяя поле в диалоговом окне «Конфигурация» в инструменте CodeBrowser. Если вы хотите удалить расширение в целом, вам также необходимо снять его в меню Install Extensions из браузера проекта и, наконец, перезапустить Ghidra. Вам также может потребоваться вручную удалить папку из вашей папки .ghidra/<ghidrainstall>/Extensions чтобы полностью его удалить, особенно если вы хотите загрузить плагин через плагин Eclipse для разработки.
Как только плагин Rubydragon будет включен, вы сможете открыть интерактивный сеанс Ruby из инструмента Codebrowser, перейдя в Window->Ruby или нажав на значок Ruby на панели инструментов. Это сессия IRB, предоставленная Jruby.
Те же переменные окружающей среды, предоставленные в сценариях Java и Python, также доступны в этом сеансе вместе с несколькими дополнительными дополнениями, в качестве следующих глобальных переменных:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection Переменная $current_api является экземпляром FlatProgramAPI , созданной с помощью $current_program . У этого есть много (но не все) функций удобства, которые будут доступны в экземпляре GhidraScript .
Многие классы, предоставленные Ghidra, могут быть автоматически импортированы в интерактивный терминал, поэтому вам не нужно использовать операторы java_import для их использования. Если вы хотите настроить это, вы можете изменить файл данных auto-import.xml в установке. Чтобы включить эту функцию (она влияет на время запуска), вы можете включить соответствующий вариант в категории Ruby Dragon Interpreters . Это делается и для всех других языков, используя один и тот же файл данных.
Вы также можете написать сценарии в Ruby, так же, как и с Java или Python. Ruby будет доступен в виде нового типа скрипта, и вы можете увидеть несколько примеров сценариев в Examples.Ruby Рубийный каталог менеджера сценариев, которые показывают базовое использование оснований как Jruby, так и Ghidra. Сценарии также имеют дополнительный глобальный $script переменной, который обеспечивает доступ к экземпляру RubyScript для них.
Те же глобальные переменные, доступные в интерактивных сессиях, также предоставляются для сценариев для использования таким же образом.
Вы также можете найти помощь непосредственно в меню справки Ghidra (нажмите F1 ) в Ghidra Functionality->Scripting->Ruby Interpreter .
Если вы хотите установить драгоценные камни, чтобы быть доступными в вашем интерактивном переводчике или сценариях, вам нужно будет предпринять несколько дополнительных шагов, в зависимости от того, насколько изолирована вы хотите, чтобы среда GEM была.
Если вы используете что -то вроде RVM для управления вашей средой Ruby, вы можете просто полагаться на это, чтобы уже установить переменную среды GEM_PATH , чтобы указать на установку GEM. Для максимального успеха, однако, вам следует переключиться на установку Jruby, в идеале из той же версии, что и упакован в Rubydragon, и позволить RVM указывать на драгоценность внутри этого.
Если вы хотите, чтобы Gemra Gem был специфичным для Ghidra, или если у вас нет рубиновой среды за пределами Ghidra, вы можете выбрать местоположение самостоятельно и установить переменную среды GEM_PATH , чтобы указывать на это. Чтобы установить новые драгоценные камни на путь, вызовите версию gem из пакетного Jruby Jar, как SO, изменяя версию и пути по мере необходимости. Здесь путь драгоценного камня будет установлен на ~/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 . Вы можете сделать это, добавив команду set в launch.bat или launch.sh (в зависимости от вашей ОС). Для систем Windows вам также необходимо удалить параметр /I из команды start , используемой для запуска Ghidra, чтобы переменная среды была передана.
Kotlin используется во многом так же, как и набор инструментов Ruby, с некоторыми очевидными различиями, такими как предоставление плагином KotlinDragon и достижение из опции меню Window->Kotlin . Встроенные переменные для сценариев и окно интерпретатора в котлине такие же, как Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Сценарии Kotlin используют расширение kts , так как они интерпретируются как сценарии, а не скомпилируются в Java.
Groovy следует тем же шаблонам, что и другие языки, предоставляемые в плагине GroovyDragon и доступны из опции Window->Groovy Menu. Он имеет те же встроенные переменные, которые предоставляют другие:
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 предоставляется в качестве экземпляра FlatProgramAPI , созданного с помощью currentProgram , как и у других переводчиков. Автоматический импорт классов Ghidra также проводится в пространстве имен ghidra .
И, как и в случае с Ruby, в сценариях доступно привязка ghidra/script , которое обеспечивает доступ к базовому экземпляру ClojureScript . В отличие от Ruby, однако, эта переменная не допускает доступ к защищенным полям или частным методам. Вместо этого они также вводят в пространство имен ghidra . Например, чтобы получить доступ к TaskMonitor для сценария, вы можете просто ссылаться на ghidra/monitor чтобы сделать такие вещи, как обновление прогресса. Сценарий Clojure Ghidra Basics имеет пример этого типа доступа. Те, кто знаком с интерфейсом сценариев Python, могут распознать эту парадигму, так как она такая же.
Плагин JShell предоставляет интерактивную Java -переводчик от JSHELL, Java Repl, включенной в Java. Он предоставляет те же встроенные переменные, которые доступны в сценариях Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Этот переводчик особенно удобен при написании сценариев Java, поскольку он позволяет итеративно проверять фрагменты кода из сценария, не требуя какого -либо преобразования в другие языки, такие как Python или Kotlin.
Прямо сейчас самый простой способ внести свой вклад - опубликовать какие -либо предложения или попробовать их и открыть проблему, если у вас есть какие -либо проблемы. Перейдите в список выпусков, чтобы присоединиться к обсуждению!
Если вы чувствуете себя предприимчивым, вы можете добавить пример сценария на своем языке выбора. Это может быть эквивалентом одного из сценариев, упакованных с Ghidra, или это может быть все новое! Просто убедитесь, что вы добавили тест для него в рабочем процессе действия GitHub, чтобы он не сломался позже. Проверьте папку ghidra_scripts , чтобы увидеть, что сейчас там, и, возможно, нарисуйте некоторое вдохновение на то, что вы могли бы добавить.
Или, если все это немного много, просто дайте нам крик на #ghidrarubydragon в Твиттере со своими мыслями!