JusticeRage/Gepetto
GitHub: JusticeRage/Gepetto
一款集成多种大语言模型的 IDA Pro 插件,能够自动解释反编译函数语义并重命名变量,从而加速二进制逆向分析流程。
Stars: 3406 | Forks: 327
# Gepetto
Gepetto 是一个 Python 插件,它使用各种大型语言模型为 IDA Pro(≥ 7.6)反编译的函数提供语义解释。它可以利用这些模型来解释函数的功能,并自动重命名其变量。以下是一个简单的示例,展示了它在短短几秒钟内就能提供的效果:

## 安装说明
### 使用 hcli(推荐)
安装 Gepetto 最简单的方法是使用 [Hex-Rays CLI 工具](https://github.com/HexRaysSA/ida-hcli):
```
pip install ida-hcli
hcli plugin install gepetto
```
这会自动将插件安装到您的 IDA 用户目录中。
### 手动安装
或者,您也可以手动安装该插件:
1. 将此脚本(`gepetto.py` 以及 `gepetto/` 文件夹)放入您的 IDA 插件文件夹(`$IDAUSR/plugins`)中。
2. 插件目录的位置取决于您的操作系统:
- **Windows**: `%APPDATA%\Hex-Rays\IDA Pro\plugins\`
- **macOS**: `~/Library/Application Support/IDA Pro/plugins/`
- **Linux**: `~/.idapro/plugins/`
3. 将所需的包安装到 IDA 的 Python 环境中。通过检查以下注册表项来查找 IDA 正在使用的解释器:
`Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA`(Windows 上的默认路径:`%LOCALAPPDATA%\Programs\Python\Python39`)。
4. 使用相应的解释器,只需运行:
[/path/to/python] -m pip install -r requirements.txt
⚠️ 您还需要编辑配置文件(位于 `gepetto/config.ini`)并添加您自己的 API 密钥。对于 OpenAI,可以在[此页面](https://platform.openai.com/api-keys)找到。
请注意,API 查询通常不是免费的(尽管并不昂贵),您需要在相应的提供商处设置付款方式。
## 支持的模型
- [OpenAI](https://playground.openai.com/)
- gpt-5
- gpt-5-mini
- gpt-5-nano
- gpt-4-turbo
- gpt-4o
- o4-mini
- gpt-4.1
- o3
- o3-pro
- [Google Gemini](https://ai.google.dev/)
- gemini-2.0-flash
- gemini-2.5-pro
- gemini-2.5-flash
- gemini-2.5-flash-lite-preview-06-17
- [Azure OpenAI](https://ai.azure.com/)
- gpt-35-turbo
- gpt-35-turbo-1106
- gpt-35-turbo-16k
- gpt-4-turbo
- gpt-4-turbo-2024-0409-gs
- [Ollama](https://ollama.com/)
- 通过 Ollama 暴露的任何本地模型(如果 Ollama 未运行则不会显示)
- [Groq](https://console.groq.com/playground)
- llama-3.1-70b-versatile
- llama-3.2-90b-text-preview
- mixtral-8x7b-32768
- [Together](https://api.together.ai/)
- mistralai/Mixtral-8x22B-Instruct-v0.1(不支持重命名变量)
- [Novita AI](https://novita.ai/)
- deepseek/deepseek-r1
- deepseek/deepseek-v3
- meta-llama/llama-3.3-70b-instruct
- meta-llama/llama-3.1-70b-instruct
- meta-llama/llama-3.1-405b-instruct
- [Kluster.ai](https://kluster.ai/)
- deepseek-ai/DeepSeek-R1
- deepseek-ai/DeepSeek-V3-0324
- google/gemma-3-27b-it
- klusterai/Meta-Llama-3.1-8B-Instruct-Turbo
- klusterai/Meta-Llama-3.1-405B-Instruct-Turbo
- klusterai/Meta-Llama-3.3-70B-Instruct-Turbo
- meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8
- meta-llama/Llama-4-Scout-17B-16E-Instruct
- Qwen/Qwen2.5-VL-7B-Instruct
- [LM Studio](https://lmstudio.ai/)
- 通过 LM Studio 暴露的任何本地模型(如果 LM Studio Developer server 未运行则不会显示)
只要您考虑的提供商提供了类似于 OpenAI 的 API,为其他模型添加支持应该不会太难。请查看 `gepetto/models` 文件夹以获取灵感,如果仍然无法解决,可以提交一个 issue。
## 使用方法
插件安装正确后,您应该能够从 IDA 的伪代码窗口的上下文菜单中调用它,如下图所示:

从 Edit > Gepetto 菜单中切换 Gepetto 支持的模型:

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

### 快捷键
以下快捷键可用:
- 要求模型解释函数:`Ctrl` + `Alt` + `G`
- 要求模型为代码添加注释:`Ctrl` + `Alt` + `K`
- 请求为函数的变量提供更好的命名:`Ctrl` + `Alt` + `R`
初步测试表明,如果您先要求解释函数,再要求提供更好的名称效果会更好——我推测是因为模型随后会使用它自己的注释来做出更准确的建议。
AI 的回复存在一定的随机性。如果出于某种原因,您得到的初次回复并不令人满意,您可以随时再次运行该命令。
## 限制
- 该插件需要访问 HexRays 反编译器才能运行。
- 所有受支持的 LLM 均为通用模型,极有可能会出错!请务必对返回的结果保持批判态度!
## 翻译
您可以通过编辑配置中的 locale 来更改 Gepetto 的语言。例如,要使用法语运行该插件,只需添加:
```
[Gepetto]
LANGUAGE = "fr_FR"
```
所选的 locale 必须与 `gepetto/locales` 中的文件夹名称相匹配。如果所需的语言不可用,您可以通过自行添加来为项目做出贡献!为所需的 locale 创建一个新文件夹(例如:`gepetto/locales/de_DE/LC_MESSAGES/`),并使用更新后的 `.po` 文件开启一个新的 pull request,您可以通过复制并编辑 `gepetto/locales/gepetto.pot` 来创建该文件(将所有以 `msgstr` 开头的行替换为本地化版本)。
## 致谢
- [OpenAI](https://openai.com),显然,感谢他们提供了这些令人难以置信的模型
- [Hex Rays](https://hex-rays.com/),IDA 的开发者,感谢他们闪电般快速的响应和支持
- [Kaspersky](https://kaspersky.com),感谢其为该项目提供的初始资金
- [HarfangLab](https://harfanglab.io/),目前的赞助者,让这项工作得以持续
- [@vanhauser-thc](https://github.com/vanhauser-thc),感谢他通过其 [fork](https://github.com/vanhauser-thc/gepetto/) 贡献了支持更多模型和提供商的想法
- 所有贡献了翻译的人:@seifreed, @kot-igor, @ruzgarkanar, @orangetw
标签:AI风险缓解, API集成, DLL 劫持, Gepetto, GPT-4, IDA插件, OpenAI, Petitpotam, Python开发, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码分析, 内存规避, 凭证管理, 可观测性, 大语言模型, 自动化分析, 跨站脚本, 辅助分析, 逆向工具, 逆向工程, 静态分析