Gepetto 是一个 Python 插件,它使用各种大型语言模型为 IDA Pro(≥ 7.6)反编译的函数赋予含义。它可以利用这些模型来解释函数的作用,并自动重命名其变量。以下是一个简单的示例,展示了它能在短短几秒内提供的结果:

安装 Gepetto 最简单的方法是使用 Hex-Rays CLI 工具(hcli):
pip install ida-hcli
hcli plugin install gepetto
这会将插件自动安装到你的 IDA 用户目录中。
或者,你也可以手动安装该插件:
gepetto.py 以及 gepetto/ 文件夹)放入你的 IDA 插件文件夹($IDAUSR/plugins)。%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA(Windows 上的默认值:%LOCALAPPDATA%\Programs\Python\Python39)。[/path/to/python] -m pip install -r requirements.txt
Gepetto 将配置保存在你的 IDA 用户目录中,因此插件升级后配置依然保留:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.ini插件首次运行时会将 gepetto/config.ini 复制到该位置,并在控制台告知你路径。此后,插件随附的副本仅作为模板——请编辑你用户目录中的那一份。设置 GEPETTO_CONFIG_DIR 可完全覆盖该位置。
将你的 API 密钥添加到该文件中,或通过文件中指定的环境变量提供。对于 OpenAI,可在此页面创建密钥。请注意,API 查询通常并非免费(尽管并不昂贵),你需要向相应提供商设置支付方式。
Gepetto 从三个位置加载提供商,在菜单名称冲突时后者覆盖前者:gepetto/models/ 中随附的模块,然后是 $IDAUSR/cfg/gepetto/providers/ 中的任意 .py 文件,最后是任何声明了 gepetto.providers 入口点的已安装发行版。覆盖情况会在控制台公布,因此你无需分叉插件即可替换内置提供商。
即插即用提供商使用与内置提供商完全相同的约定。对于兼容 OpenAI 的端点,整个文件就是:
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)
将匹配的 [MyProvider] 段添加到你的 config.ini 中,然后重启 IDA:提供程序在加载时注册,因此新的键或新的文件需要重启后才会出现在菜单中。
若要以包的形式发布,请暴露该类或一个 register(register_model) 可调用对象:
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
providers/ 目录中的文件会在 IDA 启动时执行任意 Python 代码。这与任何 IDA 插件的信任级别相同,但请只安装你信任的 provider。
插件正确安装后,你应该能够从 IDA 伪代码窗口的上下文菜单中调用它,如下方截图所示:

通过 Edit > Gepetto 菜单在 Gepetto 支持的模型之间切换:

Gepetto 还提供了一个 CLI 接口,你可以用它直接从 IDA 向 LLM 提问。请确保在输入栏中选择 Gepetto:

以下快捷键可用:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + R初步测试表明,如果你先请求解释该函数,再请求更好的命名,效果会更好——我推测是因为模型随后会利用自己生成的注释来给出更准确的建议。 AI 的回复存在一定的随机性。如果出于某种原因,你得到的初始回复不适合你,你可以随时再次运行该命令。
你可以通过编辑配置中的 locale 来更改 Gepetto 的语言。例如,要以法语使用该插件,你只需添加:
[Gepetto]
LANGUAGE = "fr_FR"
所选区域设置必须与 gepetto/locales 中的文件夹名称匹配。如果所需语言不可用,
你可以通过自行添加该语言来为项目做出贡献!为所需区域设置创建一个新文件夹
(例如 gepetto/locales/de_DE/LC_MESSAGES/),并提交一个包含更新后 .po 文件的拉取请求,你可以通过
复制并编辑 gepetto/locales/gepetto.pot 来创建该文件(将所有以 msgstr 开头的行替换为
本地化版本)。