内容
# EDB Debugger MCP
[](https://github.com/oakkaya/edb-debugger-mcp/actions)
[]()
[](https://pypi.org/project/edb-debugger-mcp/)
[](https://pypi.org/project/edb-debugger-mcp/)
[](LICENSE)
[](https://www.sourceware.org/gdb/)
[](https://modelcontextprotocol.io)
[](https://github.com/oakkaya/edb-debugger-mcp/pkgs/container/edb-debugger-mcp)
## 关于
[EDB(Evan's Debugger)](https://github.com/eteran/edb-debugger) 是一个功能丰富的开源图形化 Linux 调试器(支持 x86/x86-64),以其直观的界面、强大的插件系统(22 个插件)和广泛的调试功能而闻名——断点、内存分析、ROP 工具、堆分析器等。然而,EDB 一直仅限于手动图形化交互——直到现在。
**EDB Debugger MCP** 通过 [Model Context Protocol(MCP)](https://modelcontextprotocol.io) 将 EDB 的调试引擎与现代 AI 连接起来。EDB 的每个功能都作为 AI 助手可调用的工具公开——Claude Desktop、Cursor 或任何 MCP 主机——有效地赋予 AI 调试器的直觉。该服务器公开了 **207 个调试工具**(100 个 Pydantic 模型,182 个后端方法,约 9000 行代码)。
在后台,它通过高性能异步后端将 AI 请求翻译成 [GDB MI 命令](https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html),然后将结果格式化回结构化数据。与 [pwntools](https://github.com/Gallopsled/pwntools) 集成(50 个工具:ROP、shellcode、cyclic、ELF、pack、enhex、align、bitops、tubes),它成为一个完整的 AI 驱动的逆向工程工作站。
<p align="center">
<img alt="Workflow Demo" src="https://raw.githubusercontent.com/oakkaya/edb-debugger-mcp/main/docs/edb-workflow.gif" width="90%"><br>
<em>完整的逆向工程工作流:加载二进制 → 反汇编 → ROP 搜索 → 设置断点 → 运行 → 读取寄存器 → 转储堆栈 → 回溯 → 生成 shellcode。</em>
</p>
<p align="center">
<img alt="Split-Screen Demo" src="https://raw.githubusercontent.com/oakkaya/edb-debugger-mcp/main/docs/edb-splitscreen.gif" width="90%"><br>
<em>工具调用参数及其结构化结果并排显示,以提高清晰度。</em>
</p>
| 状态 | 值 |
|------|-------|
| 总工具数 | **207**(157 edb_ + 50 pwntools_) |
| EDB 功能覆盖率 | 22/22 插件 · 29/29 操作 · 13/13 对话框 · 6/6 视图 |
| 代码大小 | ~9000 行 · 100 个 Pydantic 模型 · 182 个后端方法 |
[EDB](https://github.com/eteran/edb-debugger) · [GDB](https://www.sourceware.org/gdb/) · [MCP](https://modelcontextprotocol.io) · [FastMCP](https://github.com/jlowin/fastmcp) · [pwntools](https://github.com/Gallopsled/pwntools) · [Binary Ninja](https://binary.ninja/)
## 目录
- [快速入门](#快速入门)
- [功能](#功能)
- [用例](#用例)
- [需求](#需求)
- [安装](#安装)
- [使用](#使用)
- [独立使用](#独立使用)
- [Claude Desktop 集成](#claude-desktop-集成)
- [其他 MCP 主机](#其他-mcp-主机)
- [Docker 使用](#docker-使用)
- [架构](#架构)
- [pwntools 工具](#pwntools-工具)
- [EDB 插件映射](#edb-插件映射)
- [Binary Ninja 集成](#binary-ninja-集成)
- [Ghidra 集成](#ghidra-集成)
- [Web UI](#web-ui)
- [CTF 示例](#ctf-示例)
- [x64dbg 集成](#x64dbg-集成)
- [IDA Pro 集成](#ida-pro-集成)
- [VS Code 扩展](#vs-code-扩展)
- [项目结构](#项目结构)
- [工具参考](#工具参考-197-工具)
- [许可证](#许可证)
## 快速入门
```bash
pip install edb-debugger-mcp
edb-debugger-mcp &
```
然后添加到 Claude Desktop 配置文件中并询问: *"加载 /bin/ls,找到带有 pop eax 的 ROP 小工具,并生成 execve shellcode"* —— AI 处理其余部分。
## 功能
- **程序控制** —— 加载、运行、暂停、继续、重启、附加/分离、杀死
- **断点** —— 软件/硬件断点、监视点(读取/写入/访问)、条件、忽略计数、命令、捕获点、导出/导入
- **步进操作** —— 步进进入/越过/退出、步进指令、步进越过指令、反向步进/继续
- **寄存器管理** —— 读取/写入所有 CPU/FPU/SIMD 寄存器、格式化转储、标志分析、更改的寄存器
- **内存操作** —— 十六进制转储、写入内存/字节、填充模式、搜索、比较区域、设置权限
- **反汇编** —— 完整/范围反汇编、当前指令、汇编补丁、NOP 填充
- **堆栈分析** —— 堆栈转储、推入/弹出/修改、帧信息、回溯、参数、局部变量
- **符号解析** —— 符号查找、模块、节、入口点、符号映射、二进制信息
- **线程支持** —— 列出/切换线程、进程信息、线程信息
- **表达式求值** —— C 表达式、变量获取/设置、字符串读取、类型信息(ptype/whatis)
- **代码分析** —— 源代码列表、函数信息/边界、引用、ROP 小工具、基本块、CFG
- **代码补丁** —— 汇编指令、NOP 范围、填充零、标签地址、注释/注释
- **会话管理** —— 保存/加载会话、书签地址、导出/导入断点
- **远程调试** —— 连接到远程 GDB 服务器、生成核心转储
- **环境** —— 获取/设置/取消环境变量、设置工作目录、TTY、信号处理
- **配置** —— ASLR 开关、延迟绑定开关、调试输出、会话日志记录、信号忽略列表
- **实用工具** —— 二进制字符串转换(十六进制↔ASCII↔utf-16)、文件↔VA 偏移转换、字体配置
- **Pwntools 集成** —— 汇编/反汇编(Keystone/Capstone)、ELF 分析、ROP 小工具搜索、shellcode 生成、循环模式、格式字符串 payloads、打包/解包
## 用例
- **CTF 漏洞开发** —— `pwntools_cyclic` → 偏移 → `edb_find_rop_gadgets` → `pwntools_shellcraft` → `pwntools_asm`
- **恶意软件分析** —— `edb_attach_process` → `edb_set_breakpoint` → `edb_read_memory` → `edb_generate_core_dump`
- **漏洞挖掘** —— `edb_disable_aslr` → `edb_run` → `edb_search_memory` → `edb_analyze_heap`
- **漏洞研究** —— `edb_evaluate_expression` → `edb_get_stack` → `edb_instruction_detail` → `edb_call_function`
- **逆向工程** —— `edb_disassemble_range` → `edb_generate_cfg` → `edb_find_strings` → `edb_lookup_symbol`
## 需求
- Python >= 3.10
- GDB(GNU Debugger)已安装在系统上
- Linux(推荐 x86-64)
## 安装
```bash
# 克隆仓库
git clone https://github.com/oakkaya/edb-debugger-mcp.git
cd edb-debugger-mcp
# 安装依赖
pip install -r requirements.txt
# (可选)使用 pip 安装
pip install -e .
```
## 使用
### 独立使用
```bash
python edb_debugger_mcp.py
```
这会在 stdio 上启动 MCP 服务器,准备接受 MCP 协议消息。
### 测试
```bash
# 编译测试二进制文件
gcc -g -o /tmp/test_bin /path/to/test.c
# 然后手动运行服务器或使用 MCP 客户端
```
### Claude Desktop 集成
如果通过 pip 安装:
```json
{
"mcpServers": {
"edb-debugger-mcp": {
"command": "edb-debugger-mcp"
}
}
}
```
如果从源代码安装:
```json
{
"mcpServers": {
"edb-debugger-mcp": {
"command": "python",
"args": ["/path/to/edb_debugger_mcp/edb_debugger_mcp.py"]
}
}
}
```
配置文件位置:
- **macOS**:`~/Library/Application Support/Claude/claude_desktop_config.json`
- **Linux**:`~/.config/Claude/claude_desktop_config.json`
- **Windows**:`%APPDATA%\Claude\claude_desktop_config.json`
### 其他 MCP 主机
相同的服务器与任何 MCP 兼容的主机一起工作。示例配置:
**opencode** (`~/.config/opencode/config.json`):
```json
{
"mcpServers": {
"edb-debugger-mcp": {
"command": "edb-debugger-mcp"
}
}
}
```
**Cursor** (项目设置 → MCP 服务器):
```json
{
"mcpServers": {
"edb-debugger-mcp": {
"command": "edb-debugger-mcp"
}
}
}
```
**Continue.dev** (`~/.continue/config.json`):
```json
{
"experimental": {
"mcpServers": {
"edb-debugger-mcp": {
"command": "edb-debugger-mcp"
}
}
}
}
```
## Docker 使用
预构建的 Docker 镜像可在 [GitHub 容器注册表](https://github.com/oakkaya/edb-debugger-mcp/pkgs/container/edb-debugger-mcp) 上找到。
```bash
# 拉取最新镜像
docker pull ghcr.io/oakkaya/edb-debugger-mcp:latest
# 运行 MCP 服务器(stdio 模式,用于 MCP 主机)
docker run -i ghcr.io/oakkaya/edb-debugger-mcp
# 使用特定版本标签运行
docker run -i ghcr.io/oakkaya/edb-debugger-mcp:v1.0.10
# 交互式运行带有 shell 进行调试的 Docker 镜像
docker run --rm -it \
--security-opt seccomp=unconfined \
--cap-add=SYS_PTRACE \
ghcr.io/oakkaya/edb-debugger-mcp /bin/bash
```
镜像从 `python:3.13-slim` 构建,并预安装了 GDB。它会在每次 GitHub 发布(`v*` 标签)时自动重建并发布。
## 架构
```
┌─────────────────────┐ MCP 协议 ┌──────────────────────┐
│ MCP 客户端 │ ◄──────────────────► │ FastMCP 服务器 │
│ (Claude, Cursor) │ stdio JSON-RPC │ edb_debugger_mcp.py│
└─────────────────────┘ └──────────┬───────────┘
│
GDB MI
(--interpreter=mi2)
│
┌────────┴───────────┐
│ GDB 后端 │
│ gdb_backend.py │
│ (异步子进程)│
│ MI 解析器 + 123 │
│ 公共方法 │
└────────────────────┘
```
服务器使用 GDB 的 MI(Machine Interface)协议(`--interpreter=mi2`)与 GDB 通信作为子进程。后端:
- 通过 stdin 发送 MI/CLI 命令,解析结构化的 MI 响应
- 处理 `*stopped` 异步事件以获取断点命中
- 管理进程生命周期(启动、杀死、分离)
- 提供基于 `readelf` 的文件偏移 ↔ VA 转换
> **注意:** 本 README 中列出的 EDB 操作/对话框/视图计数涵盖了 EDB 的所有 UI 元素。由于该项目是 MCP 服务器,**仅 UI 功能**(关于对话框、字体选择器、重置 UI、窗口布局)无法映射。所有 **功能调试功能**(断点、寄存器、内存、堆栈、表达式、补丁、分析、ROP、会话)均 100% 覆盖。
## pwntools 工具
服务器集成了 [pwntools](https://github.com/Gallopsled/pwntools) —— CTF/exploit 开发框架 —— 作为 27 个 MCP 工具,可与 EDB 调试器工具一起调用。
| 工具 | 描述 |
|------|-------------|
| `pwntools_analyze_elf` | 完整的 ELF 二进制分析(头、节、符号、安全、字符串) |
| `pwntools_asm` | 将汇编指令转换为字节(Keystone) |
| `pwntools_build_rop_chain` | 使用有序小工具构建 ROP 链 |
| `pwntools_checksec` | 检查 ELF 二进制安全属性(RELRO、Canary、NX、PIE) |
| `pwntools_constgrep` | 按名称或值搜索 pwntools/ELF 常量 |
| `pwntools_cyclic` | 生成 De Bruijn 循环模式用于偏移发现 |
| `pwntools_cyclic_find` | 查找循环模式中的值偏移 |
| `pwntools_disasm` | 使用 pwntools 反汇编(架构感知) |
| `pwntools_elf_deps` | 显示共享库依赖和解释器 |
| `pwntools_elf_patch` | 在文件偏移处修补 ELF 二进制(创建 .bak) |
| `pwntools_elf_read` | 从 ELF 二进制读取字节到节或地址 |
| `pwntools_elf_sections` | 列出所有节的类型、标志、地址、大小 |
| `pwntools_elf_search` | 搜索 ELF 二进制的字节模式按节分组 |
| `pwntools_elf_strings` | 从 ELF 中提取字符串(按节或全部) |
| `pwntools_elf_symbols` | 使用地址表搜索符号 |
| `pwntools_enc` | 编码 shellcode(字母数字、null_free、xor) |
| `pwntools_entropy` | 文件或区域的香农熵分析 |
| `pwntools_erope` | 搜索 ROP 小工具按类型(syscall、stack_pivot、call、jump) |
| `pwntools_find_rop` | 按正则表达式搜索 ROP 小工具 |
| `pwntools_flat` | 将值/地址打包值打包成字节 |
| `pwntools_fmtstr_payload` | 生成格式字符串写入有效载荷 |
| `pwntools_hexdump` | 带 ASCII 边栏的十六进制转储(彩色,带偏移量标记) |
| `pwntools_make_elf` | 将汇编代码编译为 ELF 二进制文件 |
| `pwntools_pack` | 将整数打包成字节(小端/大端,8/16/32/64 位) |
| `pwntools_shellcraft` | 为给定架构/操作系统生成 shellcode(execve、bind/rev shell 等) |
| `pwntools_sigreturn` | 生成 SROP(Sigreturn-Oriented Programming)帧 |
| `pwntools_unpack` | 将字节解包为整数 |
用法:询问 AI “查找带有 pop rdi 的 ROP 小工具” 或 “生成 x64 execve shellcode” —— 无需单独设置。
## EDB 插件映射
| 插件 | MCP 覆盖率 |
|--------|-------------|
| **DebuggerCore** | 执行、步进、断点、寄存器、内存、状态 |
| **BreakpointManager** | edb_set_breakpoint, edb_list_breakpoints, edb_export/import |
| **HardwareBreakpoints** | edb_set_hardware_breakpoint, edb_set_watchpoint |
| **InstructionInspector** | edb_instruction_detail |
| **Assembler** | edb_assemble (可选 Keystone) |
| **BinaryInfo** | edb_get_binary_info |
| **BinarySearcher** | edb_search_memory |
| **Backtrace** | edb_get_backtrace |
| **FasLoader** | edb_load_symbol_file |
| **DumpState** | edb_dump_state |
| **FunctionFinder** | edb_list_functions |
| **OpcodeSearcher** | edb_search_instructions |
| **References** | edb_find_references, edb_string_references |
| **ROPTool** | edb_find_rop_gadgets |
| **HeapAnalyzer** | edb_analyze_heap |
| **Analyzer** | edb_analyze_region, edb_analyze_basic_blocks |
| **SymbolViewer** | edb_lookup_symbol |
| **ProcessProperties** | edb_get_process_properties |
| **ODbgRegisterView** | edb_get_registers, edb_get_fpu_state, edb_get_simd_state |
| **Bookmarks** | edb_add_bookmark, edb_list_bookmarks, edb_remove_bookmark |
| **CheckVersion** | 自动处理 |
| **DebuggerErrorConsole** | edb_set_debug_output |
## Binary Ninja 集成
> **⚠ 实验性/未测试** — Binary Ninja 是商业产品(在此环境中不可用)。插件代码在结构上完整并遵循 BN 插件 API,但未在运行时验证。欢迎提交 PR。
`binaryninja_mcp/` 目录包含一个完整的 Binary Ninja 插件,用于桥接解码器与实时调试器。功能:
- **寄存器覆盖** — HLIL 注释与实时寄存器值
- **单击设置断点** — 右键单击设置软件/硬件断点
- **原位补丁** — NOP、汇编、范围-NOP 从反汇编上下文菜单
- **步进控制** — 步进进入/越过/退出、运行、暂停通过插件菜单
- **侧边栏小工具** — 实时寄存器摘要在“EDB 调试器”选项卡中
安装:`ln -s $(pwd)/binaryninja_mcp ~/.binaryninja/plugins/edb-debugger-bridge`
## Ghidra 集成
> **⚠ 实验性/未测试** — 需要 [pyhidra](https://github.com/Defense-Cyber-Crime-Center/pyhidra)。插件在结构上完整但未在运行时验证。欢迎提交 PR。
`ghidra_mcp/` 目录包含一个 Ghidra Python 桥接器,遵循与 BN 类似的模式。功能:
- **启动/停止桥接器** — 连接/断开 MCP 服务器
- **切换断点** — 在光标地址处设置/清除断点
- **原位补丁** — NOP、汇编指令
- **步进/运行控制** — 步进进入/越过、运行、暂停
- **寄存器和内存检查** — 实时寄存器值、内存十六进制转储
安装:在 Ghidra 中使用 pyhidra 运行 `ghidra_mcp/ghidra_bridge.py`,然后从右键菜单中使用新注册的操作。
## Web UI
> **⚠ 实验性**
`web_ui/` 目录提供了一个基于浏览器的调试器前端,使用 FastAPI + htmx。不需要 JS 框架。
```
cd web_ui
pip install -r requirements.txt
python server.py
# → http://localhost:8000
```
功能:
- **分类工具侧边栏** — 程序、断点、运行/步进、寄存器/内存、分析、Pwntools
- **动态参数表单** — 带有自动生成输入字段的工具显示参数
- **黑暗主题** — 清洁、可读的界面
- **实时结果** — 输出流式传输到结果面板,自动滚动
## x64dbg 集成
> **⚠ 实验性/未测试** — Windows 独有。需要 [x64dbg](https://x64dbg.com/) 带有 [x64dbgpy](https://github.com/x64dbg/x64dbgpy)。无测试环境可用。
`x64dbg_mcp/` 目录包含一个 x64dbgpy 插件。功能:
- **启动/停止桥接器** — 连接到 MCP 服务器
- **断点控制** — 切换、清除全部
- **补丁** — NOP、光标处汇编
- **步进/运行** — 步进进入/越过、运行、暂停
- **检查** — 寄存器、选择处的内存
安装:将 `x64dbg_mcp/` 复制到 x64dbg 的 `py-plugins/` 目录。 “EDB Bridge” 子菜单出现在插件下。
## 快速入门
```bash
# 安装
pip install edb-debugger-mcp
# 启动 MCP 服务器(独立)
edb-debugger-mcp
```
使用 Webpip install "edb-debugger-mcp[web]"
python3 -m web_ui.server
```
**使用 AI 进行 3 步 CTF 解答:**
```
用户:challenge/bof它
AI: → edb_load_program(path="/challenge/bof")
b_disassemble("main") → 找到 gets() 调用
→ ed_functions() → () 函数,地址为 0x4011b6
用户攻击
→ pwnyclic(200) → 生成模式
→ pwntools_cyclic_find("0x6161616c") → 偏移量 = 136
→tools_flat([0xdeadbeef]*34 + [0x4011b6]) → 构造 payload
用户:测试
AI: → edb_run(args=$(python3 -c "print('A'*136 + '\xb6\x11\x40')"))
→ edb_set_breakpoint("win")
→ edb_continue() → 在 win 函数处断点 → 打印 flag!
```
## IDA Pro 集成
> **✅ 已在 IDA Pro 9.3 上测试通过** — IDAPython 导入(ida_pro、idaapi、idc、idautils),所有 13 个操作在 Edit -> EDB Debugger 下注册,MCP 子器与 207连接,步进/运行/断点/补丁操作有效,无头模式下使用 `ida -c -A -S<script>` 在 xvfb 下工作。
`ida_mcp/` 目录包含一个 IDAPython 插件,该插件将 IDA Pro 连接到 MCP 服务器。功能:
- **启动/停止桥接器** — 启动和终止 MCP 子进程
- **切换断点** (F2)— 在光标处设置/删除软件断点
- **清除所有断点** — 删除所有断点
- **补丁** — 在当前地址处 NOP 或组装指令
- **步进/运行控制** — 步进进入(F11)、步进越过(F10)、步出(Shift+F11)、运行(F5)、暂停
- **检查** — 显示寄存器值、读取光标:将 `ida_mcp/` 复制到 IDA 的插件目录:
```bash
cp -r ida_mcp ~/.idapro/plugins/edb_debugger_bridge
```
在启动桥接器(Edit -> EDB Debugger -> Start Bridge)后,所有操作均可在 **Edit -> EDB Debugger** 菜单中使用。
## VS Code 扩展
> **⚠ 实验性**
`vscode-edb-mcp/` 目录包含一个 VS Code 扩展,在 VS Code 中提供了一个调试器前端。功能:
- **启动/停止桥接器** — 启动和终止 MCP 子进程
- **调试器面板** — 用于调试命令的 WebView 面板
- **执行控制** — 运行/继续(F5)、暂停、步进进入(F11)、步进越过(F10)
- **断点管理** — 设置/清除断点
- **寄存器/内存检查** — 查看寄存器状态和内存
- **状态栏指示器** — 显示桥接器连接状态(已连接/已断开)
构建和安装:
```bash
cd vscode-edb-mcp
npm install
npm run compile
code --install-extension edb-debugger-mcp-1.0.0.vsix
```
该扩展在 `EDB:` 前缀下注册命令,并显示一个状态栏项。
## 项目结构
```
edb-debugger-mcp/
├── edb_debugger/ # 包:FastMCP 服务器(147 edb_ 工具)
│ ├── __init__.py # 入口点 + main()
│ ├── _mcp.py # FastMCP 实例 + GDB 后端初始化
│ └── tools.py # 所有 147 个 @mcp.tool 函数定义
├── gdb_backend.py # GDB MI 后端(172 个公共方法,MI 解析话管理)
├── edb_models.py # 93+ Pydantic 模型用于工具参数
├── pwntools_mcp.py # Pwntools 集成(50 个 pwntools_ 工具:ROP,shellcode,ELF,asm,fmtstr,pack,tubes,enhex,elf_diff,bits,context)
├── web_ui/ # Web 调试器前端(FastAPI + htmx,基于浏览器)
│ ├── server.py # FastAPI 应用,工具类别,多页面路由
└── templates/ # Jinja2 HTML 模板
├── binaryninja_mcp/ # Binary Ninja 插件(注册叠加层,右键单击 BP/补丁,步进)
├── ghidra_mcp/ # Ghidra 桥接器(基于 pyhidra,相同的 MCP 客户端)
├── ida_mcp/ # IDA Pro 插件(IDAPython 桥接器,带有断点/补丁/步进)
├── x64dbg_mcp/ # x64dbgpy 插件(Windows 调试器桥接器)
├── vscode-edb-mcp/ # VS Code 扩展(调试器面板,命令,状态栏)
├── scripts/ # 实用脚本
│ └── generate_tool_table.py # 自动生成工具表
├── examples/ # 10 个 CTF 挑战
│ ├── ret2win/ # 缓冲区溢出 → 调用 win 函数
│ ├── format-string/ # 格式化字符串 → GOT 覆盖
│ ├── crackme/ # 静态密码分析
│ ├── rop-chain/ # ROP 链 ret2libc(启用 NX)
│ ├── shellcode-injection/ # 可执行栈上的 shellcode
│ ├── off-by-one/ # 单字节堆溢出覆盖相邻变量
│ ├── heap-uaf/ # 使用后释放 → 函数指针覆盖
│ ├── integer-overflow/ 整数溢出绕过 → OOB 写入
│ ├── nx-bypass/ # ROP 链调用 mprotect 然后执行 shellcode
│ └── canary-leak/ # 格式化字符串泄漏栈 canary,然后 BOF 覆盖返回地址
├── tests/ # 346 个测试(pytest + pytest-asyncio)
├── requirements.txt # Python 依赖项
├── README.md # 本文件
├── LICENSE # MIT 许可证
└── .gitignore # Git 忽略规则
```
## CTF 示例
`examples/` 目录包含 10 个 CTF 风格的挑战,展示了不同的利用技术和相应的 EDB MCP 工具来解决它们。
| 挑战 | 演示工具 |
|-----------|-----------|-------------------|
|2win` | 缓冲区溢出覆盖以调用隐藏的 win 函数 | `edb_load_program`、`edb_set_breakpoint`、`edb_get_stack`、`edb_evaluate_expression`、`edb_run` |
| `format-string` | 格式化字符串漏洞用于覆盖 GOT 条目 | `edb_evaluate_expression`、`edb_write、`edb_get_string`、`edb_find_strings` |
| `crackme` | 通过检查二进制文件进行静态密码分析 | `edb_disassemble`、`edb_lookup_symbol`、`edb_get_string` |
| `rop-chain` | 返回导向编程链以绕过 NX(ret2libc) | `edb_find_rop_gadgets`、`edb_get_registers`、`pwntools_build_rop_chain`、`edb_set_memory_permissions` |
| `shellcode-injection` | 在可执行栈上注入和执行 shellcode | `pwntools_shellcraft`、`edb_write_memory_bytes`、`edb_set_breakpoint`、`edb_run` |
| `off-by-one` | 单字节堆溢出损坏相邻变量 | `edb_set_breakpoint`、`edb_read_memory`、`edb_get_stack`、`edb_evaluate_expression` |
| `heap-uaf` | 使用后释放损坏以获取控制权 | `edb_analyze_heap`、`edb_set_breakpoint`、`edb_read_memory`、`edb_write_memory` |
| `integer-overflow`整数溢出绕过边界检查导致 OOB 写入 | `edb_evaluate_expression`、`edb_set_breakpoint`、`edb_read_memory`、`edb_set_register` |
| `nx-bypass` | ROP 链调用 mprotect 然后执行 shellcode |wntools_find_rop`、`edb_find_rop_gadgets`、`pwntools_shellcraft`、`edb_set_breakpoint` |
| `canary-leak` | 格式化字符串泄漏栈 canary,然后 BOF 覆盖返回地址 | `edb_get_stack`、`edb_find_strings`、`edb_evaluate_expression`、`edb_set_breakpoint` |
每个挑战都代码、编译的二进制文件和一个 solve 脚挑战目录运行:
```bash
cd examples/ret2win
python solve.py
```
##参考(207 个工具)
<details>
<summary>点击展开完整的工具参考(16 个类别,207 个工具)</summary>
### 程序控制(12 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_load_program` | 加载可执行二进制文件进行调试。解析符号并准备执行。 |
| `edb_run` | 从头开始执行程序。 |
| `edb_continue` | 在断点或暂停后继续执行。 |
| `edb_continue_to`执行直到达到特定地址。 |
| `edb | 暂停(中断)正在运行的程序| `edb_rest | 杀重启被调试的程序。重新加载二进制文件,保留断点。 |
| `edb_attach_process` | 通过 PID 将调试器附加到已运行的进程。 |
| `edb_detach_process` | 从被调试的进程中分离。进程继续独立运行。 |
| `edb_kill_process` | 立即杀死被调试的进程。 |
| `edb_remote_connect` | 连接到远程 gdbserver 进行远程调试。 |
| `edb_send_signal` | 向被调试的进程发送信号。 |
| `edb_call_function` | 在被调试的进程上下文中调用函数### 步进操作(8 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_step_instruction` | 单步执行指令(汇编级别),而非源代码行。 |
edb_step_into` | 执行一个机器指令,步入函数调用。 |
| `edb_step_over` | 执行一个机器指令,将调用视为原子操作。 |
| `edb_step_out` | 执行直到当前函数返回给调用者。 |
| `edb_step_over_instruction` |越过指令(汇编级别),跳。 |
| `edb_reverse_step` |进程序执行(反向调试)。 |
edb_reverse_continue` | 继续执行到断点或事件。 |
| `edb_jump_to_address` | 跳转到特定地址,设置。 |
### 断点(17 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_set_breakpoint` | 在函数、地址或源代码位置设置断点。 |
| `_hardware_breakpoint` | 使用 CPU 调试寄存器设置硬件辅助断点。 |
| `_watchpoint` | 设置观察点以监访问。三种模式: |
| `edb_set_catchpoint` | 为异常、系统调用、信号或进程事件设置捕获点。 |
| `edb_set_trace_point` | 设置跟踪点(日志断点),打印消息并继续 |
| `edb_set_breakpoint_condition` | 在现有断点上设置或删除条件。 |
| `edb_set_breakpoint_ignore_count` | 设置断点被忽略的次数,然后停止。 |
| `edb_breakpoint_commands` | 设置在命中断点时执行的命令。 |
| `edb_enable_breakpoint` | 重新激活已禁用的断点。 |
| `edb_disable_breakpoint` | 禁用断点而不会删除它。可以稍后重新启用。 |
| `edb_remove_breakpoint` | 永久删除断点或观察点,编号。 |
| `edb_list_breakpoints` | 列出所有断点、观察点及其编号、类型、禁用)|
| `edb_breakpoint_export` | 将所有断点导出到磁盘上的 JSON 文件。 |
| `edb_breakpoint_import` | 导入以前使用导出的断点到 JSON 文件。 |
| `edb_trace_start` | 在地址/函数处启动执行跟踪。记录每个指令执行 |
| `edb_trace_stop` | 停止当前执行跟踪会话。 |
| `edb_trace_show` | 显示执行跟踪状态、帧和收集的数据。 |
### 寄存器操作(9 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_get_registers 获取 寄存器值,格式为 JSON。包括通用寄存器| `edb_get_register` | 获取特定 CPU 寄存器的值。 |
| `edb_set_register` | 修改 CPU 寄存器的值。对于修补执行流或测试条件很有用。 |
| `edb_dump_registers` | 获取以 markdown 表格格式显示的寄存器转储。 |
| `edb_get_changed_registers` | 获取所有寄存器值(显示当前状态,EDB 风格)。 |
| `edb_get_fpu_state` | 获取 FPU(浮点单元)寄存器状态。 |
| `edb_get_simd_state` | 获取 SIMD(SSE/AVX)寄存器状态。 |
| `edb_get_arch_info` | 获取有关被调试进程和二进制文件的架构信息。 |
| `edb_get_eflags` | 显示 EFLAGS/RFLAGS CPU 状态寄存器及其各个标志状态。 |
### 内存操作(12 个工具 工具 | 描述 |
|------|-------------|
| `edb_read_memory` | 读取并显示内存地址处,以十六进制转储。 |
| `edb_read_memory_as` | 读取内存中的地址,解释为特定数据类型。 |
| `edb_write_memory` | 将值写入内存地址。用于修补代码或数据。 |
| `edb_write_memory_bytes` | 将原始十六进制字节写入从地址开始的内存。 |
| `edb_fill_memory` | 用重复字节值填充内存区域。 |
| `edb_search_memory` | 在内存中搜索字节模式。查找指定区域中的所有出现。 |
| `edb_compare_memory` | 字节比较两个内存区域并显示差异。 |
| `edb_compare_sections` | 比较已加载的内存部分与磁盘上的原始二进制文件。 |
| `edb_get_memory_map` | 获取进程内存映射(类似 /proc/pid/maps)。 |
| `edb_region_info` | 获取已定义内存区域及其权限的信息。 |
| `edb_set_memory_permissions` | 设置内存区域的权限(读取/写入/执行| `edb_dump_memory_to_file` |区域转储到磁盘上的二进制文件。 |
汇编(7 个工具)
| | 描述 |
|------|-------------|
| `assemble` | 在地址或函数处反机器代码。 |
| `edb_disassemble_range` | 在内存中反汇编从起始地址到结束地址的范围。 |
| `edb` | 获取当前程序计数器(/EIP)处的指令。 |
| `edb_instruction_detail` | 获取给定地址处指令的 |
| `edb_search_instructions` | 在搜索字节模式(不区分大小写)。 |
| `edb_analyze_basic_blocks` | 分析代码区域并识别基本块。 |
| `edb_analyze_calls_at` | 在地址处反汇编并识别调用/跳转目标。 |
### 栈和帧(11 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_get_stack` | 转储当前栈(栈指针到更高地址)。 |
| `edb_get_backtrace` | 获取完整的调用栈回溯。帧 #0 是当前函数。 |
| `edb_get_frame_info` | 获取栈帧的详细信息:地址、函数、 |
| `edb_get_locals` | 获取当前函数作用域中的所有局部变量。 |
| `edb_get_arguments` | 获取传递给当前函数的参数。 |
| `edb_list_stack_arguments` | 列出栈帧的参数。 |
| `edb_stack_push` | 将值推送到程序栈上(递减 RSP,写入值)。 |
| `edb_stack_pop` | 从程序栈中弹出值(读取值,递增 RSP)。 |
| `edb_stack_modify` | 在不更改 RSP 的情况下修改栈顶的值。 |
| `edb_get_stack_frame` | 获取特定栈帧级别的详细信息。 |
| `edb_scan_stack_for_retaddr` | 扫描栈以查找潜在的返回地址(有效文本范围内的值)。使用 |
### 符号分析(9 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_lookup_symbol` | 查找符号的地址和类型。支持函数和变量。 |
| `edb_list_functions` | 列出二进制文件中的所有函数,可选按名称过滤。 |
| `edb_get_function_info` | 获取函数的详细信息:地址、原型、源代码位置。 |
| `edb_get_function_bounds` | 获取函数的起始地址、结束地址和大小。 |
| `edb_list_modules` | 列出进程加载的所有共享库/模块。 |
| `edb_get_section_info` | 获取已加载模块的详细信息。 |
| `edb_get_entry_point` | 获取程序入口点地址。入口点是第一个代码执行的地址。 |
| `edb_find_references` | 查找给定地址或符号的所有代码引用。 |
| `edb_find_strings` | 在当前代码区域查找可打印的 ASCII 字符串。 |
### 线程和进程(6 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_list_threads` | 列出被调试进程的所有线程,包含 ID、名称和状态。 |
| `edb_get_current_thread` | 获取当前的信息。 |
| `edb_set_current_thread` | 将调试器上下文不同线程。 |
| `edb_get_process_properties` | 获取被调试进程的综合属性。 |
| `edb_inferior_info` | 获取所有被调试的下级(进程)的信息。 |
| `edb_follow_fork` | 设置调试器在分叉后跟随父进程还是子进程。 |
### 表达式和数据(8 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_evaluate_expression` | 在调试上下文中评估 C 表达式。 |
| `edb_ptype` | 打印变量、函数或表达式的类型。 |
| `edb_whatis` | 打印表达式的类型(短形式)。 |
| `edb_get_variable` | 读取当前作用域中局部或全局变量的值。 `edb_set_variable` | 修改当前作用域中的变量值。 |
|_get_string` | 从内存地址读取以空字符结尾的字符串。 |
| `edb_string_references` | 查找二进制文件中字符串或地址的所有代码和数据引用。 |
| `edb_watch_expression` | 将表达式添加到自动显示。在每次停止时评估并显示。 |
### 代码分析(7 个工具)
| 工具 | 描述 |
|------|-------------|
| `edb_analyze_region` | 分析代码区域的调用指令、分支指令、 |
| `edb_analyze_heap` | 分析被调试进程的堆内存区域。 |
| `edb_generate_cfg` | 以 Graphviz DOT 格式生成控制流图。 |
| `edb_generate_symbols` | 使用 EDB 的符号生成器为二进制文件生成符号映射。 |
| `edb_list_source` | 显示带有行号的源代码。当前行用 '->' 标记。 |
| `edb_list_source_files` | 列出被调试程序使用的所有源文件。 |
| `edb_binary_string_convert` | 在十六进制、ASCII 和 UTF-16 表示之间转换。 |
### 补丁与注释(9种工具)
| 工具 | 描述 |
|------|-------------|
| `edb_nop_range` | 将指令范围替换为NOP(0x90)字节。 |
| `edb_assemble` | 组装汇编指令并将其写入内存。 |
| `edb_add_bookmark` | 保存一个命名书签,指向地址以便快速导航。 |
| `edb_list_bookmarks` | 列出所有已保存的书签,包含名称和地址。 |
| `edb_remove_bookmark` | 按名称删除书签。 |
| `edb_add_comment` | 在地址添加文本注释。注释存储在内存中 |
| `edb_list_comments` | 列出所有通过`edb_add_comment`添加的地址注释。 |
| `edb_remove_comment` | 删除以前使用`edb_add_comment`添加的注释。 |
| `edb_apply_patches_to_file` | 将运行时内存修改写回磁盘上的二进制文件。 |
### 会话与环境(12种工具)
| 工具 | 描述 |
|------|-------------|
| `edb_session_save` | 将完整的调试会话保存到JSON文件。 |
| `edb_session_load` | 从JSON文件加载调试会话。 |
| `edb_set_environment_variable` | 为被调试进程设置环境变量。 |
| `edb_get_environment` | 显示为被调试进程配置的所有环境变量。 |
| `edb_unset_environment_variable` | 从被调试进程中删除环境变量。 |
| `edb_set_working_directory` | 设置调试器和被调试进程的工作目录。 |
| `edb_set_tty` | 设置被调试程序的I/O终端设备。 |
| `edb_set_debug_output` | 启用或禁用GDB内部调试输出。 |
| `edb_set_session_logging` | 将所有GDB输入/输出记录到文件用于调试或记录。 |
| `edb_signal_handling` | 配置GDB如何处理信号(停止、打印、传递给程序)。 |
| `edb_list_signals` | 列出所有信号以及GDB如何处理它们。 |
| `edb_get_stop_reason` | 确定进程停止的原因(断点、信号、步骤等)。 |
### 调试器控制(18种工具)
| 工具 | 描述 |
|------|-------------|
| `edb_configure_debugger` | 配置GDB调试器设置。等效于EDB的“配置调试器” |
| `edb_show_configuration` | 显示当前调试器配置设置。 |
| `edb_disable_aslr` | 为被调试程序禁用或启用ASLR。 |
| `edb_disable_lazy_binding` | 为被调试程序禁用或启用延迟绑定。 |
| `edb_get_status` | 获取当前调试器和进程状态。 |
| `edb_get_binary_info` | 获取已加载二进制文件的详细信息。 |
| `edb_list_features` | 列出GDB调试器功能和能力。 |
| `edb_list_plugins` | 列出所有可用的调试器插件和功能。 |
| `edb_load_symbol_file` | 为被调试程序加载符号文件。 |
| `edb_view_at_address` | 在所有视图中导航并检查地址。 |
| `edb_find_rop_gadgets` | 在内存中搜索ROP小工具(以'ret'结尾的指令)。 |
| `edb_label_address` | 在反汇编视图中设置地址的标签/注释。 |
| `edb_dump_state` | 转储完整的调试器状态:所有寄存器、当前指令、 |
| `edb_generate_core_dump` | 生成当前进程的核心转储文件用于事后分析。 |
| `edb_execute_gdb_command` | 直接执行任何原始GDB命令。完全访问GDB的CLI。对于高级用户非常强大 |
| `edb_compare_snapshot` | 保存完整的调试器快照(寄存器+内存)以供后续比较。 |
| `edb_pipeline` | 加载二进制文件、设置断点、运行并转储状态,一步完成。 |
| `edb_export_state` | 将完整的调试器状态导出为结构化的JSON。 |
| `edb_patch_history` | 显示此会话期间所有内存补丁记录,或清除历史记录。 |
| `edb_binary_diff` | 比较当前加载的二进制文件与磁盘上的原始文件。 |
| `edb_remote_arch` | 检测连接的远程GDB目标的架构。 |
| `edb_remote_info` | 显示远程调试目标的详细信息。 |
| `edb_exploit_generate` | 生成BOF漏洞利用载荷:偏移量+ROP链+shellcode。 |
| `edb_get_function_xrefs` | 显示给定函数或地址的交叉引用。 |
| `edb_goto_function_start` | 查找包含给定地址的函数起始地址。 |
| `edb_enum_registers` | 按类别(GPR、SIMD、FPU)列出可用的CPU寄存器。 |
| `edb_process_strings` | 在进程内存中扫描可读的ASCII字符串。 |
| `edb_list_breakpoint_types` | 列出支持的断点类型(软件、硬件、监视点)。 |
### 文件实用工具(2种工具)
| 工具 | 描述 |
|------|-------------|
| `edb_va_to_file_offset` | 将加载进程中的虚拟地址转换为对应的 |
| `edb_file_offset_to_va` | 将磁盘上二进制文件的偏移量转换为对应的 |
### pwntools(50种工具)
| 工具 | 描述 |
|------|-------------|
| `pwntools_align` | 计算给定对齐边界的对齐值(上/下)。 |
| `pwntools_analyze_elf` | 使用pwntools分析ELF二进制文件 — 入口点、PIE/NX/RELRO/Canary、节 |
| `pwntools_asm` | 使用pwntools + keystone将汇编指令组装成十六进制字节。 |
| `pwntools_bits` | 获取或设置整数中的特定位。 |
| `pwntools_build_rop_chain` | 使用pwntools ROP构建ROP链以调用具有参数的目标函数。 |
| `pwntools_checksec` | 检查ELF二进制文件的安全属性:RELRO、Canary、NX、PIE、RPATH/RUNPAT |
| `pwntools_constgrep` | 按名称或值搜索pwntools/ELF常量。 |
| `pwntools_context` | 查看或修改pwntools全局上下文(架构、操作系统、字节序、日志级别)。 |
| `pwntools_cyclic` | 生成用于缓冲区溢出偏移发现的循环模式。 |
| `pwntools_cyclic_find` | 在循环模式中找到值的偏移量。 |
| `pwntools_disasm` | 使用pwntools + capstone将原始十六进制字节反汇编成汇编指令。 |
| `pwntools_elf_deps` | 列出ELF二进制文件的共享库依赖项(DT_NEEDED条目)。 |
| `pwntools_elf_diff` | 比较两个ELF二进制文件:节、段、符号。 |
| `pwntools_elf_got` | 从ELF二进制文件中解析全局偏移表(GOT)条目。 |
| `pwntools_elf_notes` | 显示ELF注释:构建ID、ABI标签、属性注释。 |
| `pwntools_elf_patch` | 在给定文件偏移量处修补ELF二进制文件中的字节。创建备份。 |
| `pwntools_elf_plt` | 从ELF二进制文件中解析过程链接表(PLT)条目。 |
| `pwntools_elf_read` | 从ELF二进制文件中读取字节到节或地址,并带有十六进制转储输出。 |
| `pwntools_elf_relocs` | 显示ELF重定位条目(GOT/PLT修复和绝对重定位)。 |
| `pwntools_elf_search` | 在ELF二进制文件中搜索字节模式。 |
| `pwntools_elf_sections` | 列出所有ELF节及其详细信息:类型、标志、地址、偏移量、大小、 |
| `pwntools_elf_segments` | 列出ELF程序头(段):类型、标志、偏移量、vaddr、filesz、memsz。 |
| `pwntools_elf_strings` | 从ELF二进制文件中提取可打印字符串,可选地按节过滤。 |
| `pwntools_elf_symbols` | 按正则表达式模式和类型搜索ELF二进制文件中的符号。 |
| `pwntools_enc` | 使用pwntools编码器(字母数字、null_free、xor)编码shellcode。 |
| `pwntools_enhex` | 将原始字节编码为十六进制字符串。支持\x转义。 |
| `pwntools_entropy` | 计算文件或内存区域的字节熵(Shannon)。对于检测 |
| `pwntools_erope` | 按类型搜索ROP小工具:syscall、stack_pivot、call、jump。 |
| `pwntools_find_rop` | 使用pwntools ROP引擎在ELF二进制文件中搜索ROP小工具。 |
| `pwntools_flat` | 使用pwntools flat()将值/地址列表打包成扁平字节。 |
| `pwntools_fmtstr_payload` | 为任意写入生成格式字符串利用载荷。 |
| `pwntools_hexdump` | 使用pwntools hexdump样式显示格式化十六进制转储。 |
| `pwntools_log_level` | 设置pwntools日志详细程度。级别:debug、info、warning、error。 |
| `pwntools_make_elf` | 使用pwntools make_elf将汇编代码编译成ELF二进制文件。 |
| `pwntools_pack` | 将整数打包成字节(例如p64、p32、p16)。 |
| `pwntools_process` | 启动本地进程进行交互(pwntools tube)。 |
| `pwntools_remote` | 连接到远程TCP服务(pwntools tube)。 |
| `pwntools_rol` | 将整数值左旋转N位。 |
| `pwntools_ror` | 将整数值右旋转N位。 |
| `pwntools_shellcraft` | 使用pwntools shellcraft模块生成shellcode。 |
| `pwntools_sigreturn` | 使用pwntools SigreturnFrame生成Sigreturn-Oriented Programming(SROP)帧。 |
| `pwntools_tube_close` | 关闭活动tube连接。 |
| `pwntools_tube_list` | 列出所有活动tube连接。 |
| `pwntools_tube_recv` | 从活动tube接收数据。 |
| `pwntools_tube_recvline` | 从活动tube接收一行。 |
| `pwntools_tube_recvuntil` | 从tube接收数据直到找到模式。 |
| `pwntools_tube_send` | 向活动tube发送原始数据。 |
| `pwntools_tube_sendline` | 向活动tube发送一行(带有换行符)。 |
| `pwntools_unhex` | 将十六进制字符串解码回原始字节。 |
| `pwntools_unpack` | 将字节解包成整数(例如u64、u32、u16)。 |
<!-- 总工具数:207 已列出:207 -->
</details>
## License
MIT License — see [LICENSE](LICENSE) for details.
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器