Ghidra反编译导出工具

将Ghidra反编译结果导出为源代码文件,供AI集成开发环境使用。

  • by gxenos
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 gxenos/GHIDRA-NO-MCP

使用说明

吉德拉诺麦克普

将Ghidra反编译结果导出为源文件,以供AI IDE使用。

从cmd运行,使用pyghidra和headless模式,不需要Ghidra GUI。

只需将uvx命令复制粘贴到代理或技能中即可。

灵感来源:https://github.com/P4nda0s/IDA-NO-MCP

文本、源代码和Shell是LLM的母语。

安装和使用

使用uv进行安装

uv tool install git+https://github.com/gxenos/GHIDRA-NO-MCP.git

从任何地方跑:

ghidra-no-mcp -g /path/to/GHIDRA /path/to/binary /output/dir

用uvx跑步

uvx git+https://github.com/gxenos/GHIDRA-NO-MCP -g /path/to/GHIDRA /path/to/binary /output/dir

或者使用环境变量:

GHIDRA_INSTALL_DIR=/path/to/GHIDRA uvx git+https://github.com/gxenos/GHIDRA-NO-MCP /path/to/binary /output/dir

其他安装方法

本地开发

uv venv && uv pip install -e .

例子

# Using environment variable
export GHIDRA_INSTALL_DIR=/opt/ghidra/ghidra_12.0.4_PUBLIC
uv run ghidra-no-mcp ./malware.exe ./analysis

# Using CLI argument
uv run ghidra-no-mcp -g /opt/ghidra ./malware.exe ./analysis

# With uvx
GHIDRA_INSTALL_DIR=/opt/ghidra uvx git+https://github.com/gxenos/GHIDRA-NO-MCP ./malware.exe ./analysis

选项

选项 描述
-g, --ghidra-path Ghidra安装路径
-v, --verbose 启用详细日志记录
-j, --jobs 并行反编译器线程(0=自动,1=串行;默认:自动)
--strict 错误时大声失败,而不是记录并继续

输出

目录/文件 描述
call_graph.json 函数调用图(节点+边),包括函数名称、地址、调用者/被调用者计数
decompile/ 解压缩的C文件(每个函数一个,命名为 <name>_<address>.c),包括函数名、地址、调用者、被调用者
strings.txt 已发现字符串,制表符分隔: address length type refs value (refs =引用字符串的函数)
imports.txt 导入表,制表符分隔: library name address refs (refs =调用导入的函数)
exports.txt 导出表,制表符分隔: address name demangled
sections.txt 具有权限和香农熵(高熵)的内存块⇒ 可能已打包/加密)
triage.txt 调用可疑API的入口点和函数(注入、持久性、网络、加密、反分析)
memory/ 内存六角转储,1MB块(默认情况下排除可执行/代码块;使用 --all-memory)
decompile_skipped.txt 跳过的功能
decompile_failed.txt 功能失败

每 .c 文件包括元数据标头:

/*
 * func-name: main
 * func-address: 0x401000
 * callers: 0x402000
 * callees: 0x404000
 */

这 call_graph.json 文件包含完整的调用图:

{
  "nodes": [
    {"address": "0x401000", "name": "main", "is_external": false, "caller_count": 0, "callee_count": 2},
    {"address": "0x402000", "name": "validate_input", "is_external": false, "caller_count": 1, "callee_count": 3}
  ],
  "edges": [
    {"caller": "0x401000", "caller_name": "main", "callee": "0x402000", "callee_name": "validate_input"}
  ],
  "stats": {"total_functions": 150, "total_calls": 342, "external_calls": 45}
}

分析

默认情况下,脚本使用默认分析选项运行Ghidra。

分析选项

选项 描述
--no-memory 跳过内存hexdump导出
--all-memory 在内存十六进制转储中包含可执行(代码)块(默认情况下排除)
--no-strings 跳过字符串提取
--no-imports 跳过导入表导出
--no-exports 跳过导出表导出
--decompiler-timeout 每个函数的超时时间(秒)(0=无限制,默认值:60)
--max-payload 最大反编译器有效负载大小(MB)(默认值:100)

安全

分析是 静态 --Ghidra对样本进行反汇编和反编译,但从未 执行它。加载器仍然解析不受信任的、可能是恶意的输入,因此 真正的恶意软件在一次性VM或容器内运行,作为深度防御。