
Plugin IDA che interroga modelli linguistici per accelerare il reverse-engineering
Gepetto è un plugin Python che utilizza vari modelli linguistici di grandi dimensioni per dare un senso alle funzioni decompilate da IDA Pro (≥ 7.6). Può sfruttarli per spiegare cosa fa una funzione e per rinominarne automaticamente le variabili. Ecco un semplice esempio dei risultati che può fornire in pochi secondi:

Il modo più semplice per installare Gepetto è utilizzare lo strumento CLI di Hex-Rays (hcli):
pip install ida-hcli
hcli plugin install gepetto
Questo installerà automaticamente il plugin nella tua directory utente di IDA.
In alternativa, puoi installare manualmente il plugin:
gepetto.py, insieme alla cartella gepetto/) nella tua cartella dei plugin di IDA ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (predefinito su Windows: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
Gepetto conserva la propria configurazione nella directory utente di IDA, così sopravvive agli aggiornamenti del plugin:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniLa prima volta che il plugin viene eseguito, copia gepetto/config.ini in quella
posizione e ti comunica il percorso sulla console. Dopodiché, la copia fornita
con il plugin è solo un modello — modifica quella nella tua directory utente.
Imposta GEPETTO_CONFIG_DIR per sovrascrivere completamente la posizione.
Aggiungi le tue chiavi API a quel file, oppure forniscile tramite le variabili d'ambiente indicate al suo interno. Per OpenAI, è possibile creare una chiave su questa pagina. Tieni presente che le query API di solito non sono gratuite (anche se non molto costose) e dovrai configurare un metodo di pagamento con il provider corrispondente.
Gepetto carica i provider da tre posizioni, ciascuna delle quali sovrascrive la
precedente in caso di collisione di nomi nel menu: i moduli forniti in
gepetto/models/, poi qualsiasi file .py in
$IDAUSR/cfg/gepetto/providers/, infine qualsiasi distribuzione installata che
dichiari un entry point gepetto.providers. Le sovrascritture vengono annunciate
sulla console, così puoi sostituire un provider integrato senza fare un fork del
plugin.
Un provider drop-in utilizza esattamente lo stesso contratto di uno integrato. Per un endpoint compatibile con OpenAI, l'intero file è:
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)
Aggiungi una sezione [MyProvider] corrispondente al tuo config.ini e riavvia IDA: i provider vengono registrati al momento del caricamento, quindi una nuova chiave o un nuovo file richiede un riavvio prima di apparire nel menu.
Per distribuirne uno come pacchetto, esponi la classe o una callable register(register_model):
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
I file in providers/ eseguono Python arbitrario all'avvio di IDA. Si tratta dello stesso
livello di fiducia di qualsiasi plugin di IDA, ma installa solo i provider di cui ti fidi.
Una volta installato correttamente il plugin, dovresti essere in grado di richiamarlo dal menu contestuale della finestra dello pseudocodice di IDA, come mostrato nello screenshot sottostante:

Passa da un modello all'altro supportato da Gepetto dal menu Edit > Gepetto:

Gepetto fornisce anche un'interfaccia CLI che puoi usare per porre domande all'LLM direttamente da IDA. Assicurati di selezionare
Gepetto nella barra di input:

Sono disponibili le seguenti scorciatoie da tastiera:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + RI test iniziali mostrano che chiedere nomi migliori funziona meglio se prima si chiede una spiegazione della funzione – presumo perché il modello usa poi il proprio commento per formulare suggerimenti più accurati. C'è un elemento di casualità nelle risposte dell'IA. Se per qualche motivo la risposta iniziale che ottieni non ti soddisfa, puoi sempre eseguire di nuovo il comando.