Proxmark3 HF_YOUNG 独立模式深度解析:双 Bank MIFARE 嗅探、仿真与 Magic 卡克隆实战

发布时间:2026/9/17 18:25:23

Proxmark3 HF_YOUNG 独立模式深度解析:双 Bank MIFARE 嗅探、仿真与 Magic 卡克隆实战 Proxmark3 HF_YOUNG 独立模式深度解析双 Bank MIFARE 嗅探、仿真与 Magic 卡克隆实战【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3本文围绕 Proxmark3 仓库中 HF_YOUNG 独立模式Standalone Mode的官方文档完整解析这一运行于 13.56 MHz 高频段、面向 MIFARE Classic 的双 Bank 嗅探/仿真/克隆模式的定位、操作模型与状态机并进一步结合 hf_young.c 源码还原从 FPGA 位流加载、卡片选择、卡片类型识别到 Magic 卡 Block 0 改写的完整调用链。读完本篇你将能够独立编译并烧录该固件、正确解读 A/B/C/D 四个 LED 的指示含义并理解克隆验证失败时设备回退逻辑的源码级原因。一、模式定位为什么需要 HF_YOUNGHF_YOUNG 由 Craig Young 于 2014 年贡献源码头注释运行于通用版 Proxmark3Generic 硬件不需要 RDV4 的外部 Flash、智能卡座或蓝牙模块——从 Makefile.hal 可以看到HF_YOUNG只出现在通用的STANDALONE_MODES列表中不属于STANDALONE_MODES_REQ_FLASH/REQ_BT等特殊硬件列表。它的核心价值在于脱离笔记本电脑的现场作业RECORD记录将 Proxmark3 置于嗅探Sniffer角色捕获 ISO 14443A / MIFARE Classic 读卡器与卡片之间的通信将捕获到的 UID、ATQA、SAK 存入选中的 BankPLAY仿真使用捕获到的 UID 与数据仿真一张 MIFARE Classic 卡片响应读卡器的认证请求CLONE克隆将捕获的数据写入一张 Magic Gen1a MIFARE Classic 卡片即 Block 0 可写入的卡片。MIFARE Classic 是部署量最大的非接触式智能卡之一。该模式支持对门禁系统进行即时现场测试捕获后无需连接电脑即可立刻仿真或克隆用于理解系统的认证时序。在 Proxmark3 的独立模式体系中一次固件只能编译进一个 Standalone 模式除非通过 Dankarmulti 多模式加载器组合因此 HF_YOUNG 适合“专职”MIFARE 嗅探场景的设备。该模式在仓库中的注册点包括模式列表与帮助文本armsrc/Standalone/Makefile.hal条件编译入口WITH_STANDALONE_HF_YOUNG时编译hf_young.carmsrc/Standalone/Makefile.inc全量固件构建脚本tools/build_all_firmwares.sh二、双 Bank 架构与状态机HF_YOUNG 最突出的设计是两个相互独立的内存 Bank源码中#define OPTS 2每个 Bank 各自保存一张已捕获卡片的数据。这一设计允许在一张目标卡片旁边同时“记住”另一张卡片实现捕获—仿真—克隆的连续作业循环。从源码结构看每个 Bank 的数据由如下紧凑结构体承载hf_young.c#define OPTS 2 typedef struct { uint8_t uid[10]; // 最多 7 字节 UID 的存储冗余 uint8_t uidlen; uint8_t atqa[2]; uint8_t sak; } PACKED card_clone_t;需要指出的是官方文档的 How 一节提到捕获 UID, ATQA, SAK, and key data但从card_clone_t结构体看实际持久保存的只有 UID / UID 长度 / ATQA / SAK 四项并不包含密钥。该模式的仿真工作在物理层反混淆层以下完成不依赖也不存储 MIFARE 密钥——这一点在理解其能力边界时很重要。LED 指示LED含义A常亮选中 Bank 0B常亮选中 Bank 1C常亮RECORD 模式D常亮PLAY仿真模式CD常亮CLONE 模式A-D闪烁活动指示源码中与之对应的细节启动时LED(selected 1, 0)点亮当前 Bank 灯hf_young.c捕获成功后 A、B 灯各闪烁 200ms 共两轮作为“收到卡片”的活动反馈hf_young.c进入克隆分支时 A 灯以 250ms 周期闪烁hf_young.c。按键操作操作效果单击推进状态RECORD → PLAY → CLONE → RECORD长按在 Bank 0 与 Bank 1 之间切换状态机官方文档模型上图是文档给出的理想化模型。若对照 RunMod() 主循环 的实际实现有几个值得注意的具体化行为RECORD 中的按键若当前 Bank 已有捕获cardRead[selected]为 1单击直接跳到该 Bank 的 PLAY若当前 Bank 为空而另一个 Bank 有卡单击会自动切到另一个 Bank 去播放两个 Bank 都为空时按键被忽略。PLAY 中的按键使用BUTTON_HELD(1000)在 1 秒窗口内判别——单击SINGLE_CLICK会切换到另一个 Bank并进入 RECORDiGotoRecord 1hf_young.c长按HOLD则进入 CLONE 流程hf_young.c。克隆成功后自动换 Bank克隆成功时会清除本 Bank 的已捕获标记、回到 RECORD并自动切到另一个 Bankhf_young.c形成“捕获 A 卡 → 克隆到 Magic 卡 → 继续捕获 B 卡”的作业节奏。退出主循环每轮调用data_available()检测 USB 命令一旦收到即break退出独立模式hf_young.c与状态机图中的 USB connection 终态一致每轮循环开头的WDT_HIT()负责喂狗。三、三大状态的工作原理3.1 RECORDISO 14443A 读卡器模式捕获进入 RECORD 时设备先切换 FPGA 配置并进入循环选卡iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD); // 配置为 14443A 读卡器模块 // 循环内 if (iso14443a_select_card(NULL, card[selected], NULL, true, 0, true) 0) { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // 选卡失败关闭 FPGA 主模式重试 SpinDelay(500); continue; }hf_young.c捕获成功后将 UID、ATQA、SAK 写入本 Bank 的uids[selected]并记录 UID 是 4 字节还是 7 字节hf_young.c。这里有一个防呆细节如果新卡片的 UID 与另一个 Bank 中已存的 UID 完全相同则跳过写入提示 Card selected has same UID as what is stored in the other bank. Skipping.hf_young.c避免两 Bank 冗余。进入记录前还有 500ms 的SpinDelay源码注释明确其目的是 prevent catching some weird data防止捕获到异常数据。3.2 PLAY按 SAK/ATQA 自动识别卡片类型PLAY 状态并非只会仿真 MIFARE Classic。从源码看设备依据捕获到的SAK 与 ATQA 组合自动判断卡片类型并传入不同的仿真类型编号调用SimulateIso14443aTag(type, flags, data, 0)hf_young.cSAKATQA识别结果仿真类型编号0x0804 00Mifare Classic 1K10x1802 00Mifare Classic 4K4 字节 UID80x0844 00Mifare Classic 4K7 字节 UID80x0044 00Mifare Ultralight20x2004 03Mifare DESFire30x2044 03Mifare DESFire EV1/Plus/JCOP3其他组合—回退为 Mifare Classic 仿真17 字节 UID 通过FLAG_SET_UID_IN_DATA(flags, 7)告知仿真层4 字节则为FLAG_SET_UID_IN_DATA(flags, 4)。虽然文档以 MIFARE Classic 为主题实际固件对捕获到的 Ultralight / DESFire 卡片也能给出物理层仿真这是一个文档未展开、但源码确认的能力。3.3 CLONEMagic 卡 Block 0 改写CLONE 状态针对Magic Gen1a卡片Block 0 可写的国产 MIFARE Classic 兼容卡执行其核心是复用仓库中Magic 卡块读写的底层函数用MifareCGetBlock(params, 0, oldBlock0)读出目标 Magic 卡当前的 Block 0若读出值前 4 字节全为 0判定 No changeable tag detected不是可改写卡回退到 PLAY 模式构造新 Block 0前 4 字节填入捕获到的 UID第 5 字节写入BCCnewBlock0[4] newBlock0[0]^newBlock0[1]^newBlock0[2]^newBlock0[3]第 6 字节起保留原卡 Block 0 的后 11 字节不动——因为 MIFARE Classic 的 Block 0 中字节 5–7 是预留的 SAK/ATQA 配置区不可随意覆盖hf_young.c用MifareCSetBlock(params, 0, newBlock0)写回并立即重新读出比对memcmp(testBlock0, newBlock0, 16)做写入验证验证成功打印 Cloned successful! 并自动切换 Bank 回到 RECORD失败则打印 Clone failed. 回到 PLAY。params的取值为MAGIC_SINGLE | MAGIC_WUPC | MAGIC_DATAINhf_young.c。这些是仓库定义的 Magic 卡工作标志位work flags在 include/protocols.h 中有完整的位定义// bit 0 - need get UID → MAGIC_UID 0x01 // bit 1 - send wupC → MAGIC_WUPC 0x02 // bit 2 - send HALT → MAGIC_HALT 0x04 // bit 3 - turn on FPGA → MAGIC_INIT 0x08 // bit 4 - turn off FPGA → MAGIC_OFF 0x10 // bit 5 - set datain → MAGIC_DATAIN 0x20 #define MAGIC_SINGLE (MAGIC_HALT | MAGIC_INIT | MAGIC_OFF) // 0x1E即单次完整序列初始化 FPGA → 发 wupC 唤醒 → 操作后 HALT 挂起 → 关闭 FPGA加上MAGIC_DATAIN表示结果直接写回datain缓冲而非走 USB 应答——这正是独立模式无主机连接能直接调用 MifareCGetBlock / MifareCSetBlock 的前提。源码内的大段注释hf_young.c还解释了该克隆逻辑的来历它模拟了客户端CMD_HF_MIFARE_CSETBL/CMD_HF_MIFARE_CGETBL命令处理路径中mf_chinese_set_uid的工作流即读 Block 0 → 只替换 UID 前 5 字节 → 写回。从能力边界看克隆只改写 Block 0UID 区不复制卡片数据区内容因此适用于门禁系统只认 UID的场景对需要密钥认证的深度交互该模式并不处理。另外源码注释提到 magic 卡通常只承载 4 字节 UID克隆逻辑也只取uids[selected].uid的前 4 字节hf_young.c。四、编译与烧录官方文档给出的编译烧录流程为make clean make STANDALONEHF_YOUNG -j ./pm3-flash-fullimage结合仓库的构建体系补充以下实操细节STANDALONEHF_YOUNG会经由Makefile.hal转为WITH_STANDALONE_HF_YOUNG编译标志触发 Makefile.inc 将hf_young.c加入SRC_STANDALONE也可以不传命令行参数而是参照 开发指南复制Makefile.platform.sample为Makefile.platform在其内设置STANDALONEHF_YOUNG之后每次make -j都会固定编译该模式由于一次固件只能包含一个 Standalone 模式切换模式前务必make clean强制全量重编译并在编译输出头部确认打印了HF_YOUNG烧录使用仓库根目录提供的 pm3-flash-fullimage 脚本对应fullimage包含 bootrom 与 armsrc 固件烧录完成后长按设备按钮即可触发 LED 显示并进入独立模式若保持 USB 连接可在终端查看Dbprintf输出的调试语句如 Read UID:、Cloned successful!这是验证各状态流转最直观的方式。ModInfo()的识别串为 HF Mifare sniff/simulation - (Craig Young)连接客户端执行hw status时可以看到当前设备安装的是否为该模式hf_young.c。五、适用前提与相关模式适用前提与限制以当前仓库源码为准硬件为通用 Proxmark3 即可无 Flash/蓝牙依赖只捕获并保存 ISO 14443A 物理层标识信息UID/ATQA/SAK仿真为物理层回放不涉及 MIFARE 密钥与数据块内容CLONE 仅对 Block 0 可写的 Magic Gen1a 卡有效且仅替换 UID4 字节 BCC保留原卡 SAK/ATQA 配置字节两 Bank 数据保存在 RAM 中断电或 USB 退出独立模式后不保留。仓库中定位相近、可对照选择的其他独立模式MattyRun自动化 MFC 密钥检查、嵌套攻击、Dump 与仿真CraftByteISO 14443A UID 窃取/仿真器MFC Simulator基于 Flash 中 dump 的多槽位 MFC 仿真器。若需要更广泛的独立模式概览或开发新模式可参考 Standalone 模式总览与开发指南。【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 18:25:23

