El apoyo de Ruby, Kotlin, Groovy, Clojure y Jshell para Ghidra.
Consulte la página de lanzamientos para ver la última versión de lanzamiento del complemento. Después de descargar, puede instalar esto en Ghidra yendo a File->Install Extensions... , eligiendo la opción Add Extension y luego navegar al archivo zip descargado. Se le pedirá que reinicie Ghidra para que la nueva extensión esté activa.
Luego deberá activar el complemento antes de usarlo. Es posible que se le solicite que haga esto la próxima vez que abra la herramienta CodeBrowser, en cuyo caso simplemente puede seleccionar OK. De lo contrario, puede activarlo manualmente abriendo la herramienta CodeBrowser, yendo a File->Configure... y seleccionando el complemento RubyDragon para Ruby, el complemento KotlinDragon para Kotlin, el complemento JShellDragon para el Interpreter Java y el complemento ClojureDragon para Clojure. Deben aparecer en la lista Ghidra Core , pero puede verificar la opción Configure All Plugins si no puede encontrarlos.
Si necesita eliminar un complemento de idioma, puede hacerlo desembolsando el cuadro en el cuadro de diálogo de configuración en la herramienta CodeBrowser. Si desea eliminar la extensión en su conjunto, también deberá desmarcarla en el menú Install Extensions del navegador del proyecto y finalmente reiniciar Ghidra. También es posible que deba eliminar manualmente la carpeta de su carpeta .ghidra/<ghidrainstall>/Extensions para eliminarla por completo, especialmente si desea cargar el complemento a través del complemento Eclipse para el desarrollo.
Una vez que el complemento RubyDragon esté habilitado, podrá abrir una sesión de Ruby interactiva desde la herramienta CodeBrowser yendo a Window->Ruby , o haciendo clic en el icono Ruby en la barra de herramientas. Esta es una sesión de IRB proporcionada por Jruby.
Las mismas variables ambientales proporcionadas en los guiones de Java y Python también están disponibles en esta sesión junto con algunos extras, como las siguientes variables globales:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection La variable $current_api es una instancia de FlatProgramAPI creado con $current_program . Esto tiene muchas (pero no todas) de las funciones de conveniencia que estarían disponibles dentro de una instancia GhidraScript .
Muchas clases proporcionadas por Ghidra se pueden importar automáticamente al terminal interactivo para que no necesite usar las declaraciones java_import para usarlas. Si desea personalizar esto, puede modificar el archivo de datos auto-import.xml en la instalación. Para habilitar esta característica (impacta el tiempo de inicio), puede habilitar la opción relevante en la categoría Ruby Dragon Interpreters . Esto también se hace para todos los demás idiomas, utilizando el mismo archivo de datos.
También puede escribir guiones en Ruby, de la misma manera que lo haría con Java o Python. Ruby estará disponible como un nuevo tipo de script, y puede ver varios scripts de ejemplo en los Examples.Ruby Directorio de ruby del administrador de guiones que muestran el uso básico de los conceptos básicos de Jruby y Ghidra. Los scripts también tienen una $script que proporciona acceso a la instancia RubyScript para ellos.
También se proporcionan las mismas variables globales disponibles en las sesiones interactivas para que los scripts lo usen de la misma manera.
También puede encontrar ayuda directamente en el menú de ayuda de Ghidra (Presione F1 ) en la Ghidra Functionality->Scripting->Ruby Interpreter .
Si desea instalar gemas para estar disponibles en su intérprete interactivo o scripts, entonces deberá tomar algunos pasos adicionales, dependiendo de qué tan aislado desee el entorno de gemas.
Si está utilizando algo como RVM para administrar su entorno Ruby, entonces simplemente puede confiar en esto para que ya haya establecido la variable de entorno GEM_PATH para señalar su instalación de GEM. Sin embargo, para el máximo éxito, debe cambiar a una instalación de Jruby, idealmente de la misma versión que empaquetada en Rubydragon, y dejar que RVM apunte a un conjunto de gemas dentro de eso.
Si desea que la gema de Ghidra sea específica para Ghidra, o si no tiene un entorno de rubí fuera de Ghidra para señalar, puede elegir una ubicación por su cuenta y establecer la variable de entorno GEM_PATH para señalar eso. Para instalar nuevas gemas en la ruta, invoque la versión de gem del frasco Jruby agrupado así, cambiando las versión y las rutas según sea necesario. Aquí la ruta de las gemas se establecerá en ~/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 Una vez hecho esto, puede requerir la gema wrapture (o lo que sea que elija instalar) de los scripts y el terminal interactivo.
Si no desea crear una variable de entorno en su configuración global, deberá meterse con el script utilizado para lanzar Ghidra para establecer GEM_PATH adecuadamente. Puede hacer esto agregando un comando set en launch.bat o launch.sh (dependiendo de su sistema operativo). Para los sistemas de Windows, también deberá eliminar el parámetro /I del comando start utilizado para iniciar Ghidra para que la variable de entorno se pase.
Kotlin se usa de la misma manera que el conjunto de herramientas de Ruby con algunas diferencias obvias, como ser proporcionadas por el complemento KotlinDragon y la opción de menú de Window->Kotlin . Las variables incorporadas para los scripts y la ventana del intérprete en Kotlin son las mismas que Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Los scripts de Kotlin usan una extensión kts , ya que se interpretan como scripts en lugar de ser compilados a Java primero.
Groovy sigue los mismos patrones que los otros idiomas, que se proporcionan en el complemento GroovyDragon y se pueden accesibles desde la opción de menú de Window->Groovy . Tiene las mismas variables incorporadas que las otras proporcionan:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Clojure sigue los mismos patrones que los otros idiomas, que se proporcionan en el complemento ClojureDragon y la Window->Clojure .
El intérprete y los guiones de Clojure también tienen enlaces que hacen que la información estatal esté disponible para ellos, dentro del espacio de nombres ghidra . Ellos son:
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 se proporciona como la instancia de FlatProgramAPI creado con currentProgram , como con los otros intérpretes. La importación automática de clases de Ghidra también se realiza en el espacio de nombres de ghidra .
Y, como con Ruby, una vinculación de ghidra/script está disponible dentro de los scripts que proporciona acceso a la instancia ClojureScript subyacente. Sin embargo, a diferencia de Ruby, esta variable no permite el acceso a campos protegidos o métodos privados. En cambio, se inyectan en el espacio de nombres ghidra también. Por ejemplo, para acceder al TaskMonitor para un script, simplemente puede hacer referencia ghidra/monitor para hacer cosas como actualizar el progreso. El guión básico de Clojure Ghidra tiene un ejemplo de este tipo de acceso. Aquellos familiarizados con la interfaz Python Scripting pueden reconocer este paradigma, ya que es lo mismo allí.
El complemento JShell proporciona un intérprete de Java interactivo de JSHELL, un Java replicado en Java. Proporciona las mismas variables incorporadas que están disponibles en los scripts Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
Este intérprete es especialmente útil al escribir scripts Java, ya que le permite probar iterativamente fragmentos de código del script sin necesidad de hacer ningún tipo de conversión a otros idiomas como Python o Kotlin.
En este momento, la forma más fácil de contribuir es publicar cualquier sugerencia o probarlo y abrir un problema si tiene algún problema. ¡Dirígete a la lista de problemas para unirte a la discusión!
Si te sientes aventurero, puedes agregar un script de ejemplo en tu idioma de elección. Esto podría ser un equivalente a uno de los guiones que vienen empaquetados con Ghidra, ¡o podría ser todo nuevo! Solo asegúrese de agregar una prueba en el flujo de trabajo de acción de GitHub para que no se rompa más adelante. Echa un vistazo a la carpeta ghidra_scripts para ver qué hay allí ahora, y tal vez dibuje algo de inspiración en lo que podrías agregar.
O, si todo eso es un poco demasiado, ¡solo danos un saludo a #Ghidrarubydragon en Twitter con tus pensamientos!