Ruby, Kotlin, Groovy, Clojure e Jshell apoiam Ghidra.
Confira a página de lançamentos para obter a versão mais recente de lançamento do plug -in. Após o download, você pode instalar isso em Ghidra, indo para File->Install Extensions... , escolhendo a opção Add Extension e navegar até o arquivo zip baixado. Você será solicitado a reiniciar Ghidra para que a nova extensão esteja ativa.
Você precisará ativar o plug -in antes de usá -lo. Você pode ser solicitado a fazer isso na próxima vez que abrir a ferramenta CodeBrowser, nesse caso, pode simplesmente selecionar OK. RubyDragon KotlinDragon JShellDragon você pode ativá-lo manualmente abrindo ClojureDragon ferramenta CodeBrowser, File->Configure... para arquivar Eles devem aparecer na listagem Ghidra Core , mas você pode verificar a opção Configure All Plugins se não conseguir encontrá -los.
Se você precisar remover um plug -in de idiomas, poderá fazê -lo desmarcando a caixa na caixa de diálogo Configuração na ferramenta CodeBrowser. Se você deseja remover a extensão como um todo, também precisará desmarcar -o no menu Install Extensions do navegador do projeto e, finalmente, reiniciar Ghidra. Você também pode precisar excluir manualmente a pasta da sua pasta .ghidra/<ghidrainstall>/Extensions para removê -la completamente, principalmente se você deseja carregar o plug -in através do plug -in Eclipse para desenvolvimento.
Depois que o plug-in Rubydragon estiver ativado, você poderá abrir uma sessão interativa do Ruby da ferramenta CodeBrowser indo para a Window->Ruby ou clicando no ícone Ruby na barra de ferramentas. Esta é uma sessão do IRB fornecida por Jruby.
As mesmas variáveis ambientais fornecidas nos scripts Java e Python também estão disponíveis nesta sessão, juntamente com alguns extras, como as seguintes variáveis globais:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection A variável $current_api é uma instância de FlatProgramAPI criada com $current_program . Isso tem muitas (mas não todas) das funções de conveniência que estariam disponíveis em uma instância GhidraScript .
Muitas classes fornecidas pela GHIDRA podem ser importadas automaticamente para o terminal interativo, para que você não precise usar as instruções java_import para usá -las. Se você deseja personalizar isso, poderá modificar o arquivo de dados auto-import.xml na instalação. Para ativar esse recurso (afeta o tempo de inicialização), você pode ativar a opção relevante na categoria Ruby Dragon Interpreters . Isso também é feito para todos os outros idiomas, usando o mesmo arquivo de dados.
Você também pode escrever scripts em Ruby, da mesma maneira que faria com Java ou Python. O Ruby estará disponível como um novo tipo de script e você poderá ver vários scripts de exemplo no diretório Examples.Ruby do gerente de scripts que mostram o uso básico dos princípios básicos de Jruby e Ghidra. Os scripts também possuem um $script global adicional que fornece acesso à instância RubyScript para eles.
As mesmas variáveis globais disponíveis nas sessões interativas também são fornecidas para os scripts usarem da mesma maneira.
Você também pode encontrar ajuda diretamente no menu Ghidra Help (pressione F1 ) na Ghidra Functionality->Scripting->Ruby Interpreter .
Se você deseja instalar o GEMS para estar disponível em seu intérprete interativo ou scripts, precisará tomar algumas etapas extras, dependendo de como isolada você deseja que o ambiente da GEM seja.
Se você estiver usando algo como RVM para gerenciar seu ambiente Ruby, pode simplesmente confiar nisso para já definir a variável de ambiente GEM_PATH para apontar para a instalação da GEM. Para obter o máximo sucesso, no entanto, você deve mudar para uma instalação Jruby, idealmente da mesma versão que embalada em Rubydragon, e deixe o RVM apontar para um gemset dentro disso.
Se você deseja que a geme ghidra seja específica para Ghidra, ou se você não tiver um ambiente de rubi fora de Ghidra para apontar, poderá escolher um local por conta própria e definir a variável de ambiente GEM_PATH para apontar para isso. Para instalar novas gemas no caminho, invoce a versão do gem do conjunto Jruby Jar, mudando a versão e os caminhos, conforme necessário. Aqui o caminho ~/ghidra_gems gem
# 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 Uma vez feito isso, você pode exigir a gema wrapture (ou o que você escolheu instalar) dos scripts e do terminal interativo.
Se você não deseja criar uma variável de ambiente em sua configuração global, precisará mexer com o script usado para iniciar o ghidra para definir GEM_PATH adequadamente. Você pode fazer isso adicionando um comando set em launch.bat ou launch.sh (dependendo do seu sistema operacional). Para os sistemas Windows, você também precisará remover o parâmetro /I do comando start usado para iniciar o ghidra, para que a variável de ambiente seja transmitida.
O Kotlin é usado da mesma maneira que o conjunto de ferramentas Ruby com algumas diferenças óbvias, como fornecido pelo plug-in KotlinDragon e sendo alcançado da opção de menu da Window->Kotlin . As variáveis embutidas para scripts e a janela de intérpretes em Kotlin são as mesmas que Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Os scripts Kotlin usam uma extensão kts , pois são interpretados como scripts, em vez de serem compilados primeiro ao Java.
Groovy segue os mesmos padrões que os outros idiomas, sendo fornecidos no plug-in GroovyDragon e acessíveis da opção de menu Window->Groovy . Possui as mesmas variáveis internas que os outros fornecem:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
O Clojure segue os mesmos padrões que os outros idiomas, sendo fornecidos no plug-in ClojureDragon e na Window->Clojure .
O intérprete e os scripts da clojure também têm ligações que disponibilizam as informações do estado, dentro do espaço para nome de ghidra . Eles são:
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 é fornecido como a instância do FlatProgramAPI criada com currentProgram , como nos outros intérpretes. A importação automática das classes de Ghidra também é feita no espaço para nome de ghidra .
E, como no Ruby, uma ligação ghidra/script está disponível em scripts que fornecem acesso à instância subjacente ClojureScript . Ao contrário do Ruby, no entanto, essa variável não permite o acesso a campos protegidos ou métodos privados. Em vez disso, estes são injetados no espaço para nome de ghidra . Por exemplo, para acessar o TaskMonitor para um script, você pode simplesmente fazer referência ghidra/monitor para fazer coisas como atualizar o progresso. O script básico de Clojure Ghidra tem um exemplo desse tipo de acesso. Aqueles familiarizados com a interface de script python podem reconhecer esse paradigma, pois é o mesmo lá.
O plug -in jshell fornece um intérprete Java interativo da Jshell, um REPL Java incluído no Java. Ele fornece as mesmas variáveis embutidas disponíveis nos scripts Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Esse intérprete é especialmente útil ao escrever scripts Java, pois permite testar iterativamente os trechos de código do script sem precisar fazer qualquer tipo de conversão para outros idiomas como Python ou Kotlin.
No momento, a maneira mais fácil de contribuir é postar sugestões ou experimentá -lo e abrir um problema se tiver algum problema. Vá até a lista de questões para participar da discussão!
Se você estiver se sentindo aventureiro, pode adicionar um exemplo de script no seu idioma de escolha. Isso pode ser equivalente a um dos scripts que vêm embalados com Ghidra, ou pode ser tudo novo! Apenas certifique -se de adicionar um teste para ele no fluxo de trabalho de ação do GitHub para que ele não seja quebrado mais tarde. Confira a pasta ghidra_scripts para ver o que está lá agora e talvez se inspire no que você poderia adicionar.
Ou, se tudo isso for um pouco demais, basta nos dar um grito em #ghidrarubydragon no Twitter com seus pensamentos!