Playnite:开源游戏库管理工具快速入门

Playnite:开源游戏库管理工具快速入门 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https://gitcode.co…

2026/9/17 18:25:23

PyTorch多GPU训练实战:DataParallel原理与显存优化

简介:本资源是一份面向深度学习开发者与PyTorch初学者的多GPU并行训练实战指南,聚焦解决模型训练效率瓶颈问题,尤其适用于拥有双GPU及以上设备、希望加速训练流程的算法工程师与科研人员。资源以PDF文档形式呈现,共1个文件&#x…

2026/9/17 18:25:23

网站测速:你测的不是速度,是“信任成本“

网站测速最容易被忽略的一个真相是:用户抱怨"网站慢",很多时候并不是在说加载时间,而是在说"我不确定这个网站靠不靠谱"。 加载慢只是表象,真正让用户离开的不是那几秒钟的等待,而是等待过程中产…

2026/9/17 19:20:28

Rerun 实战:使用 NV12 像素格式流式显示摄像头视频

Rerun 实战:使用 NV12 像素格式流式显示摄像头视频 【免费下载链接】rerun Visualize, query, and stream to train on multimodal robotics data. 项目地址: https://gitcode.com/GitHub_Trending/re/rerun 本篇技术指南围绕 Rerun 官方示例 examples/python…

