
Plugin para IDA que consulta modelos de linguagem para acelerar a engenharia reversa.
Gepetto é um plugin Python que utiliza diversos grandes modelos de linguagem para dar significado às funções decompiladas pelo IDA Pro (≥ 7.6). Ele pode aproveitá-los para explicar o que uma função faz e para renomear automaticamente suas variáveis. Aqui está um exemplo simples do que ele pode fornecer em meros segundos:

A maneira mais fácil de instalar o Gepetto é usando a ferramenta CLI do Hex-Rays (hcli):
pip install ida-hcli
hcli plugin install gepetto
Isso instalará automaticamente o plugin no diretório de usuário do seu IDA.
Como alternativa, você pode instalar o plugin manualmente:
gepetto.py, bem como a pasta gepetto/) na sua pasta de plugins do IDA ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (padrão no Windows: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
O Gepetto mantém sua configuração no diretório de usuário do IDA, para que ela sobreviva às atualizações do plugin:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniNa primeira vez que o plugin é executado, ele copia gepetto/config.ini para lá e
informa o caminho no console. Depois disso, a cópia distribuída com o plugin é
apenas um modelo — edite a que está no seu diretório de usuário. Defina GEPETTO_CONFIG_DIR
para substituir o local completamente.
Adicione suas chaves de API a esse arquivo, ou forneça-as por meio das variáveis de ambiente nomeadas nele. Para a OpenAI, uma chave pode ser criada nesta página. Observe que as consultas à API geralmente não são gratuitas (embora não sejam muito caras) e você precisará configurar um método de pagamento com o provedor correspondente.
O Gepetto carrega provedores de três locais, cada um substituindo o anterior em caso de
colisão de nome de menu: os módulos distribuídos em gepetto/models/, depois qualquer arquivo .py em
$IDAUSR/cfg/gepetto/providers/, e depois qualquer distribuição instalada que anuncie um
entry point gepetto.providers. As substituições são anunciadas no console, para que você
possa substituir um provedor integrado sem fazer fork do plugin.
Um provedor drop-in usa exatamente o mesmo contrato que um integrado. Para um endpoint compatível com OpenAI, o arquivo inteiro é:
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)
Adicione uma seção [MyProvider] correspondente ao seu config.ini e reinicie o IDA: os provedores são registrados no momento do carregamento, portanto, uma nova chave ou um novo arquivo exige uma reinicialização antes de aparecer no menu.
Para distribuir um como pacote, exponha a classe ou um register(register_model) chamável:
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
Arquivos em providers/ executam Python arbitrário quando o IDA inicia. Esse é o mesmo
nível de confiança de qualquer plugin do IDA, mas instale apenas provedores em que você confia.
Depois que o plugin estiver instalado corretamente, você deverá conseguir invocá-lo a partir do menu de contexto da janela de pseudocódigo do IDA, como mostrado na captura de tela abaixo:

Alterne entre os modelos suportados pelo Gepetto no menu Edit > Gepetto:

O Gepetto também fornece uma interface de linha de comando (CLI) que você pode usar para fazer perguntas ao LLM diretamente do IDA. Certifique-se de selecionar
Gepetto na barra de entrada:

Os seguintes atalhos de teclado estão disponíveis:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + RTestes iniciais mostram que pedir melhores nomes funciona melhor se você pedir uma explicação da função primeiro – eu suponho que seja porque o modelo então usa seu próprio comentário para fazer sugestões mais precisas. Há um elemento de aleatoriedade nas respostas da IA. Se por algum motivo a resposta inicial que você receber não lhe agradar, você sempre pode executar o comando novamente.