¡Próximamente una demostración actualizada!
El asistente de ingeniería inversa (ReVA) es un proyecto para construir un asistente de IA independiente del desensamblador para tareas de ingeniería inversa. Esto incluye inferencia en línea y fuera de línea y una arquitectura simple.
ReVa se diferencia de otros esfuerzos por crear asistentes de IA para tareas de ER porque utiliza un enfoque basado en herramientas . ReVa tiene como objetivo proporcionar una variedad de pequeñas herramientas al LLM, del mismo modo que su entorno de RE le proporciona un conjunto de pequeñas herramientas. ReVa combina este enfoque con técnicas de cadena de razonamiento para capacitar al LLM para completar tareas complejas.
Cada una de las herramientas proporcionadas al LLM está diseñada para que sea fácil de usar para el LLM y para tolerar una variedad de entradas y para reducir las alucinaciones por parte del LLM. Hacemos esto proporcionando al LLM un esquema pero tolerando otras entradas, incluidas descripciones que guían al LLM y redirigiendo los errores corregibles al LLM, e incluyendo resultados adicionales para guiar la próxima decisión del LLM.
Por ejemplo, cuando el LLM solicita la descompilación de su herramienta RE, aceptaremos una dirección sin formato en hexadecimal, una dirección sin formato en base 10, un nombre de símbolo con un espacio de nombres o un símbolo. Si el LLM nos proporciona información incorrecta, se lo informamos al LLM junto con instrucciones para corregir la información (tal vez animándolo a usar la lista de funciones, por ejemplo). Para fomentar la exploración como lo haría un humano, informamos contexto adicional como el espacio de nombres y referencias cruzadas junto con la descompilación; este es un pequeño empujón para que el LLM explore el binario de la misma manera que lo haría un humano.
Con esta técnica puede hacer preguntas generales y obtener respuestas relevantes. El modelo prioriza la información de las herramientas, pero cuando no hay información aún puede responder a preguntas genéricas de su formación.
Puedes hacer preguntas como:
__mod_init
.mmap
?Una parte importante de la ingeniería inversa es el proceso. Muchas otras herramientas simplemente hacen una sola pregunta al LLM, lo que significa que es difícil determinar por qué sucedió algo. En ReVa dividimos todas las acciones en pequeñas partes e incluimos los pensamientos del LLM en el resultado. Esto permite al analista monitorear las acciones y el razonamiento del LLM, abortando y cambiando el mensaje si es necesario.
RevA se basa en langchain, que admite varios modelos.
Se proporciona soporte integrado para:
Consulte Configuración para obtener más información sobre la configuración de los proveedores.
Agregar servidores de inferencia adicionales es fácil si es compatible con langchain.
La configuración de ReVa se encuentra en las opciones de la herramienta CodeBrowser. Abra un programa y vaya a Editar -> Opciones de herramienta -> ReVa.
Hay opciones para:
Hay secciones para los proveedores.
De forma predeterminada, la clave OpenAI se carga desde la variable de entorno OPENAI_API_KEY
. También puedes configurar tu clave dentro de Ghidra. Volver a establecer la clave en el valor OPENAI_API_KEY
borrará la clave de la configuración de Ghidra y la cargará desde el entorno.
También puedes seleccionar el modelo. Por defecto está seleccionado gpt-4o
. Este modelo funciona mejor con las herramientas y el aviso proporcionado por ReVa.
gpt-4
también funciona bien, pero es lento y necesita más indicaciones por parte del usuario para explorar un binario.
Ollama es un servidor de inferencia local. El servidor predeterminado está configurado en localhost, con el puerto Ollama predeterminado. Puede cambiar esto a un servidor remoto si desea realizar inferencias en una máquina remota. Esto es útil para organizaciones que se autohospedan.
También puedes seleccionar un modelo. El modelo ya debe estar cargado en el servidor. Se ha observado un buen rendimiento con:
mixtral
llama3
phi
RevA tiene un flujo de trabajo de dos pasos.
ReVa utiliza una extensión para que su herramienta RE realice análisis. Consulte el soporte de Ghidra a continuación.
Para hacer preguntas y ejecutar la inferencia se proporciona una herramienta de línea de comandos. Ejecute reva-chat
para comenzar la sesión de chat. Este comando encontrará su Ghidra abierto y se conectará a él. Para abrir un nuevo chat, ejecute el comando nuevamente en otra terminal.
Si tiene más de un Ghidra abierto, puede seleccionar el correcto con reva-chat --project ${project-name}
; si no está configurado, reva-chat
le preguntará a qué proyecto desea conectarse.
Para comunicarse entre reva-server
y la extensión, se utiliza gRPC. Puede leer más sobre eso (aquí)[./DEVELOPER.md]. La creación de archivos fuente a partir de esas definiciones de protocolo se realiza desde Makefile. Para compilar los archivos de código fuente del protocolo, ejecute este comando en la raíz del proyecto:
make protocol
Primero instale el componente Python, me gusta usar pipx
. Instálalo con algo como:
pip install pipx
En la carpeta reverse-engineering-assistant
, ejecute:
pipx install .
Después de instalar el proyecto Python, pipx puede advertirle que necesita agregar una carpeta a su variable de entorno PATH. Asegúrese de que la carpeta (que ahora contiene reva-server
y reva-chat
) esté en su variable PATH. pipx puede hacerlo por usted con este comando:
pipx ensurepath
La extensión deberá iniciar reva-server
y usted deberá ejecutar reva-chat
. En caso de que no desee agregarlos a su RUTA, consulte la sección Configuración para saber cómo establecer la ruta a los ejecutables.
Una vez que la extensión haya iniciado el reva-server
, se puede iniciar el chat con:
reva-chat
¡El paquete Python debe estar instalado para que funcione la extensión Ghidra!
Siga las instrucciones del complemento ghidra-assistant.
Después de la instalación, habilite la extensión ReVa Plugin
en la herramienta CodeBrowser (abra un archivo y haga clic en: Archivo -> Configurar -> Varios).
Si desea que ReVa esté habilitado de forma predeterminada, haga clic en Archivo -> Guardar herramienta para guardar la configuración.
Si todo funciona correctamente, verá un menú ReVa en su barra de menú.
Puede modificar la configuración del complemento en Edit -> Tool Options -> ReVa
.
Siempre que ReVa realice una acción, creará un punto de deshacer para cada acción. Si ReVa cambia el nombre de 5 variables, esto será una deshacer.
ReVa agrega una opción al menú Ventana de la herramienta CodeBrowser. Seleccione Ventana -> Registro de acciones de ReVa para abrir la ventana Registro de acciones de ReVa.
Esta ventana muestra las acciones que ReVa ha realizado y le gustaría realizar. Puedes aceptar o rechazar un cambio haciendo doble clic en el icono ✅ o. También puede ir a la ubicación donde se realizará la acción haciendo doble clic en la dirección.
Si rechaza una acción, se le informará a ReVa y ella seguirá adelante.
También puede habilitar "Permitir automáticamente" en las opciones de ReVa. Esto aceptará automáticamente todas las acciones que ReVa quiera realizar.
ReVa también agrega algunos elementos a la interfaz de usuario de Ghidra. Puede pedirle a ReVa que haga algo en la ventana de chat, "Examinar en detalle el uso de las variables en main
, cambiar el nombre de las variables con nombres más descriptivos", o usar el sistema de menú.
Por ejemplo, puede hacer clic derecho en una variable en la descompilación, seleccionar Reva -> Cambiar nombre de variable y ReVa realizará la acción.
¿Te gusta mi trabajo? ¿Quieres apoyar este proyecto y otros? ¿Está interesado en cómo se diseñó y construyó este proyecto? ¡Este proyecto y muchos otros se crean en vivo en mi transmisión en https://twitch.tv/cyberkaida!