2026/9/17 19:20:28

Folo智能翻译:打破语言壁垒的利器

Folo智能翻译:打破语言壁垒的利器 在这个信息爆炸的时代,我们每天都会接触到来自世界各地的内容。语言的差异常常成为我们获取知识的障碍。Folo的智能翻译功能正是为解决这一痛点而生,让你轻松跨越语言鸿沟,畅游全球资讯海洋。 …

2026/9/17 19:20:28

电力监控网络安全方案:白名单与隔离装置落地实践

简介:这是一份面向电力监控系统网络安全建设的完整方案文档,适合电力行业运维、安全及设计人员参考使用。文档从背景意义与现状分析入手,先梳理电力监控系统组成、运行环境与安全短板,再围绕网络安全目标与原则,展开物…

2026/9/17 19:20:28

Arduino零基础入门:从开箱到工业级项目的硬核实操路径

1. 这不是“学完就能做项目”的速成课,而是帮你把Arduino真正焊进肌肉记忆的实操路径你搜“Arduino零基础入门”,页面刷出来几百个标题带“保姆级”“全套”“从0到1”的视频合集——点开前3秒,画面是整齐的开发板特写激昂BGM,讲师…

2026/9/17 19:15:28

EGM2008高程转换:单水准点实现厘米级GPS高程精度

简介:本资源是一份面向测绘、GIS及地理信息工程领域从业者与高校相关专业师生的专业技术文献,聚焦GPS高程转换这一实际工程难点,提出基于EGM2008全球重力场模型的高效解决方案。针对山区等水准点稀少区域难以实施传统曲面拟合法的问题&#x…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码