
Plugin de IDA que consulta modelos de lenguaje para acelerar la ingeniería inversa
Gepetto es un plugin de Python que utiliza varios modelos de lenguaje grandes para dar significado a las funciones descompiladas por IDA Pro (≥ 7.6). Puede aprovecharlos para explicar qué hace una función y para renombrar automáticamente sus variables. Aquí hay un ejemplo sencillo de los resultados que puede proporcionar en apenas segundos:

La forma más sencilla de instalar Gepetto es usando la herramienta CLI de Hex-Rays (hcli):
pip install ida-hcli
hcli plugin install gepetto
Esto instalará automáticamente el plugin en tu directorio de usuario de IDA.
Alternativamente, puedes instalar el plugin manualmente:
gepetto.py, así como la carpeta gepetto/) en tu carpeta de plugins de IDA ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (predeterminado en Windows: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
Gepetto guarda su configuración en tu directorio de usuario de IDA, de modo que sobrevive a las actualizaciones del plugin:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniLa primera vez que se ejecuta el plugin, copia gepetto/config.ini allí y te
indica la ruta en la consola. A partir de entonces, la copia incluida con el
plugin es solo una plantilla: edita la de tu directorio de usuario. Establece
GEPETTO_CONFIG_DIR para sobrescribir la ubicación por completo.
Añade tus claves de API a ese archivo, o proporciónalas mediante las variables de entorno indicadas en él. Para OpenAI, se puede crear una clave en esta página. Ten en cuenta que las consultas a la API normalmente no son gratuitas (aunque no son muy caras) y tendrás que configurar un método de pago con el proveedor correspondiente.
Gepetto carga los proveedores desde tres lugares, cada uno sobrescribiendo al
anterior en caso de colisión de nombres en el menú: los módulos incluidos en
gepetto/models/, luego cualquier archivo .py en
$IDAUSR/cfg/gepetto/providers/, y después cualquier distribución instalada que
anuncie un punto de entrada gepetto.providers. Las sobrescrituras se anuncian
en la consola, de modo que puedes reemplazar un proveedor integrado sin bifurcar
el plugin.
Un proveedor drop-in utiliza exactamente el mismo contrato que uno integrado. Para un endpoint compatible con OpenAI, el archivo completo es:
import openai
import gepetto.config
import gepetto.models.model_manager
from gepetto.models.openai import GPT
class MyProvider(GPT):
@staticmethod
def get_menu_name() -> str:
return "MyProvider"
@staticmethod
def supported_models():
return ["my-model-v1"]
@staticmethod
def is_configured_properly() -> bool:
return bool(gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"))
def __init__(self, model):
try:
super().__init__(model)
except ValueError:
pass # No OpenAI key needed for this provider.
self.model = model
self.client = openai.OpenAI(
api_key=gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"),
base_url="https://api.example.com/v1",
)
gepetto.models.model_manager.register_model(MyProvider)
Añade una sección [MyProvider] correspondiente a tu config.ini y reinicia IDA: los proveedores se registran en el momento de la carga, por lo que una nueva clave o un nuevo archivo requiere un reinicio antes de que aparezca en el menú.
Para distribuirlo como un paquete en su lugar, expón la clase o un register(register_model) invocable:
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
Los archivos en providers/ ejecutan Python arbitrario cuando IDA se inicia. Eso es el mismo nivel de confianza que cualquier plugin de IDA, pero solo instala proveedores en los que confíes.
Una vez que el plugin esté instalado correctamente, deberías poder invocarlo desde el menú contextual de la ventana de pseudocódigo de IDA, como se muestra en la captura de pantalla a continuación:

Cambia entre los modelos compatibles con Gepetto desde el menú Edit > Gepetto:

Gepetto también proporciona una interfaz CLI que puedes usar para hacer preguntas al LLM directamente desde IDA. Asegúrate de seleccionar Gepetto en la barra de entrada:

Los siguientes atajos de teclado están disponibles:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + RLas pruebas iniciales muestran que pedir mejores nombres funciona mejor si primero solicitas una explicación de la función; supongo que se debe a que el modelo entonces utiliza su propio comentario para hacer sugerencias más precisas. Hay un elemento de aleatoriedad en las respuestas de la IA. Si por alguna razón la respuesta inicial que obtienes no te resulta adecuada, siempre puedes ejecutar el comando de nuevo.