📖 最新Proxmark3 命令行指令大全和完全实战手册
📌 前言
本文档分为两部分内容:
- Proxmark3 命令行指令大全(按功能分类,带详细使用案例)
- 实战问题解决记录(基于实际操作中遇到的各种问题及解决方法)
适用固件版本:Iceman 2026-02-16 及更新版本

第一部分:基础操作与环境配置
一、基础操作类
| 命令 | 说明 | 使用案例 |
|---|---|---|
help |
显示所有可用命令 | 场景:刚进入命令行,想看看有哪些命令可用。 输入: help输出:显示所有命令分类列表 |
hf |
进入高频命令组 | 场景:想操作高频卡(如Mifare),先进入高频模式。 输入: hf输出:显示所有高频相关命令 |
lf |
进入低频命令组 | 场景:想操作低频卡(如EM4100),进入低频模式。 输入: lf输出:显示所有低频相关命令 |
hw |
进入硬件命令组 | 场景:想查看或配置硬件,进入硬件模式。 输入: hw输出:显示所有硬件相关命令 |
data |
数据分析与图形窗口 | 场景:想分析捕获的波形。 输入: data plot输出:弹出图形窗口显示采样数据 |
quit / exit |
退出客户端 | 场景:操作完成,想退出PM3客户端。 输入: quit输出:返回到系统命令行 |
clear |
清屏 | 场景:屏幕上信息太多,想清空重新开始。 输入: clear输出:屏幕清空,只剩提示符 |
--help |
查看具体命令的帮助 | 场景:想查看hf mf autopwn的具体用法。输入: hf mf autopwn --help输出:显示该命令的所有参数说明 |
二、硬件与调谐
| 命令 | 说明 | 使用案例 |
|---|---|---|
hw version |
显示固件版本 | 场景:想知道当前固件是什么版本,是否最新。 输入: hw version输出:显示bootrom、os、FPGA版本号和日期 |
hw status |
显示设备状态 | 场景:设备工作不稳定,想查看各项状态是否正常。 输入: hw status输出:显示内存使用、天线状态、配置参数等 |
hw tune |
天线调谐 | 场景:读卡距离变短,想检查天线输出是否正常。 输入: hw tune输出:显示LF和HF天线电压,正常值应>20V |
hw reset |
重启PM3 | 场景:设备卡死无响应,想软重启。 输入: hw reset输出:设备重启,重新连接 |
第二部分:高频卡(HF)操作指南
三、高频(HF)通用
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf search |
搜索高频卡片 | 场景:放上一张未知卡,想知道它是什么类型。 输入: hf search输出:自动识别卡片类型(如MIFARE Classic 1K) |
hf tune |
高频天线调谐 | 场景:只在高频模式下想专门调谐HF天线。 输入: hf tune输出:显示HF天线电压 |
四、ISO14443A(MIFARE)类
4.1 基础操作
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf 14a info |
获取ISO14443A卡片信息 | 场景:放上一张Mifare卡,想获取它的UID和ATQA、SAK。 输入: hf 14a info输出:显示UID: 04 12 34 56 78 90 AB CD,ATQA: 0004,SAK: 08 |
hf 14a reader |
模拟读卡器读取UID | 场景:想快速读取卡片UID,不做深入分析。 输入: hf 14a reader输出:显示UID: 041234567890abcd |
hf 14a sim |
模拟标签 | 场景:想模拟一张卡测试读卡器。 输入: hf 14a sim 12345678输出:开始模拟UID为12345678的标签 |
hf 14a snoop |
嗅探通信 | 场景:想捕获读卡器和卡片之间的通信数据。 输入: hf 14a snoop输出:等待通信,捕获后显示交互数据 |
hf 14a raw |
发送原始指令 | 场景:想发送自定义APDU指令测试卡片。 输入: hf 14a raw -c 60 00输出:返回卡片的原始响应数据 |
4.2 MIFARE Classic 专用(重点)
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf mf rdbl |
读取块 | 场景:已知扇区4块16用密钥A全F可读,想读取数据。 输入: hf mf rdbl --blk 16 -a --key FFFFFFFFFFFF输出: data:aa 55 20 08 31 14 24 58 00 00 00 00 00 00 00 00 |
hf mf wrbl |
写入块 | 场景:想用B密码修复扇区4的尾部块19。 输入: hf mf wrbl --blk 19 -b --key FFFFFFFFFFFF --data FFFFFFFFFFFFFF078069FFFFFFFFFFFF输出: [+] Write ( ok ) |
hf mf rdsc |
读取扇区 | 场景:想一次性读取扇区4的所有块(16-19)。 输入: hf mf rdsc 4 A FFFFFFFFFFFF输出:显示块16、17、18、19的数据 |
hf mf dump |
导出整卡数据 | 场景:想把整张卡备份下来,防止丢失。 输入: hf mf dump输出:生成 hf-mf-353C2AA6-dump.bin和hf-mf-353C2AA6-keys.bin |
hf mf restore |
恢复数据到卡 | 场景:之前备份过卡,现在想恢复数据到新卡。 输入: hf mf restore -f hf-mf-353C2AA6-dump.bin输出:逐块写入,完成后提示成功 |
hf mf chk |
检测默认密钥 | 场景:拿到一张新卡,想知道哪些扇区用的是默认密钥。 输入: hf mf chk *1 ? d default_keys.dic输出:列出找到的所有密钥和对应的扇区 |
4.3 密钥攻击
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf mf autopwn |
自动攻击(推荐) | 场景:已知扇区4的B密码是全F,想破解所有扇区的A密码。 输入: hf mf autopwn -s 4 -b -k FFFFFFFFFFFF输出:列出所有扇区的密钥,扇区4的A密码显示在表格中 |
hf mf nested |
嵌套攻击 | 场景:autopwn失败,想尝试经典嵌套攻击。 输入: hf mf nested 1 4 B FFFFFFFFFFFF输出:攻击过程显示,最终列出所有密钥 |
hf mf hardnested |
硬嵌套攻击 | 场景:标准嵌套攻击失败,卡片可能是较新的EV1版本。 输入: hf mf hardnested --blk 16 -b --key FFFFFFFFFFFF --tblk 16 --ta输出:显示攻击进度,最终给出目标A密码 |
hf mf staticnested |
静态嵌套攻击 | 场景:遇到复旦卡(Static nonce detected)时使用。 输入: hf mf staticnested --1k --blk 19 -b --key FFFFFFFFFFFF输出:尝试破解静态随机数卡片的密钥 |
hf mf mifare |
DarkSide攻击 | 场景:没有任何已知密钥,想尝试破解。 输入: hf mf mifare输出:利用卡片认证漏洞尝试获取密钥 |
4.4 魔术卡(UID卡)操作
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf mf csetuid |
设置UID | 场景:想把魔术卡的UID改成和原卡一样。 输入: hf mf csetuid 353C2AA6输出:UID修改成功 |
hf mf csetblk |
写入块(魔术卡专用) | 场景:想直接写入块0(包括UID部分)。 输入: hf mf csetblk 0 353C2AA6A6080400输出:写入成功 |
hf mf cgetblk |
读取块(魔术卡专用) | 场景:想读取魔术卡的块0确认UID。 输入: hf mf cgetblk 0输出: 353C2AA6A6080400 |
hf mf cload |
写入dump到魔术卡 | 场景:有原卡的dump文件,想一次性克隆到魔术卡。 输入: hf mf cload -f hf-mf-353C2AA6-dump.bin输出:逐块写入,完成后提示成功 |
4.5 仿真内存操作
| 命令 | 说明 | 使用案例 |
|---|---|---|
hf mf eload |
加载dump到仿真内存 | 场景:想把备份的卡数据加载到内存,准备模拟。 输入: hf mf eload 353C2AA6输出:加载成功 |
hf mf esave |
保存仿真内存到文件 | 场景:模拟前想把当前内存状态保存下来。 输入: hf mf esave输出:生成仿真内存文件 |
hf mf eget |
获取仿真内存块 | 场景:想查看仿真内存中块0的内容。 输入: hf mf eget 0输出:显示块0的数据 |
hf mf eset |
设置仿真内存块 | 场景:想修改仿真内存中块16的内容。 输入: hf mf eset 16 000102030405060708090A0B0C0D0E0F输出:设置成功 |
hf mf sim |
模拟卡片 | 场景:想模拟一张卡测试读卡器。 输入: hf mf sim u 353c2aa6输出:开始模拟UID为353c2aa6的卡片 |
第三部分:低频卡(LF)操作指南
五、低频(LF)类
5.1 通用
| 命令 | 说明 | 使用案例 |
|---|---|---|
lf search |
搜索低频卡片 | 场景:放上一张未知低频卡,想识别类型。 输入: lf search输出:自动识别为HID Prox卡,显示卡号 |
lf search -u |
搜索未知低频卡 | 场景:标准搜索找不到,强制搜索未知调制方式。 输入: lf search -u输出:显示解调后的比特流,提示可能的调制方式 |
lf read |
读取低频ID | 场景:想读取低频卡的原始ID。 输入: lf read输出:显示读取到的低频信号数据 |
lf sim |
模拟低频标签 | 场景:想模拟一张低频卡测试读卡器。 输入: lf sim输出:开始模拟 |
5.2 HID Prox
| 命令 | 说明 | 使用案例 |
|---|---|---|
lf hid read |
读取HID卡 | 场景:放上一张HID卡,想读取卡号。 输入: lf hid read输出:Facility Code: 2006,Card Number: 12345 |
lf hid demod |
解调HID数据 | 场景:已捕获HID信号,想解调出卡号。 输入: lf hid demod输出:显示解调后的卡号 |
lf hid sim |
模拟HID卡 | 场景:已知Facility Code 2006,卡号12345,想模拟。 输入: lf hid sim 200670012d输出:开始模拟该HID卡 |
lf hid clone |
克隆到T55xx | 场景:想复制一张HID卡到T55xx可写卡。 输入: lf hid clone 200670012d输出:写入成功 |
5.3 T55xx 可写卡
| 命令 | 说明 | 使用案例 |
|---|---|---|
lf t55xx detect |
检测T55xx卡 | 场景:放上一张空白T55xx卡,想确认是否可写。 输入: lf t55xx detect输出:检测到T55xx卡,显示配置信息 |
lf t55xx dump |
读取全部数据 | 场景:想查看T55xx卡内部所有数据。 输入: lf t55xx dump输出:显示所有配置块和数据块 |
lf t55xx wr |
写入块 | 场景:想向T55xx的块0写入配置数据。 输入: lf t55xx wr b 0 d 00081040输出:写入成功 |
lf t55xx config |
设置调制方式 | 场景:想配置T55xx的调制方式为FSK。 输入: lf t55xx config FSK输出:配置成功 |
lf t55xx wipe |
擦除并重置 | 场景:T55xx卡数据混乱,想完全清空。 输入: lf t55xx wipe输出:卡片重置为出厂状态 |
5.4 EM410x / Indala
| 命令 | 说明 | 使用案例 |
|---|---|---|
lf em410x read |
读取EM410x | 场景:放上一张EM4100卡,想读取ID。 输入: lf em410x read输出:ID: 1A2B3C4D5E |
lf em410x sim |
模拟EM410x | 场景:已知ID为1234567890,想模拟测试。 输入: lf em410x sim 1234567890输出:开始模拟 |
lf em410x clone |
克隆到T55xx | 场景:想把EM410x ID写入T55xx卡。 输入: lf em410x clone --id 7500573615输出: Tag T55x7 written with 0xffbd40029e660d42 |
lf indala read |
读取Indala | 场景:放上一张Indala卡,想读取ID。 输入: lf indala read输出:ID: a0000000c2c436c1 |
lf indala sim |
模拟Indala | 场景:已知Indala ID,想模拟测试。 输入: lf indala sim a0000000c2c436c1输出:开始模拟 |
第四部分:数据分析与脚本
六、数据分析
| 命令 | 说明 | 使用案例 |
|---|---|---|
data plot |
显示图形窗口 | 场景:刚捕获了一段信号,想用图形查看波形。 输入: data plot输出:弹出图形窗口显示采样数据 |
data save |
保存采样数据 | 场景:捕获到一段有趣的信号,想保存下来。 输入: data save captured_signal.pm3输出:数据保存成功 |
data load |
加载采样数据 | 场景:之前保存过信号,想重新分析。 输入: data load captured_signal.pm3输出:数据加载成功,可用 data plot查看 |
data print |
打印解调缓冲区 | 场景:想查看当前解调缓冲区中的比特流。 输入: data print输出:显示解调后的二进制数据 |
data rawdemod |
解调数据 | 场景:已加载采样数据,想尝试自动解调。 输入: data rawdemod ask manchester输出:显示解调结果 |
七、脚本与自动化
| 命令 | 说明 | 使用案例 |
|---|---|---|
script list |
列出可用脚本 | 场景:想知道有哪些现成的脚本可以用。 输入: script list输出:显示所有可用脚本名称 |
script run |
运行脚本 | 场景:想把dump文件加载到仿真内存。 输入: script run dumptoemul -i hf-mf-353C2AA6-dump.bin输出:脚本执行成功 |
msleep |
延时(毫秒) | 场景:写脚本时,需要在两个操作之间等待。 输入: msleep 500输出:等待500毫秒 |
八、退出客户端
| 命令 | 说明 | 使用案例 |
|---|---|---|
quit |
退出 | 场景:操作完成,想退出PM3客户端。 输入: quit输出:返回到系统命令行 |
exit |
退出 | 场景:同上。 输入: exit输出:返回到系统命令行 |
第五部分:实战问题解决记录
九、高频卡常见问题
9.1 连接问题:Sending bytes to proxmark failed
现象:
- PM3 红灯常亮
- 命令行报错
Sending bytes to proxmark failed - 设备管理器能识别 COM 口但无法通信
解决方法:
- 强制重启:拔掉 USB 线,等待 10 秒,重新插入
- 进入 Bootloader 模式:
- 按住 PM3 侧面按钮
- 保持按住同时插入 USB 线
- 看到红灯闪烁后松开
- 重新刷写固件:
pm3-flash-bootrom pm3-flash-fullimage
9.2 命令格式错误:unexpected argument
现象:
- 输入命令后报错
unexpected argument - 提示
Try '... --help' for more information
原因:Iceman 新版固件命令格式与旧版不同,需要使用带参数名的格式
正确格式示例:
# 正确:带参数名
hf mf wrbl --blk 39 -b --key F1F1F1F1F1F1 --data FFFFFFFFFFFFFF078069FFFFFFFFFFFF
# 错误:无参数名(旧版格式)
hf mf wrbl 39 B F1F1F1F1F1F1 FFFFFFFFFFFFFF078069FFFFFFFFFFFF
查看帮助:
hf mf wrbl --help
9.3 复旦卡静态随机数问题:Static nonce detected
现象:
- hf 14a info 显示 Static nonce: yes
- 嵌套攻击报错 Static nonce detected. Quitting...
- 后门密钥尝试失败
原因:卡片是复旦微电子 FM11RF08S 芯片,具有静态随机数防破解机制
尝试过的解决方案:
-
后门密钥测试:
hf mf rdbl --blk 0 -a --key A396EFA4E24F hf mf rdbl --blk 0 -a --key A31667A8CEC1 结果:Auth error -
静态嵌套攻击:
hf mf staticnested --1k --blk 19 -b --key FFFFFFFFFFFF 结果:部分成功,扇区4的B密码有效 -
自动攻击:
hf mf autopwn 结果:成功破解大部分扇区密钥,生成完整dump文件
9.4 格式化卡片:恢复默认状态
目标:将加密扇区恢复为默认值(密钥全F,数据全0)
已知密钥情况(来自 hf mf autopwn 结果):
- 扇区1-3、10-15:A/B 密钥均为 FFFFFFFFFFFF
- 扇区4:B 密钥为 FFFFFFFFFFFF(A密钥未知)
- 扇区0:A/B 密钥均未知
- 扇区5-9:所有密钥未知
操作步骤:
-
备份当前数据:
hf mf dump -
恢复已知密钥扇区(以扇区9块39为例):
hf mf wrbl --blk 39 -b --key F1F1F1F1F1F1 --data FFFFFFFFFFFFFF078069FFFFFFFFFFFF -
清空数据块:
hf mf wrbl --blk 16 -a --key FFFFFFFFFFFF --data 00000000000000000000000000000000 -
验证写入结果:
hf mf rdbl --blk 39 -a --key FFFFFFFFFFFF
9.5 写入成功但数据未改变
现象:
- 写入命令返回 [+] Write ( ok )
- 再次读取发现数据还是原来的
原因:
- 扇区尾部控制位可能被设置为禁止写入
- 卡片可能已永久锁定
解决方法:
- 立即读取验证:
hf mf rdbl --blk 39 -b --key F1F1F1F1F1F1 - 检查访问控制位:
hf mf rdbl --blk 39 -a --key FFFFFFFFFFFF # 查看返回数据中的访问控制位是否正确
十、低频卡常见问题
10.1 未知卡检测:lf search -u 输出 PSK1 信号
现象:
[-] No known 125/134 kHz tags found!
[+] PSK1 demoded bitstream
[=] Possible unknown PSK1 Modulated Tag found above!
原因:卡片使用 PSK(相移键控)调制,不是常见的 ASK 或 FSK 卡
解决方法:
-
尝试不同解调方式:
data rawdemod psk2 data rawdemod fsk data rawdemod ask -
查看原始波形:
lf read -v data plot -
保存原始数据供后续分析:
data save unknown_card.pm3
10.2 EM410x 卡读取与克隆
成功读取EM410x卡:
lf search -u
# 输出:EM 410x ID 7500573615
克隆到T55x7卡:
lf em410x clone --id 7500573615
输出:Tag T55x7 written with 0xffbd40029e660d42
验证克隆结果:
lf em410x read
# 应返回相同的ID:7500573615
10.3 两张不同低频卡的处理
场景:两次 lf search -u 得到不同结果
| 卡片 | 识别结果 | 类型 |
|---|---|---|
| 第一张 | EM 410x ID 7500573615 | 标准EM410x卡 |
| 第二张 | PSK1 demoded bitstream | 未知PSK调制卡 |
解决方法:
- 第一张卡:直接用 lf em410x read 读取
- 第二张卡:先用 data rawdemod 尝试不同解调,再用 lf t55xx detect 检测芯片
第六部分:文件格式与备份
十一、文件说明
执行 hf mf dump 后生成的文件:
| 文件后缀 | 格式 | 说明 |
|---|---|---|
| .bin | 二进制 | 卡片数据的原始二进制格式 |
| .eml | 文本 | 可读的十六进制文本格式 |
| .json | JSON | 包含元数据的JSON格式 |
| .keys | 二进制 | 密钥文件 |
十二、数据备份建议
-
操作前先备份:
hf mf dump -
重要数据多重保存:
- 保存 .bin 文件供PM3恢复使用
- 保存 .eml 文件供手动查看和编辑
- 截图保存关键信息
-
低频信号备份:
data save lf_capture_日期.pm3
📝 常用命令速查表
| 你想做什么 | 输入命令 |
|---|---|
| 破解A密码(已知B) | hf mf autopwn -s 4 -b -k FFFFFFFFFFFF |
| 读取块16 | hf mf rdbl --blk 16 -a --key FFFFFFFFFFFF |
| 写入块19 | hf mf wrbl --blk 19 -b --key FFFFFFFFFFFF --data FFFFFFFFFFFFFF078069FFFFFFFFFFFF |
| 整卡备份 | hf mf dump |
| 检测默认密钥 | hf mf chk *1 ? d |
| 设置魔术卡UID | hf mf csetuid 12345678 |
| 模拟卡片 | hf mf sim u 353c2aa6 |
| 读取EM410x | lf em410x read |
| 克隆EM410x | lf em410x clone --id 7500573615 |
| 检测T55xx | lf t55xx detect |
| 检查天线 | hw tune |
| 查看固件版本 | hw version |
| 识别未知高频卡 | hf search |
| 识别未知低频卡 | lf search -u |
| 查看波形 | data plot |
| 保存采样数据 | data save filename.pm3 |
| 加载采样数据 | data load filename.pm3 |
⚠️ 常见错误及解决方法速查
| 错误信息 | 可能原因 | 解决方法 |
|---|---|---|
| Sending bytes to proxmark failed | 通信断开 | 重新插拔 USB,进入 Bootloader 模式 |
| unexpected argument | 命令格式错误 | 用 --help 查看正确格式,使用带参数名格式 |
| Auth error | 密钥错误 | 换用已知正确的密钥或类型(A/B) |
| Static nonce detected | 复旦卡防破解 | 尝试后门密钥或 hf mf staticnested |
| Can't authenticate to block | 密钥或块号错误 | 确认块号和密钥类型(A/B) |
| Error - can't find script | 脚本不存在 | 更新固件或手动下载脚本 |
| No known tags found | 未知卡类型 | 用 -u 参数强制搜索,或手动解调 |
| Write ( failed ) | 写入失败 | 检查密钥是否正确,卡片是否可写 |
| Command execute timeout | 设备无响应 | 重新插拔USB,重启客户端 |
| invalid option | 参数名错误 | 查看 --help 确认正确的参数名 |
| Wrong key | 密钥不正确 | 确认使用的密钥是否正确(A/B类型) |
💡 最终使用建议
- 先看帮助:任何不确定的命令先用 --help 查看格式
- 先备份:修改卡片前先用 dump 备份原数据
- 先验证:写入后用 rdbl 验证结果
- 区分大小写:密钥和参数都是大写十六进制
- 注意格式:Iceman 固件要求带参数名(如 --blk、--key)
- 耐心尝试:复旦卡需要特殊方法处理,不要灰心
- 保存日志:重要操作保存屏幕输出,方便回溯
- 多交流:遇到难题可以去 Proxmark3 论坛或社群求助
- 记录成功案例:每次成功操作记录下来,形成自己的经验库
- 循序渐进:从简单的读取开始,逐步尝试写入和破解
祝使用愉快!
公众号