
### 系统概述
该系统实现了一个集成大语言模型(LLMs)的Ghidra插件,用于代码分析、函数重命名和反编译代码理解。该系统利用Azure OpenAI和其他LLM提供商来分析二进制代码,建议有意义的函数和变量名称,并提供对反编译代码功能的详细见解。
### 核心功能
1. **函数分析**:可分析单个函数或二进制文件中的所有函数,提供其用途、使用算法和潜在安全影响的见解
2. **函数重命名**:根据使用场景和上下文为函数和变量建议语义化名称
3. **递归分析**:支持分析函数及其被调用函数的递归分析,提供代码库的全面理解
4. **模拟执行**:包含PCODE模拟器,可使用AI建议的输入值执行函数,提供执行跟踪和寄存器状态
5. **多平台支持**:支持Azure OpenAI、Azure Deepseek、OpenAI和Anthropic等多个LLM提供商
### 系统架构
1. **前端**:Ghidra插件组件,包含LLM配置界面、函数分析界面和结果查看界面
2. **后端**:处理LLM交互、管理分析任务和处理结果
3. **LLM集成**:通过API集成多个LLM提供商,发送提示词并接收分析响应
4. **反编译**:使用Ghidra反编译器生成反编译代码供LLM分析
5. **模拟器**:通过PCODE模拟器执行函数并捕获执行细节
### 核心组件
1. **LLMPlugin**:主插件类,负责系统初始化、UI管理和用户交互
2. **LLMAnalysisManager**:管理函数分析、重命名和递归分析任务
3. **LLMProviderRegistry**:管理LLM提供商的注册和配置
4. **AzureAIClient**:处理与Azure OpenAI的交互
5. **FunctionAnalyzer**:生成LLM提示并处理函数分析响应
6. **PCODESimulator**:函数执行模拟和状态捕获
### 关键代码片段
1. **函数分析**
public CompletableFuture<FunctionSummaryResponse> analyzeFunction(Function function, int depth) {
String functionBody = decompileFunction(function);
String prompt = buildAnalysisPrompt(function, functionBody);
return provider.analyzeFunction(prompt);
}2. **函数重命名**
public CompletableFuture<RenamingResponse> suggestRenames(Function function, int depth) {
String functionBody = decompileFunction(function);
String prompt = buildRenamingPrompt(functionBody);
return provider.analyze(prompt);
}3. **PCODE模拟**
public SimulationResult simulate(Function function, Map<String, Long> inputs, SimulationConfig config) {
Address entry = function.getEntryPoint();
emulator.writeRegister(pc, entry.getOffset());
setupFunctionParameters(function, inputs);
// 执行指令并捕获结果
}### 应用场景
1. **逆向工程**:辅助分析理解反编译代码,提升逆向分析效率
2. **代码重构**:改善代码可读性和维护性,提供语义化命名建议
3. **安全分析**:识别代码中的潜在安全风险,辅助漏洞挖掘
4. **教学工具**:用于反编译技术、二进制分析和LLM辅助代码理解的教學
### 总结
该Ghidra LLM插件通过集成大语言模型,提供以下核心优势:
- 多LLM平台支持确保灵活性
- 递归分析和PCODE模拟实现深度代码理解
- 自动化重命名提升逆向工程效率
- 丰富的应用场景涵盖安全分析、代码重构等领域
是逆向工程、代码重构和安全分析领域的强大工具,显著提升了二进制分析的效率和深度。
github链接地址:https://github.com/APiTJLillo/GhAIdra.git