JasonLn0711/Ghidra-MCP-Binary-Analysis-Case-Study

GitHub: JasonLn0711/Ghidra-MCP-Binary-Analysis-Case-Study

展示通过 MCP 协议驱动 Ghidra 自动化逆向分析 Linux ELF 二进制并完成密钥恢复的案例研究项目。

Stars: 0 | Forks: 0

# Ghidra MCP 二进制分析案例研究

Python Ghidra MCP Domain Platform

本仓库是一个围绕 GhidraMCP 构建的紧凑型逆向工程案例研究。它演示了如何通过 MCP 可访问的工具驱动 Ghidra,检查一个 Linux crackme,从验证逻辑中恢复正确的密钥,并通过执行二进制文件来验证结果。 ## 作者 - **姓名:** Jason Chia-Sheng Lin - **学校:** 国立阳明交通大学 - **院所:** 生物光电研究所 ## 项目摘要 本项目展示了工具驱动的二进制分析的实用工作流程: 1. 将目标 ELF 加载到支持 MCP 的 Ghidra CodeBrowser 中。 2. 通过 GhidraMCP 查询函数、字符串、交叉引用和反编译输出。 3. 追踪验证路径并重构预期的密钥。 4. 通过运行二进制文件并捕获返回的 flag 来确认结果。 ## 核心结果 - **恢复的密钥:** `mcp{MCP_GHIDRA}` - **验证的 flag:** `FLAG{MCP_GHIDRA_NS_2026}` - **主要分析工具:** `list_functions`、`decompile_function`、`list_strings`、`get_xrefs_to` ## 截图演示 ### 1. 启用 MCP 的 CodeBrowser ![启用 MCP 的 CodeBrowser](https://raw.githubusercontent.com/JasonLn0711/Ghidra-MCP-Binary-Analysis-Case-Study/main/docs/screenshots/00_codebrowser_mcp_loaded.png) 真实的 Ghidra CodeBrowser 窗口,其中在启用 MCP 的工具配置下加载了示例二进制文件。 ### 2. 实时工具调用与函数发现

Live MCP tool call Function listing evidence

工作流程从由 MCP 支持的实时工具调用开始,然后通过函数列表缩小搜索范围。这确定了用于格式检查、密钥重构和密钥验证的核心例程。 ### 3. 格式验证与密钥恢复

verify_format decompile strings and xrefs evidence key recovery evidence

反编译和交叉引用步骤揭示了接受的输入结构以及用于重构嵌入的预期密钥的解码路径。 ### 4. 最终验证 ![最终验证](https://raw.githubusercontent.com/JasonLn0711/Ghidra-MCP-Binary-Analysis-Case-Study/main/docs/screenshots/06_task3_flag_live.png) 最终运行确认恢复的密钥正确,并且二进制文件返回了预期的 flag。 ## 技术亮点 - 使用支持 MCP 的 Ghidra 工作流,而非纯粹的手动 GUI 分析。 - 保留了来自实时会话的真实工具调用证据,而非事后重建的截图。 - 包含可复用的自动化脚本以及用于恢复密钥和 flag 逻辑的独立求解器。 - 将重量级的本地工具和仅用于课程的产物排除在公共仓库之外。 ## 仓库内容 - `sample/crackme_mcp`:分析中使用的挑战二进制文件 - `scripts/solve_crackme.py`:独立的密钥和 flag 重构脚本 - `scripts/capture_live_demo.py`:用于生成仅活动窗口证据截图和本地 PDF 报告的自动化脚本 - `ghidra_scripts/export_analysis_evidence.py`:用于导出函数、字符串、交叉引用和反编译输出的 Ghidra Jython 脚本 - `config/ghidra_tools/code_browser_mcp.tcd`:启用 MCP 的 Ghidra CodeBrowser 工具定义 - `docs/case-study.md`:简明的分析叙述性演练 - `docs/screenshots/`:从工作会话中捕获的真实证据截图 ## 快速开始 运行独立求解器: ``` python3 scripts/solve_crackme.py ``` 针对示例二进制文件验证恢复的密钥: ``` ./sample/crackme_mcp 'mcp{MCP_GHIDRA}' ``` ## 分析说明 - `verify_format` 强制执行输入模式和字符约束。 - `decode_expected_key` 从嵌入的数据中重构预期的密钥。 - `verify_key` 将用户输入与解码结果进行比较。 - 预期密钥是通过对 15 字节的嵌入数组使用 `0x2A` 进行 XOR 解码来恢复的。 ## 项目结构 ``` . |-- LICENSE # MIT license for this repository |-- README.md # Project overview, workflow, and usage notes |-- requirements.txt # Python dependencies for helper automation |-- config/ | `-- ghidra_tools/ | `-- code_browser_mcp.tcd # MCP-enabled Ghidra CodeBrowser tool config |-- docs/ | |-- case-study.md # Written walkthrough of the binary analysis process | `-- screenshots/ | |-- 00_codebrowser_mcp_loaded.png | |-- 00_frontend_server_started.png | |-- 01_task0_tool_call_live.png | |-- 02_task1_functions_live.png | |-- 03_task1_key_format_live.png | |-- 04_task2_strings_xrefs_live.png | |-- 05_task2_key_recovery_live.png | `-- 06_task3_flag_live.png # Evidence screenshots from the live analysis session |-- ghidra_scripts/ | `-- export_analysis_evidence.py # Ghidra Jython export helper for functions and xrefs |-- sample/ | `-- crackme_mcp # Target ELF crackme binary analyzed in this case study `-- scripts/ |-- capture_live_demo.py # Automation for capturing screenshots and local reports `-- solve_crackme.py # Standalone solver that reconstructs the key and flag ``` ## 仅限本地的产物 大型下载文件、本地 Ghidra 项目、生成的 PDF 和课程作业提交文件被特意保留在 `.local/` 目录下,并排除在版本控制之外,以使公共仓库保持专注且适合展示。 ## 许可证 本仓库在 MIT 许可证下发布。有关完整的许可证文本,请参见 [LICENSE](LICENSE)。 除非另有说明,该许可证涵盖本仓库中创作和分发的源代码、自动化脚本、文档、截图以及包含的示例产物。本案例研究引用的第三方工具和项目(如 Ghidra 和其他外部依赖)仍受其各自许可证和条款的约束。
标签:Crackme, CTF Writeup, CTF解题, Ghidra, Linux ELF, MCP, NSA Ghidra, Python, SEO检索, URL提取, VPS部署, 二进制分析, 云安全运维, 云资产清单, 动态执行, 反编译, 国家安全局, 密钥恢复, 工具驱动分析, 无后门, 无线安全, 模型上下文协议, 漏洞分析, 符号执行, 网络安全, 自动化分析, 跨引用分析, 跨站脚本, 路径探测, 软件分析, 逆向工具, 逆向工程, 隐私保护, 验证追踪