Proxmark3 RDV4 完全指南:256KB 外部闪存与天线调优一次讲清
【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3
Proxmark3 RDV4 最大的两个变化,是板载多了一块 256KB 的外部 SPI 闪存,以及一套可测量的天线系统。前者让你把密钥字典、采集数据直接放进设备里跑,后者让天线调优从"凭感觉拧电感"变成有命令、有曲线的操作。本文面向刚拿到 RDV4(或准备升级)的安全研究者和硬件开发者,用一条从"验证设备"到"实战跑字典"的完整路径,把这些能力讲清楚,并附上常见故障的定位方法。
上手前的 4 项就绪检查
把设备通过 USB 接好、客户端能正常通信之后,先按下面顺序确认一遍,10 分钟可以排除大部分"到手不可用"的问题。
- 确认固件与硬件匹配:运行
hw version,确认输出中是 RDV4 平台。固件默认就是按 RDV4 平台(PM3RDV4)编译的,老固件或非 RDV4 固件在闪存命令上会缺功能。 - 确认闪存可读:运行
mem info,正常会输出闪存 ID、SHA1 和签名校验结果。这一步同时完成了下文的签名验证,不用分开做。 - 验证 RDV4 签名:
mem info输出里有--- RDV4 RSA signature ---段,末尾出现Genuine Proxmark3 RDV4 signature detected即表示这块闪存的唯一 ID 通过了 RSA 签名验证(防山寨用的机制,细节见 doc/ext_flash_notes.md)。 - 确认字典文件在位:客户端目录
client/dictionaries/下有默认的 MIFARE、iClass、T55xx 等密钥字典(.dic文件),后面实战会用到。
签名这块有个容易被忽略的点:如果哪天需要擦写闪存最后一页,先用mem dump把签名备份出来,签名一旦擦掉无法自行再生。备份命令:
mem dump -f flash_signature_dump -o 262015 -l 128256KB 外部闪存:4 个页怎么分、数据怎么放
这块 SPI 闪存共 256KB(0x40000 字节),被切成 4 个 64KB 的"页"(page),每页再分 16 个 4KB 的"扇区"(sector)。地址写法是0xPSxxx三段式:
0x3FF7F→ 页 3、扇区 0xF、页内偏移 0xF7F
四个页的用途分工很直白:
| 页 | 偏移 | 用途 |
|---|---|---|
| 页 0 | 0 | 用户数据 |
| 页 1 | 0x10000 (65536) | 用户数据 |
| 页 2 | 0x20000 (131072) | 用户数据 |
| 页 3 | 0x30000 (196608) | 系统保留:RSA 签名(0x3FF7F 起 128 字节)+ SPIFFS 文件区(扇区 0~13)+ 预留扇区 14 |
几个日常操作对应的命令:
- 上传:
mem load -f <file> -o <offset>。注意它写的区域必须先擦除(mem wipe -p <页>),字典类文件除外——带--mfc、--t55xx、--iclass等参数的字典上传走 SPIFFS 文件区,不需要预擦除,这也是字典推荐的存放方式。 - 下载:
mem dump -f <out> -o <offset> -l <length>,例如把整个页 1 拉回主机:mem dump -f page1_dump -o 65536 -l 65536。 - 擦除:
mem wipe -p 0/1/2。页 3 默认不允许被mem wipe擦掉,这是固件刻意的保护(会连签名一起没掉),所以"误擦系统页"这件事基本不会发生。
pm3 --> mem load -f mfc_default_keys --mfc pm3 --> mem load -f t55xx_default_pwds --t5xx页 3 里还装了一个 SPIFFS 文件系统(LittleFS 的同类,专为小闪存设计的文件层),字典就是按"文件"的形式住在里面的,所以更新字典不用管扇区对齐,直接写文件即可。
天线怎么调:tune、decay 和 LF 分频
RDV4 的天线部分(线圈 + 可调电容/电感)决定了 125kHz 低频和 13.56MHz 高频两个波段的读距上限。固件把"调天线"拆成了几个可执行的动作:
| 命令 | 做什么 | 什么时候用 |
|---|---|---|
hf tune | 激励高频天线并输出谐振附近的信号表现,--mix可加混响观察 | 拧 HF 端可调电容时,边拧边跑这条找最优点 |
lf tune | 对 LF 天线做同样的谐振测量 | 调整 LF 端调谐电容时使用 |
hw decay | 采集信号衰减曲线 | 评估天线耦合质量、对比改动前后差异 |
hw setlfdivisor <n> | 设置 LF 载波分频比,改变发射频率 | 适配 125kHz 以外的低频卡(如 134kHz 部分欧标卡) |
实际调试流程就是:固定硬件 → 跑一次hf tune/lf tune记录基线 → 动电容 → 再跑一次对比。把hw decay的曲线存下来做前后对照,比盯着读数靠谱得多。
顺带一提:天线调优只影响"读得到多远",不影响下面闪存和 T55xx 这些功能,两者互相独立,可以分开排查。
T55xx 转信器:配置寄存器与内存映射一图看懂
如果你会用 RDV4 做 LF 仿真,绕不开 T55xx 系列芯片(T5567/T5577 等)。它本质上是一个可编程 LF 转信器:给它写几个配置寄存器,就能模仿 EM4100、HID Prox 等各种 125kHz 卡。
配置寄存器(Block 0 / Page 0)是一串按位分组的开关,常用的几组:
- Bit 1–4:主密钥开关,决定数据块是否要密码才能改
- Bit 9–12:RF 时钟分频,从 RF/8 到 RF/128,直接决定仿真时的载波频率
- Bit 13–16:调制方式(Direct / PSK / FSK / Manchester 等)
- Bit 17–20:编码方式,和调制联动,一起决定"看起来像哪种卡"
内存侧是两级结构:8 个 Block、每个 32 位,共 256 位。Page 0 放配置与用户数据,Page 1 放模拟前端配置;用户数据块支持"主密钥锁定",没对上密钥就写不动——这就是lf t55xx系列命令里到处要带密码参数的原因。
上手时不需要背位定义:lf t55xx detectconfig可以从目标卡读出配置并提示写入命令,lf t55xx fixconfig用于修正读出的配置,配合字典里的t55xx_default_pwds就能覆盖绝大多数场景(密码字典在 doc/T5577_Guide.md 和 doc/cheatsheet.md 中都有对应说明)。
实战演练:从加载字典到查看结果
一条最短的端到端流程,以 MIFARE Classic 1k 卡 + 默认字典为例:
# 1. 就绪检查 pm3 --> mem info # 2. 把默认 MIFARE 密钥字典放进设备 SPIFFS pm3 --> mem load -f mfc_default_keys --mfc # 3. 对卡跑字典攻击(-f 指向主机侧字典文件) pm3 --> hf mf chk --1k -f mfc_default_keys # 4. 把设备闪存拉回主机检查 pm3 --> mem dump -f page0_dump -o 0 -l 65536结果怎么看:hf mf chk会逐扇区报告命中的 key A / key B;加--dump可以把找到的密钥写成二进制文件,--emu则直接写进仿真内存供模拟使用。整个流程里,字典既走主机文件系统、也能进设备闪存,前者用于"边跑边看结果",后者给独立运行的 standalone 模式用(下一节)。
升级前 vs 升级后:RDV4 差异对照
| 对比项 | 普通 PM3 平台 | RDV4 |
|---|---|---|
| 外部 SPI 闪存 | 无 | 256KB(4×64KB 页,页 3 含 RSA 签名 + SPIFFS) |
| 字典/数据存放 | 只能放主机侧 | 可上传进设备,mem load/dump/wipe全链路 |
| 防山寨签名 | 不适用 | 闪存唯一 ID 的 RSA 签名,mem info即可验证 |
| 独立运行(standalone)结果留存 | 无持久存储 | trace、密钥等可写回闪存 |
| 天线调优 | 手工调、无测量手段 | hf tune/lf tune/hw decay有量化反馈 |
| 附加硬件 | 基础 | 智能卡模块(Sim)、FPC 连接器 |
稳定性方面两点值得注意:一是页 3 的擦除保护是固件层面的,日常使用不用担心误伤签名区;二是本仓库固件默认编译体积已经接近 256KB ARM 芯片的上限,如果你的主机侧编译环境要适配老平台,需要先读 doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md 里的 256KB 裁剪说明再动Makefile.platform。
避坑指南:三个高频症状的定位路径
症状:mem info没有输出或报错误
定位:先hw version确认固件认出了闪存芯片;再确认 USB 链路没在中间掉包(重新插拔后重试)。
解决:仍无输出时,用 tools/pm3_online_check.py 跑一遍完整自检脚本,它会按 RDV4 的完整初始化序列走一遍,卡在哪一步输出就会指向哪一层(固件 / SPI 总线 / 芯片)。
症状:签名验证不通过(mem info未显示 Genuine 字样)
定位:看输出中Signature一行是ok还是invalid;invalid说明这块闪存上的签名对不上官方公钥。
解决:官方渠道购买的设备应找卖家核对;自改机型的用户可以用仓库自带的通用私钥(client/resources/pm3_generic_private_key.pem)自行签名,命令是mem info -s -p <pem 路径>,加-w会直接写进设备——写之前务必先按开头的命令备份原签名。
症状:mem load之前报区域未擦除
定位:这是预期行为而非故障——二进制数据写入的区域必须先mem wipe。
解决:要么先mem wipe -p <页>,要么改走字典通道(--mfc/--t55xx/--iclass等参数),字典走 SPIFFS 文件区,天然免擦除。
进阶玩法:脚本化、独立运行与多设备
- LUA 脚本:
client/luascripts/下有现成脚本可直接script run执行,例如lf_t55xx_chk.lua做 T55xx 配置体检、hf_mf_keycheck.lua批量查 MIFARE 密钥。自己写脚本时,设备侧能力通过script命令暴露的接口调用即可,参考client/lualibs/里的工具库。 - Standalone 独立运行:RDV4 的闪存让"挂机采集"成立——
HF_14ASNIFF、LF_ICEHID等 standalone 模式可以脱离主机持续嗅探,把 trace 和抓到的凭证写进 flashmem,回来再用mem dump取回。配置参考 doc/standalone/。 - 批量校验:多设备或新收设备时,用
tools/pm3_online_check.py批量过一遍初始化与签名验证,比逐台手敲命令省心得多。 - 命令行批处理:
client/cmdscripts/里的.cmd脚本(如test_psk_clone.cmd)演示了把多条命令串成一个任务的写法,字典攻击 + 结果落盘这类重复劳动很适合这么写。
行动清单
- 跑
mem info,确认闪存 ID 与Genuine Proxmark3 RDV4 signature detected两样都在; - 用
mem dump -f flash_signature_dump -o 262015 -l 128把签名备份一份存到主机; mem load -f mfc_default_keys --mfc上传一套默认字典,跟一张已知密钥的卡跑一次hf mf chk --1k,确认全链路可用;- 各跑一次
hf tune、lf tune、hw decay留下基线数据,之后调天线只对比曲线不凭手感; - 翻一遍 doc/ext_flash_notes.md 和 doc/cheatsheet.md 的 Memory 小节,把
mem load/dump/wipe的参数含义存档备用。
【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考