Gepetto es un complemento Python que utiliza varios modelos de lenguaje grande para proporcionar un significado a las funciones descompiladas por IDA Pro (≥ 7.4). Puede aprovecharlos para explicar lo que hace una función y cambiar automáticamente sus variables. Aquí hay un ejemplo simple de qué resultados puede proporcionar en solo segundos:
Simplemente suelte este script ( gepetto.py
, así como el gepetto/
carpeta) en su carpeta IDA Plugins ( $IDAUSR/plugins
). Por defecto, en Windows, esto debería ser %AppData%Hex-RaysIDA Proplugins
(es posible que necesite crearlo).
Deberá agregar los paquetes requeridos a la instalación de Python de Ida para que funcione el script. Encuentre qué intérprete está utilizando IDA verificando la siguiente clave de registro: ComputerHKEY_CURRENT_USERSoftwareHex-RaysIDA
(predeterminado en Windows: %LOCALAPPDATA%ProgramsPythonPython39
). Finalmente, con el intérprete correspondiente, simplemente ejecute:
[/path/to/python] -m pip install -r requirements.txt
gepetto/config.ini
) y agregar sus propias claves API. Para OpenAI, se puede encontrar en esta página. Tenga en cuenta que las consultas API generalmente no son gratuitas (aunque no son muy caras) y deberá configurar un método de pago con el proveedor correspondiente.
Agregar soporte para modelos adicionales no debería ser demasiado difícil, siempre que cualquier proveedor que esté considerando exponga una API similar a la de OpenAI. Busque inspiración en la carpeta gepetto/models
, o abra un problema si no puede resolverlo.
Una vez que el complemento se instala correctamente, debería poder invocarlo desde el menú contextual de la ventana Pseudocode de Ida, como se muestra en la captura de pantalla a continuación:
Cambie entre modelos compatibles con Gepetto desde el menú Editar> Gepetto:
Gepetto también proporciona una interfaz CLI que puede usar para hacer preguntas al LLM directamente desde IDA. Asegúrese de seleccionar Gepetto
en la barra de entrada:
Las siguientes teclas de acceso rápido están disponibles:
Ctrl
+ Alt
+ G
Ctrl
+ Alt
+ R
Las pruebas iniciales muestran que pedir mejores nombres funciona mejor si solicita una explicación de la función primero. Supongo que porque el modelo usa su propio comentario para hacer sugerencias más precisas. Hay un elemento de aleatoriedad a las respuestas de la IA. Si por alguna razón la respuesta inicial que obtiene no se adapta a usted, siempre puede volver a ejecutar el comando.
Puede cambiar el lenguaje de Gepetto editando la ubicación en la configuración. Por ejemplo, para usar el complemento en francés, simplemente agregaría:
[Gepetto]
LANGUAGE = " fr_FR "
La ubicación elegida debe coincidir con los nombres de la carpeta en gepetto/locales
. Si el lenguaje deseado no está disponible, ¡puede contribuir al proyecto agregándolo usted mismo! Cree una nueva carpeta para la localidad deseada (ex: gepetto/locales/de_DE/LC_MESSAGES/
), y abra una nueva solicitud de extracción con el archivo .po
actualizado, que puede crear copiando y editando gepetto/locales/gepetto.pot
(reemplace todas las líneas que comienzan con msgstr
con la versión localizada).