NFC?我抓:一款开源 NFC 抓包硬件的诞生(第一章)

阅读量7037

发布时间 : 2025-10-17 14:18:17

NFC?我抓:一款开源 NFC 抓包硬件的诞生(第一章)

作者:hediandian
状态:先行技术博客 · 项目代码整理中 · 硬件原型已验证
目标协议:ISO/IEC 14443-A(NFC-A)
关键词:NFC 抓包、协议分析、ST25R3916B、ESP32-S3、开源硬件、14443-A、低成本


0x00 起源:那个深夜的 NFC 渗透测试

凌晨 2:17,城市早已沉睡,只有写字楼的门禁系统还在忠实地工作。

我站在公司楼下,手里攥着一张从垃圾桶里捡来的员工卡——它看起来和普通工牌无异,但我知道,这张卡背后藏着整个办公区的通行权限。我的目标很简单:在不触发警报的前提下,复制它的行为,或者至少搞清楚它说了什么。

我把卡靠近读卡器,绿灯亮起,门开了。
但问题来了:它到底说了什么?

是 UID?是加密认证?还是某种动态令牌?
没有原始通信数据,我就像一个站在玻璃墙外的窃听者——看得见动作,听不见对话。

我掏出 Proxmark3,运行 hf 14a snoop,结果只抓到半截 ATQA;
换 ChameleonMini,只能模拟已知卡片,无法记录未知交互;
ACR1252U?它连原始帧都不给你。

那一刻我意识到:真正的渗透测试,需要真正的“耳朵”。
于是,我决定自己造一个——一个能完整记录 NFC-A 通信全过程的硬件。
现在,它能跑了。


0x01 我们做了什么:从射频底层重构抓包逻辑

这个项目的核心,不是依赖某个芯片的“神奇功能”,而是基于 ST25R3916B 的底层射频能力,从零实现 ISO/IEC 14443-3 层的数据透传机制。

具体来说:

  • 利用 ST25R3916B 强大的模拟前端,直接控制载波生成、ASK 调制与解调;
  • 通过定制 RF 库(基于 ST 官方驱动深度修改),在 PCD 发起通信时精准切换接收状态;
  • 同时捕获两个方向的数据:
    • PCD → PICC:通过检测读卡器对载波的调制边带;
    • PICC → PCD:通过监听卡片的负载调制响应;
  • 将原始帧通过高速 SPI 传给 ESP32-S3,再经 USB CDC 实时输出。

这并非“监听模式”,而是一套高精度、低延迟的双向帧捕获系统。
它不参与认证、不发送 ACK、不干扰原通信——只安静地记录。


0x02 硬件设计:4 层板 + 042 封装 + 不到 50 元

为了兼顾性能与成本,我们在硬件上做了大量优化:

关键规格

  • 主控:ESP32-S3-WROOM-1(USB OTG 原生支持,双核处理 RF 与 USB)
  • NFC 前端:ST25R3916B(支持 106–848 kbps ASK,高灵敏度接收)
  • PCB:4 层板(嘉立创 EDA 绘制),L2 为完整地平面,保障射频稳定性
  • 封装:全部采用 0402 封装元器件,在 52mm × 28mm 的板面上实现高密度布局
  • 天线:50mm × 25mm 平面线圈,匹配网络可调,有效距离达 4–5cm
  • 接口:USB-C 供电 + 数据,无需额外串口芯片

成本控制到极致

部件 单价(批量)
ESP32-S3-WROOM-1 ¥22
ST25R3916B ¥24
0402 无源器件 ¥3
USB-C + LDO ¥1
总计 < ¥50

整机 BOM 成本不到 50 元人民币。这意味着,一个学生用半个月饭钱,就能拥有一台具备完整 NFC-A 抓包能力的硬件设备。


0x03 当前能力:v0.1 已支持完整 APDU 抓取

虽然项目仍处早期,但核心功能已验证通过:

