pm3-mcp
专为在Raspberry Pi 5上与Claude Code一起使用而构建,但适用于任何具有Proxmark3的系统上的任何MCP客户端。
它的作用
- 标签检测: 自动检测LF和HF标签(MIFARE、EM410x、HID、iClass、DESFire等)
- HF识别: UID、ATQA、SAK、协议细节、PRNG弱点检测、魔术标签识别
- LF标识: 标签类型、ID、调制
- 块读取: 使用密钥身份验证读取单个MIFARE Classic块
- 内存转储: 保存为伪影的完整标签转储(MIFARE Classic 1K/4K、Ultralight)
- 参与度记录: 每个参与文件夹的带时间戳的命令日志(JSONL)
需求
- Python 3.11+
- 带有iceman固件的Proxmark3(
pm3PATH上的客户端) - 用户在
dialout串行访问组(sudo usermod -aG dialout $USER) - 从源头打造冰人:https://github.com/RfidResearchGroup/proxmark3
安装
git clone https://github.com/mplogas/pm3-mcp.git
cd pm3-mcp
pip install -e ".[dev]"MCP客户端配置
添加到您的 .mcp.json:
{
"mcpServers": {
"pm3": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "pm3_mcp"],
"env": {
"PIDEV_ENGAGEMENTS_DIR": "/path/to/engagements"
}
}
}
}集 PIDEV_ENGAGEMENTS_DIR 以控制参与日志的写入位置。默认为 ./engagements/ 相对于包根。
工具
| 工具 | 安全级别 | 描述 |
|---|---|---|
hw_status | 只读 | 已加载设备信息、固件、密钥字典 |
detect_tag | 只读 | 自动检测读卡器上的任何LF/HF标签 |
hf_info | 只读 | 详细的HF标签标识(ISO14443A) |
lf_info | 只读 | LF标签协议标识 |
read_block | 只读 | 读取单个MIFARE Classic块 |
dump_tag | 只读 | 全内存转储(MIFARE Classic 1K/4K、Ultralight) |
autopwn | 只读 | 自动恢复所有MIFARE经典密钥(字典+暗边+嵌套+硬嵌套) |
darkside | 只读 | 通过PRNG漏洞恢复一个密钥 |
nested | 只读 | 使用已知密钥恢复密钥(弱PRNG) |
hardnested | 只读 | 使用已知密钥恢复密钥(硬PRNG) |
chk_keys | 只读 | 对所有扇区进行字典检查 |
desfire_info | 只读 | DESFire标签详细信息:UID、版本、存储、应用程序、签名 |
desfire_apps | 只读 | 枚举DESFire应用程序及其身份验证要求 |
desfire_files | 只读 | 列出DESFire应用程序中的文件(通常需要身份验证) |
iclass_info | 只读 | iCLASS/PicoPass标签信息(CSN,卡类型) |
iclass_rdbl | 只读 | 读取iCLASS块(块0-4通常无需密钥即可读取) |
iclass_dump | 只读 | 将iCLASS标签内存转储到文件 |
iclass_chk | 只读 | 从内置字典中检查iCLASS密钥 |
iclass_loclass | 只读 | 通过loclass攻击恢复iCLASS密钥 |
iso15693_info | 只读 | ISO 15693标签信息(UID、类型、制造商) |
iso15693_rdbl | 只读 | 读取ISO 15693块 |
iso15693_dump | 只读 | 将ISO 15693标签内存转储到文件 |
connect | 允许写入 | 验证PM3,创建参与文件夹 |
disconnect | 允许写入 | 完成命令日志 |
sniff_start | 允许写入 | 开始嗅探阅读器标签通信(直到按下PM3按钮为止) |
sniff_stop | 允许写入 | 检索和解码嗅探的跟踪数据 |
mf_wrbl | 审批写入 | 写入MIFARE Classic块(需要确认) |
mf_restore | 审批写入 | 将完整转储还原到MIFARE Classic标签(需要确认) |
iclass_wrbl | 审批写入 | 写入iCLASS块(需要确认) |
iso15693_wrbl | 批准写入 | 写入ISO 15693块(需要确认) |
安全模型
在MCP服务器边界强制执行三层:
- 只读: 完全自主。读取标签不会改变它。
- 允许写入: 自动,记录所有通话。创建参与度文件夹。
- 批准书: 直到人类确认为止
_confirmed参数。写入会不可逆地覆盖标签数据。
建筑
pm3-mcp (server.py)
|
tools.py -> connection.py -> subprocess.run("pm3 -p PORT -c CMD")
| parsers.py (text output -> structured dicts)
|
Proxmark3 (iceman fw) via USB serialconnection.py是唯一调用subprocess的模块。每个工具调用运行一个pm3 -c命令(无持久进程)。parsers.py处理文本输出解析,与工具逻辑分离。PM3输出格式因命令和iceman版本而异。- 端口自动检测扫描
/dev/ttyACM*当没有指定端口时。
项目集成
这 connect 工具接受可选 project_path 参数。提供时(来自项目mcp create_project),参与数据将写入 /pm3/ 而不是创建一个独立的文件夹。单独使用时省略它。
已知约束
- 每个命令的开销约为1秒: 每个呼叫在USB级别连接/断开。可用于识别工作流程。
- 输出解析脆弱性: 冰人版本之间PM3输出格式发生变化。解析程序可能需要更新固件升级。
- 独家设备访问: 一次只能有一个客户端使用PM3。
- 标签必须位于天线上: RFID/NFC需要物理接近(~5cm高频,~10cm低频)。
测试
pytest # no PM3 hardware needed
pytest -m proxmark3 # integration tests, PM3 must be connected许可证
麻省理工学院
