Script Ghidra de interacción API de Ollama para ingeniería inversa asistida por LLM.
¿Qué es esto?
Este script interactúa con la API de Ollama para interactuar con modelos de lenguajes grandes (LLM). Utiliza la API de Ollama para realizar diversas tareas de ingeniería inversa sin salir de Ghidra. Admite instancias locales y remotas de Ollama. Este script está inspirado en GptHidra.
Modelos compatibles
Este script soporta cualquier modelo que soporte Ollama.
Ollama también agregó recientemente soporte para cualquier modelo disponible en HuggingFace en formato GGUF, por ejemplo:
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
Requisitos previos
- Ghidra
- Ollama
- Cualquiera de los modelos Ollama
Configuración de Ollama
No dudes en reemplazar llama3.1:8b
con cualquiera de los modelos compatibles con Ollama.
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
Ahora debería estar listo para comenzar, localhost:11434
debería estar listo para manejar solicitudes.
Nota: Este script también admite instancias remotas; configure la dirección IP y el puerto durante la primera configuración.
¿Qué puede hacer?
- Explicar la función que se encuentra actualmente en la ventana del descompilador.
- Sugiera un nombre para la función actual; nombrará automáticamente la función si se ha habilitado
- Reescribir la función actual con comentarios recomendados
- Reescriba completamente la función actual, intentando mejorar los nombres de funciones/parámetros/variables y también agregar comentarios
- El usuario puede hacer una pregunta sobre una función.
- Buscar errores/sugerir vulnerabilidades potenciales en la función actual (más bien para asegurarse de haber cubierto todo, algunas sugerencias son tontas ya que no tienen el contexto)
- Utilice una versión modificada de este script LeafBlowerLeafFunctions.py Ghidra para automatizar el análisis de posibles funciones de 'hoja' como strcpy , memcpy , strlen , etc. en binarios con símbolos eliminados, cambio de nombre automático si está habilitado
- Explique la instrucción de ensamblaje única que está actualmente seleccionada en la ventana de listado.
- Explicar las múltiples instrucciones de ensamblaje que están seleccionadas actualmente en la ventana de listado.
- Entrada de aviso general para hacer preguntas (en lugar de tener que buscar en Google, bueno para cosas simples)
Opciones de configuración
Las siguientes opciones de configuración están disponibles y se pueden configurar en la primera ejecución:
- IP del servidor : si utiliza una instancia remota, configúrelo en la IP de la instancia remota; de lo contrario, ingrese
localhost
- Puerto : si su instancia está en un puerto diferente, cámbielo aquí; el valor predeterminado es
11434
- Esquema : seleccione
http
o https
según cómo esté configurada su instancia - Modelo : seleccione el modelo que desea utilizar para el análisis, puede cambiarlo en cualquier momento
- Mensaje específico del proyecto : se utiliza para dar contexto adicional al modelo si es necesario.
- Comentarios de respuesta : algunas opciones almacenan las respuestas como un comentario en la parte superior de la función, esto se puede habilitar/deshabilitar aquí
- Cambio de nombre automático : algunas opciones intentan cambiar el nombre de las funciones automáticamente según las respuestas; esto se puede habilitar/deshabilitar aquí
Las opciones 11 y 12 se pueden utilizar para ajustar la configuración después de la primera ejecución.
Uso
- Coloque el script GhidrOllama.py y el directorio ghidrollama_utils en su directorio de script Ghidra (generalmente
~/ghidra_scripts
). - Encuentre una función/instrucción que desee enviar al LLM
- Ejecute el script desde la ventana del Administrador de scripts
- Si es la primera vez que ejecuta el script, complete la configuración inicial (esto se puede cambiar más adelante)
- Seleccione cómo desea que funcione/instrucción a analizar
- Espere hasta que la salida se imprima en la consola (el tiempo de espera varía según el modelo y las especificaciones del host)
Formas de correr
Entrar en la ventana del script para ejecutar este script cada vez es un inconveniente, el script se puede ejecutar fácilmente de las siguientes maneras:
- Combinación de teclas : la combinación de teclas predeterminada para este script es Q
- Barra de herramientas : se puede hacer clic en un pequeño icono en la barra de herramientas para ejecutar el script.
Combinación de teclas
Para habilitarlo, una vez que haya agregado su script a la lista de directorios de scripts de Ghidra, ubique el script en la lista. Haga clic derecho en el resultado y seleccione "Asignar combinación de teclas". Si solicita una clave, ingrese q .
Barra de herramientas
Para habilitar el icono de la barra de herramientas, ubique el script en el administrador de scripts y haga clic en la casilla de verificación en la primera columna (la columna En la barra de herramientas ). El icono de GhidrOllama debería aparecer en la barra de herramientas.
Notas
- Vale la pena señalar que el análisis solo será tan bueno como el modelo, este script básicamente une los modelos y Ghidra.
- Cuanto mejor sea el modelo (más parámetros, más lento), más completo y correcto será el análisis (¡la mayor parte de las veces!)
- Si desea una descripción general rápida de una función, llama3.1:8b es rápido y ofrece un análisis decente.
- Tenga cuidado con funciones grandes y modelos de bajo contexto, si la función es demasiado grande para la ventana de contexto, el modelo responderá con un completo galimatías (si es que responde).
Ejemplos de análisis de funciones
A continuación se muestra una implementación de strchr() como se ve en la ventana de descompilación de Ghidra con símbolos eliminados: