先说我自己的情况:小区门禁发了一张卡,押金20,物业说补卡要本人带身份证登记,办好还要等两天。家里三个人,一张卡实在不够用。于是我开始用手机NFC折腾,结果发现大部分门禁卡根本没法用手机直接复制。后来入手了一把Proxmark3(老玩家都叫PM3),把自家门禁卡完整复制了一遍,顺带搞清楚了M1、UID、CUID之间的那些门道。
这篇文章不玩虚的,直接讲清楚:手机NFC能做什么、不能做什么,PM3怎么选型、怎么装冰人固件,M1卡的密钥怎么读,复制卡怎么选、怎么写入,以及为什么你复制完刷不开。照例先声明:以下所有内容,只适用于你自己拥有、或者你被明确授权管理的门禁卡和读卡设备。未经授权去复制别人的卡、刷公共区域的门禁,不在讨论范围内,请管住手。
1. 先搞明白门禁卡“真身”:M1、UID、CUID到底差在哪
在动手之前,建议先搞清楚门禁卡里到底存了什么。不然你复制完刷不开,根本不知道是卡不对、数据不对还是门禁系统太高级。
1.1 RFID和NFC,以及门禁卡常见频率
RFID是射频识别技术的统称,常见的工作频率有125kHz、13.56MHz、915MHz等。NFC其实是基于13.56MHz高频的一套通信标准,可以理解为RFID在手机、支付、门禁这些民用场景的落地形态。门禁领域最常见的是两类:低频125kHz的EM4100/T5577卡,以及高频13.56MHz的Mifare系列卡。老单元楼里那种“嘀”一声就开的老式门禁,大概率是低频卡;现在小区、写字楼里常见的则是Mifare卡,其中Mifare Classic 1K(芯片代号常写作S50)占了绝大多数,大家平时说的M1卡,就是它。
M1卡之所以成为门禁事实标准,是因为它比低频卡多了一整套加密认证和存储机制。低频EM4100卡里基本只有一个卡号,连数据都存不了;M1卡则有1KB、4KB等容量版本,可以在内部划分扇区,存放卡号、有效期、楼层权限之类的数据。
1.2 M1卡的扇区、块和密钥
M1 1K卡内部是1024字节,分成16个扇区,每个扇区4个块,每个块16字节。厂商为了保护数据,把每个扇区都配了一对密钥,KeyA和KeyB,每个扇区都可以独立配置读写权限。默认出厂状态下,整张卡的密钥通常都是FFFFFFFFFFFF或者A0A1A2A3A4A5这类固定值。
这里有个非常关键的点:第0扇区的第0块,存放的是UID卡号、BCC校验、SAK/ATQA等厂商数据,普通M1卡这块出厂后是锁死的。UID就相当于这张卡在门禁系统里的身份证号,门禁读卡器刷到卡,先读UID,再根据UID去后台查这个卡号有没有权限。所以复制门禁卡,最核心的目标就是让新卡保持和原卡一致的UID,同时把原卡扇区里的数据也完整搬过去。
扇区里存的东西五花八门,有的门禁把有效期放在第5扇区,有的梯控把楼层权限放在第12扇区,还有的干脆在卡里存一份卡号副本做二次校验。如果你只复制了卡号,没搬运扇区数据,遇到校验严格的门禁就可能被拒。
1.3 UID卡、CUID卡、普通M1卡的本质区别
很多新手买卡时会被商家绕晕,什么UID卡、CUID卡、UFUID卡、普通卡,其实关键是看0扇区0块能不能写。
- 普通M1空白卡:0块锁死,UID无法修改,只能写其他扇区。价格最便宜,几毛钱一张。
- UID卡(Magic卡):0块可写,UID可以改成任意值,所以能伪造任意卡号。不过它的0块可写特征容易被专业读卡器识别出来。
- CUID卡:同样是Magic卡,但改进了写入方式,支持对任意块进行覆盖写,稳定性更好,很多型号还支持锁卡头,把0块写保护起来,让读卡器以为它是普通M1卡。
一句话总结:门禁只校验卡号,普通M1就能复制;门禁同时校验卡号和扇区数据,就必须买UID或CUID;遇到门禁会检查Magic卡特征,UID卡很可能刷不开,CUID锁卡头后还有机会。
1.4 为什么手机NFC只能“看”不能“抄”
刚接触NFC的人都会有个疑惑:手机明明能读出卡号,为什么不能复制?因为手机NFC在模拟门禁卡时,只能暴露一个卡号(UID),无法把M1卡那些加密扇区的数据和密钥一起模拟出来。手机内置安全芯片出于安全考虑,不会给你提供任意写入扇区数据的开放能力。而门禁系统如果只认卡号,那手机模拟确实够用;但如果门禁会去读扇区数据来做二次校验,手机模拟出来的空卡就露馅了。这也是为什么后面必须用PM3这种专业读写器,先把原卡数据完整读出来,再写入一张可写的M1兼容卡里。
读到这里应该清楚:复制门禁卡的本质是“读取+搬运”,不是玄学。搞清楚卡里装了什么,后面每一步都有依据。
2. 手机NFC不是没用,它先把卡“验明正身”
上PM3之前,我非常建议先用手机NFC把卡“初检”一遍。这步成本最低,能帮你判断值不值得继续折腾。
2.1 用NFC Tools给门禁卡做初检
Android手机上装NFC Tools这类App,把卡贴到NFC区域,能直接看到UID、技术类型(NfcA、MifareClassic、IsoDep等)、ATQA、SAK这些参数。通过ATQA/SAK可以初步判断卡是不是Mifare Classic:
- 常见M1 S50(1K):ATQA=0x0004,SAK=0x08;
- Mifare Classic 4K(S70):SAK=0x18;
- 如果识别成IsoDep、NfcA但型号不明,可能是Mifare Plus或者CPU卡,这类卡复制难度会高很多。
iOS端的NFC读卡能力比Android受限,用系统快捷指令或第三方NFC工具也能读取一些基础信息,但要判断卡型还是Android方便。
如果App提示“包含加密扇区”或者读取时部分数据报错,基本可以确定是加密M1卡。注意,NFC Tools只是一把“放大镜”,它读到的是卡愿意公开的部分,不是全部数据。想看完整扇区,还得靠读写器。
2.2 手机钱包模拟门禁卡的真相
手机钱包App里那个“模拟门禁卡”功能,流程是这样的:读卡器模块读取实体卡的UID,然后在手机安全芯片里生成一张“只有卡号相同、扇区数据为空”的虚拟卡。所以:
- 门禁只校验UID,模拟完就能刷开;
- 门禁会读取扇区校验,手机模拟大概率没戏;
- 有些手机更是直接检测到加密卡就拒绝模拟,提示你无法添加。
我自己试过的情况是:公司写字楼闸机只认UID,手机模拟后刷得很顺;小区门禁要读扇区,手机模拟后显示成功但门纹丝不动。当然,每个门禁方案不一样,能不能模拟,只有实测才知道。这里多说一句,手机钱包在模拟门禁卡时通常会要求验证门禁卡密码,如果是加密卡,很多机型会在这一步直接拦截。
2.3 什么时候手机够用,什么时候直接上PM3
如果手机钱包能模拟成功,你的复制需求其实已经解决了,不需要买任何设备。如果手机提示加密卡无法模拟、或者模拟后刷不开,就需要更进一步的工具。
- 初级需求:只复制卡号(UID),手机NFC+钱包模拟大概率够用;
- 中级需求:想完整复制M1卡的扇区数据,几十块的PN532/ACR122U配合电脑软件可以试试,但全加密卡很吃力;
- 进阶需求:跑密钥、做嵌套攻击、写CUID卡、反复调试,直接上PM3。
网上经常有人提到“NFC Reader Tool电脑版”这类软件,配ACR122U读卡器也能读一些M1数据,但遇到全加密卡基本就卡住了。我的建议是,如果你已经确定要复制加密卡,少走弯路,直接考虑PM3。
3. PM3设备选择与固件环境:为什么老玩家都说它才是主角
PM3在RFID玩家圈子里几乎是标配,全称Proxmark3,最早是国外安全研究人员做的开源硬件,用来研究和测试13.56MHz、125kHz等多种频段的RFID/NFC设备。它的优势不是单纯“读写”,而是能干很多软件读卡器干不了的事:比如对M1卡做密钥枚举、嵌套攻击、硬嵌套攻击,这些是复制加密门禁卡的核心能力。
3.1 为什么ACR122U/PN532替代不了PM3
ACR122U、PN532这类读卡器本身并不差,它们遵循ISO 14443协议,可以正常读写M1的非加密扇区,也能在已知密钥的情况下读写加密扇区。但问题在于,面对全加密的M1卡,它们缺少“在没有密钥的情况下把密钥找出来”的能力,或者只能依赖电脑端的第三方插件做极其缓慢的枚举。PM3则把nested、hardnested这类攻击算法直接做到固件层面,配合较大内存,可以现场离线跑字典、在线跑嵌套攻击,速度完全不是一个量级。简单说,ACR122U适合“已知密码后读写”,PM3适合“未知密码时想办法得到密码”。
另外PM3的天线设计比普通读卡器更灵活,既能读实体卡,也能配一个外接天线去刷一些特殊场景。虽然我平时只用它读卡写卡,但偶尔需要调试低频EM4100卡时,PM3也能一把梭,不必再买第二台设备。
3.2 版本怎么选:128K、256K、冰人固件
市面上PM3硬件版本很多,新手最容易踩坑的是EEPROM容量。常见旧版Proxmark3是128K存储,后期很多增强版做到256K。256K版本可以装更大的字典和更完整的固件功能,这就是大家搜索“PM3 256K冰人固件”的原因。
- Iceman固件(iceman fork)是目前社区最活跃的固件分支,持续更新,命令更友好,M1攻击、低频卡支持、命令行交互都比官方固件好用;
- 购买时直接看硬件标注,优先选支持256K的Easy版或RDV4版;
- 如果手里是128K老设备,也能刷Iceman的兼容固件,只是部分高档功能可能因存储受限。
我个人的建议:如果预算允许,别买最便宜的裸板,选带塑料外壳、天线线圈做工好一点的版本,不然接线松动、天线信号差会很影响读卡速度。
3.3 装驱动、刷固件、连接客户端
PM3在Windows下使用,一般流程:
- 用USB连上设备,安装驱动,把设备识别为Proxmark3,而不是未知设备;
- 下载Iceman客户端和固件包(Windows预编译版可以直接运行proxmark3.exe);
- 如果固件不是Iceman版本,用
fwupdate或proxmark3.exe --flash刷入新的bootrom和fullimage固件; - 打开客户端,进入pm3交互模式,执行
hw version确认版本信息,看到类似“Iceman”的关键字就成功了。
补充一句,刷固件前一定先备份原固件,虽然多数情况下刷不坏,但万一断电中断,会多花时间处理变砖。驱动安装时尽量别开着杀毒软件,有些安全工具会拦截PM3驱动。
3.4 你必须先会的几个命令
在PM3里,最常用的是这样一组命令:
hw version:查看固件版本;hf search:对高频卡做自动探测,识别卡型;hf 14a info:读取ISO 14443A卡的UID、ATQA、SAK;hf mf chk:用内置字典批量检测M1各扇区密钥;hf mf autopwn:一条命令完成默认密钥枚举、嵌套攻击和dump导出;hf mf dump:保存当前读到的M1数据为dump文件;hf mf restore:把dump数据恢复到目标卡。
新手拿到PM3,不要急着去刷门禁。先拿一张空白M1卡练手,熟悉上述命令的输入输出,再考虑实战。PM3读卡时要把卡放在天线中央,避免周围有金属物体,否则经常出现超时或读取失败。
4. 实战:把自己门禁卡完整读出来
下面进入正题,以一张常见的M1加密门禁卡为例,走一遍完整读取流程。再次提醒,以下操作请只用于你自己的卡。
4.1 第一步永远是确认卡型,而不是直接开跑
把卡放到PM3天线上,执行:
hf search如果返回结果是“Mifare Classic 1K”或类似信息,说明是M1卡,可以继续;如果显示“Mifare Plus”、“IsoDep”或“CPU card”,后面那套M1攻击命令就不适用了。此时可以再用hf 14a info看一下UID和SAK,确认卡在门禁系统里的身份。
很多新手一上来就执行hf mf autopwn,如果卡不是M1,命令会一直超时,还以为设备坏了。所以先花十秒钟确认卡型,能省下大量排查时间。
4.2 用密钥字典跑一遍,M1加密门就打开一半
确认是M1后,先跑字典:
hf mf chkIceman固件内置了大量默认密钥,也就是大家常说的“m1卡常用密钥”。常见的默认密钥包括:
- FFFFFFFFFFFF
- 000000000000
- A0A1A2A3A4A5
- D3F7D3F7D3F7
- AABBCCDDEEFF
- 112233445566
如果门禁厂商没有刻意改密钥,或者只改了一部分扇区,这一条命令就能把所有扇区的KeyA/KeyB找出来。跑完会列出哪些扇区用了什么密钥。这时执行hf mf dump,可以把能用已知密钥读出来的扇区数据全部保存下来。
有些卡会故意留几个默认密钥扇区,把关键扇区改成自定义密钥,门禁系统只读自定义密钥扇区。遇到这种情况,默认密钥能读出没用的一堆扇区,但关键扇区依然读不到。
4.3 全加密卡:autopwn/nested/hardnested一套带走
如果默认密钥只命中了一两个扇区,剩下的全是未知密钥,就要用到嵌套攻击。原理一句话:M1卡的加密认证是可预测的,攻击者利用已知密钥的一个扇区建立通信,可以反推出其他扇区的密钥。
hf mf nested:经典嵌套攻击,适合已知某个扇区密钥,逐个恢复其他扇区;hf mf hardnested:硬嵌套攻击,速度更快但CPU占用高,同样需要一个已知密钥扇区做起点;hf mf autopwn:自动化流程,会自动尝试默认密钥、嵌套攻击、硬嵌套,最后直接导出dump,适合新手。
我用hf mf autopwn跑过不少卡,一小部分全加密卡可能耗时几分钟,大部分在几十秒内就能出结果。注意执行过程中卡不能移动,保持稳定贴在天线上。输出日志里看到一个个扇区密钥被“recover”出来的时候,那种感觉确实很爽,但请记住你只是在处理自己的卡。
4.4 读完一定要保存dump,不然后面白读
读取完成后,执行hf mf dump,它会把当前数据保存成一个文件,通常是 .dump 或 .json 格式,文件名带卡号和日期。再用hf mf d查看dump内容,确认关键扇区有没有读到乱码。
建议把原卡的dump文件和之前跑出来的密钥文件放到同一个目录下,命名成“品牌-位置-日期”这种格式。之后无论写坏多少张复制卡,随时可以从原卡dump恢复,不再需要重新读原卡。
5. 写卡与验证:UID、CUID、普通卡怎么选
读卡只是把数据搬出来,写卡才是真正的复制。这一步的决策决定你买什么卡、用什么命令。
5.1 先判断门禁系统校验的是卡号还是数据
在写卡前,先观察读到的dump:
- 如果整张卡的扇区数据大多为空,或者只有卡号相关的数据,门禁大概率只校验UID;
- 如果某个扇区存有有效期、楼层号、卡号副本之类的明文,门禁很可能会在刷卡时校验这些扇区数据;
- 如果刷卡前后同一张卡的数据会变化,那就是滚动/动态加密,这类卡下面单独讲,复制意义不大。
判断原则很简单:门禁读卡器在读卡时,它到底需要校验多少信息,决定了你要复制到多完整。只校验UID,你甚至可以不用PM3;校验扇区,就必须完整dump加UID一致。
5.2 普通M1、UID、CUID怎么选
整理了一张选卡表:
| 门禁校验逻辑 | 推荐卡型 | 原因 |
|---|---|---|
| 只校验卡号 | 普通M1空白卡 | 不需要改UID,成本最低 |
| 校验卡号+数据,不检测Magic卡 | UID卡 | 0块可写,能改UID |
| 校验卡号+数据,且会检测Magic卡 | CUID卡 | 支持覆盖写,必要时锁卡头 |
| 滚动数据/动态认证 | 不推荐复制 | 复制卡基本失效,没必要折腾 |
需要特别提醒:UID卡虽然便宜,但很多现代门禁读卡器会检测“0扇区0块是否可写”,一旦发现可写特征,直接拒绝刷卡。CUID卡就是为了解决这个问题出现的,它用特殊指令支持覆盖写,平时读起来像普通M1。实际使用中还可能遇到“UID卡被拒、换CUID卡通过”或者反过来“CUID锁卡头后被当成普通卡”的情况,所以别把某一种卡神化,多备两种型号实测才是硬道理。
5.3 写卡命令和0扇区0块的处理
写卡分两种情况:
- 使用普通M1卡,只写非0块数据:
hf mf restore --dump your.dump- 使用UID/CUID卡,需要把原UID也改过去:
先改UID,再写数据。Iceman固件常用的命令类似:
hf mf csetuid --uid <原卡UID>(不同固件版本命令可能有差异,先执行hf mf --help确认)
改完UID后,再执行hf mf restore --dump your.dump。
重点提示:0扇区0块是整张卡的“命根子”。UID写错、校验位算错,卡可能变成一块废塑料,而且有些卡一旦写错无法恢复。所以写之前务必用hf 14a info确认目标卡UID不是原卡UID——别把原卡当目标卡写坏了。操作时尽量只放一张卡在天线上,避免PM3同时识别多张卡,导致命令作用到错误的卡上。
5.4 验证三连:读回、比对、实测
写完不要直接收工,验证三连跑一遍:
- 读回:把新卡放到天线上,执行
hf 14a info,确认UID和原卡一致; - 比对:执行
hf mf dump导出新卡数据,用文本对比工具或者diff命令和原卡dump比对,确认所有扇区数据一致; - 实测:拿新卡去自家门禁读头刷一下,确认能正常开门。
如果第2步发现某些扇区写入失败,通常是密钥不对或者卡的类型不支持覆盖写。此时把卡片拿去和原卡数据对比,重新选择写入方式,别硬刷同一个失败命令。
6. 复制完刷不开,多半是这些坑
重头戏来了。几乎每个复制门禁卡的人都会遇到“明明数据一样,就是刷不开”的情况,我也一样。整理几个典型坑,以及我的排查思路。
6.1 头号杀手:滚动数据卡,复制完第二天就失灵
现象:复制完当天能刷,第二天失效;把原卡再同步一次数据,复制卡又能用一次,再刷又失效。
原因:门禁系统使用了滚动数据机制,刷卡时读卡器和卡之间会更新某个扇区的数据,相当于每次刷卡都换一个新的“凭证”。复制卡没有和门禁后台同步状态,刷过一次后数据就和原卡岔开了。
排查方法:连续两次读取同一张卡,把扇区数据对比,如果每次都有变化,基本就是滚动数据。遇到这种卡,普通复制没有意义,要么让物业授权,要么乖乖用原卡。这里不推荐任何试图绕开滚动机制的手段,既不稳定也有风险。
6.2 门禁如何识别出UID卡:Magic卡检测是怎么发生的
现象:用UID卡写完数据,拿到读卡器上刷,指示灯闪一下但门不开,甚至直接提示“无效卡”。
原因:读卡器不仅能读UID,还能通过特殊指令探测0扇区0块是否可写。UID卡因为0块可写,在这个探测下直接暴露。门禁判断这是一张“魔法卡”,拒绝放行。
排查:先换一张CUID卡试试,很多门禁对CUID的识别率低于老式UID卡;如果CUID依然被拒,再尝试给CUID卡锁卡头。注意,锁卡头操作不可逆,锁之前一定要确认数据和UID均已写入正确。
6.3 一次把原卡写坏的“人祸”,以及怎么避免
我自己犯过一个低级错误:想把原卡和复制卡的数据对比,两张卡同时放在PM3天线附近,结果执行hf mf restore时,PM3把离天线更近的原卡当成了目标卡,直接把原卡数据覆盖成了复制卡数据,原卡当场作废。那次之后我养成了两个习惯:
- 任何写操作之前,用
hf 14a info确认当前天线上的卡就是我期望的目标卡,核对UID; - 永远只放一张卡在天线上,原卡收进屏蔽袋或者放得很远。
这种错误新手特别容易犯,因为PM3不限制“目标卡”,它只会响应天线上的第一张可用卡。多放一张卡,就像拿枪打靶时靶子上同时站了两个人,打中谁全看运气。
6.4 刷不开时,我按这个顺序排查问题
如果你复制卡刷不开,按这个顺序一步步来,比到处瞎问快得多:
- 读卡头:
hf 14a info看UID是否和原卡一致; - 数据对比:把复制卡dump导出来和原卡逐扇区diff,确认没有漏掉扇区;
- 卡型兼容:换一张CUID或者普通M1试试,排查Magic检测问题;
- 滚动数据:连续读两次原卡,看数据是否有变化;
- 门禁方案:确认门禁是不是Mifare Plus、CPU卡,这类已经不是M1复制能解决的范围。
按这个链路排查,大多数问题都能定位到具体环节,而不是在门口来回刷卡干瞪眼。
7. 最后说点实在的:边界、备份与心态
技术本身是中性的,但用在哪儿、怎么用,就是另一回事了。写这篇东西的出发点,是帮那些手里只有一张门禁卡、又确实需要备用卡的人少走弯路,顺带把M1卡的安全机制讲明白。
7.1 这套技术只该用在哪
可以做的:复制你自己合法持有的门禁卡,备份数据;在你自己买的测试卡上练习读写;帮家人复制他们自己名下的门禁卡,且得到了门禁管理方的许可。
不该做的:未经授权复制公司、学校、他人卡片;破解公共区域门禁或小区公共设备;用读写器去干扰、探测、攻击别人的门禁系统。尤其那种“顺手复制一张邻居/同事的门卡”的想法,想都别想。另外像“中继攻击”这类针对公共门禁的攻击手段,也不在本文讨论范围内,它已经超出了普通备份和便利的范畴。
7.2 备份dump和密钥库
到目前为止我保存的最有价值的东西,不是某一张复制卡,而是原卡的dump文件和跑出来的密钥集合。卡片会磨损、消磁、丢失,但只要电脑里存着dump,换一张新卡几十秒就能恢复。需要注意的是,dump文件相当于门禁卡的“钥匙副本”,别把它发到网盘、聊天记录里;自己的电脑加密存储就好。
7.3 新手进阶路线
如果你刚接触NFC/RFID,我的建议是按这个顺序练:
- 先用手机NFC把家里所有卡都“初检”一遍,弄懂卡型;
- 拿PM3读一张非加密的空白卡,熟悉基础命令;
- 再读你自己的一张M1加密卡,跑一遍chk、dump、restore;
- 真正理解扇区和密钥后,再决定要不要买UID/CUID卡去写。
个人体会放在最后:折腾这件事,最大的收获不是成功复制了几张卡,而是终于搞懂了从手机NFC到PM3背后那一整套RFID协议的原理。复制自家门禁卡本身不复杂,难的是判断你的门禁到底校验了什么。很多教程一上来就让你买PM3,但如果你只是复制一张只认卡号的门卡,手机钱包十分钟就能解决;反过来,如果你的门禁是滚动码,PM3也白搭。先搞清楚需求,再决定工具,永远是最省钱的路线。