已实现

  • 完整 NFC-A 初始化流程:REQA → ATQA → UID(7 字节)→ SAK
  • RATS / ATS 交换(用于高速通信协商)
  • 完整 APDU 交换:包括 ISO/IEC 7816-4 命令与响应
  • 双向帧标记([PCD→PICC] / [PICC→PCD])
  • 毫秒级时间戳记录(便于基本时序分析)
  • USB CDC 实时输出原始帧

抓包示例(MIFARE DESFire)

[PCD → PICC] 26
[PICC → PCD] 04 00
[PCD → PICC] 93 20
[PICC → PCD] 88 12 34 56 68
[PCD → PICC] 93 70 88 12 34 56 68 12 34
[PICC → PCD] 08
[PCD → PICC] E0 80 00 00 00        # RATS
[PICC → PCD] 75 77 81 02 80 31 80  # ATS
[PCD → PICC] 90 0A 00 00 00 00      # APDU: Get Key Settings
[PICC → PCD] 00 00 91 00            # APDU Response

这意味着,你可以完整复现一次门禁认证、公交扣费或 NFC 支付的底层交互过程。


0x04 硬件预览

图 1:NFC Sniffer S3 原型板(4层PCB + 0402封装)

硬件预览
基于嘉立创 EDA 设计的 4 层板,全部采用 0402 封装元器件。尺寸仅 52×28mm,手工焊接需一定经验,但完全可行。


0x05 项目贡献:我们做了这些

这个项目通过一系列具体工作,实现了低成本、高完整度的 NFC-A 抓包能力:

1. ST25R3916B 底层 RF 库移植与增强

  • 重写了射频控制逻辑,支持动态切换收发状态;
  • 实现了对 14443-A 下行(PCD→PICC)和上行(PICC→PCD)的同步捕获;
  • 优化了 FIFO 读取时序,提升高速通信下的稳定性。

2. 低成本 4 层硬件设计

  • 使用嘉立创 EDA 完成全部设计,支持一键打样;
  • 全板采用 0402 封装,在保证射频性能的同时压缩尺寸;
  • 天线匹配网络可调,适配不同场景。

3. 完整协议栈抓取能力

  • 从 REQA 到 APDU,覆盖 NFC-A 全流程;
  • 输出带方向与时间戳的原始帧,便于后续分析。

4. 未来可扩展架构

  • 固件支持 OTA 升级;
  • 主动注入功能仅需软件更新,无需硬件改动;
  • 预留 NFC-B、FeliCa 扩展接口。

0x06 下一步:代码即将开源

目前,项目代码正在紧张整理中,将尽快开源。届时将包含:

  • ESP-IDF 固件工程(含 RF 库、USB 驱动、抓包逻辑)
  • 嘉立创 EDA 硬件工程(原理图 + PCB + BOM)
  • Python 上位机工具(实时显示 + PCAP 导出)
  • 详细焊接与调试指南

0x07 结语:NFC?我抓。

这个项目没有宏大口号,只有一个朴素目标:让 NFC 通信可见。

我们用不到 50 元的成本,4 层 PCB,0402 封装,和一套从射频底层写起的代码,实现了对 NFC-A 全流程通信的稳定抓取。

当然,必须坦诚:这仍是一个早期原型。当前版本存在诸多不足——天线调谐依赖手动、高速通信稳定性有待验证、上行帧在强干扰环境下可能丢失、软件解析能力几乎为零……它远非完美,甚至可能在你的设备上跑不起来。

但正因如此,我才写下这篇博客。
一个人的极客实验,终将因实践而逐步完善。

NFC?我抓。


项目状态:代码整理中 · 将尽快开源

第一章完 · 敬请期待:代码开源 + 第二章《Wireshark 集成与主动注入》

本文由hediandian原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/312592

安全KER - 有思想的安全新媒体

分享到:微信
+10赞
收藏
hediandian
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66