
Plugin IDA qui interroge des modèles de langage pour accélérer la rétro-ingénierie.
Gepetto est un plugin Python qui utilise divers grands modèles de langage pour donner du sens aux fonctions décompilées par IDA Pro (≥ 7.6). Il peut les exploiter pour expliquer ce que fait une fonction, et pour renommer automatiquement ses variables. Voici un exemple simple des résultats qu'il peut fournir en quelques secondes :

La façon la plus simple d'installer Gepetto est d'utiliser l'outil CLI Hex-Rays (hcli) :
pip install ida-hcli
hcli plugin install gepetto
Cela installera automatiquement le plugin dans votre répertoire utilisateur IDA.
Vous pouvez également installer le plugin manuellement :
gepetto.py, ainsi que le dossier gepetto/) dans votre dossier de plugins IDA ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (par défaut sous Windows : %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
Gepetto conserve sa configuration dans votre répertoire utilisateur IDA, afin qu'elle survive aux mises à jour du plugin :
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniLa première fois que le plugin s'exécute, il y copie gepetto/config.ini et vous indique
le chemin dans la console. Ensuite, la copie fournie avec le plugin n'est
qu'un modèle — modifiez celle de votre répertoire utilisateur. Définissez GEPETTO_CONFIG_DIR
pour remplacer entièrement l'emplacement.
Ajoutez vos clés API à ce fichier, ou fournissez-les via les variables d'environnement qui y sont nommées. Pour OpenAI, une clé peut être créée sur cette page. Veuillez noter que les requêtes API ne sont généralement pas gratuites (bien que peu coûteuses) et que vous devrez configurer un moyen de paiement auprès du fournisseur correspondant.
Gepetto charge les fournisseurs depuis trois emplacements, chacun écrasant le précédent en cas de
collision de nom de menu : les modules fournis dans gepetto/models/, puis tout fichier .py dans
$IDAUSR/cfg/gepetto/providers/, puis toute distribution installée annonçant un
point d'entrée gepetto.providers. Les remplacements sont annoncés dans la console, afin que vous
puissiez remplacer un fournisseur intégré sans forker le plugin.
Un fournisseur ajouté à la volée utilise exactement le même contrat qu'un fournisseur intégré. Pour un point de terminaison compatible OpenAI, le fichier entier est :
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)
Ajoutez une section [MyProvider] correspondante à votre config.ini et redémarrez IDA : les fournisseurs sont enregistrés au chargement, donc une nouvelle clé ou un nouveau fichier nécessite un redémarrage avant d'apparaître dans le menu.
Pour le distribuer plutôt sous forme de package, exposez la classe ou un callable register(register_model) :
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
Les fichiers dans providers/ exécutent du Python arbitraire au démarrage d'IDA. C'est le même niveau de confiance que n'importe quel plugin IDA, mais n'installez que les providers auxquels vous faites confiance.
Une fois le plugin correctement installé, vous devriez pouvoir l'invoquer depuis le menu contextuel de la fenêtre de pseudocode d'IDA, comme le montre la capture d'écran ci-dessous :

Changez de modèle pris en charge par Gepetto depuis le menu Edit > Gepetto :

Gepetto fournit également une interface CLI que vous pouvez utiliser pour poser des questions au LLM directement depuis IDA. Assurez-vous de sélectionner Gepetto dans la barre de saisie :

Les raccourcis clavier suivants sont disponibles :
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + R