ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ChameleonUltra侦测实战:全加密M1卡密钥恢复与复制全流程

ChameleonUltra侦测实战:全加密M1卡密钥恢复与复制全流程 你有没有遇到过这种情况手里一张公司门禁卡或者宿舍走廊的梯控卡明明只是一张薄薄的M1卡想复制到手机或者手环上结果读卡器一贴近能读到的只有系统信息其余扇区全部报错。这就是典型的“全加密门禁卡”。以前遇到这种卡大家的第一反应都是“跑字典”——背着Proxmark3挂一整个下午跑到电脑发热、风扇狂转最后还可能颗粒无收。但如果你手里恰好有一台ChameleonUltra并且升级到了带“侦测”功能的固件处理全加密卡的方式会完全反过来不用准备字典不用暴力穷举把卡往设备上一贴最短几分钟就能把所有扇区密钥全部拿到再写进一张CUID空白卡整个复制流程就结束了。这篇东西不聊虚的直接解释为什么侦测能“秒杀”跑字典以及从硬件准备到实战写卡完整走一遍流程。文章比较长适合手边正好有ChameleonUltra、又被全加密卡折磨过的朋友。1. 全加密门禁卡为什么字典跑不动侦测却能做到要理解复制全加密卡这件事得先搞清楚“全加密”到底是什么意思。很多人拿读卡器一贴发现读不到数据第一反应是卡坏了其实不是是这张卡把每一部分内容都用密钥锁住了。1.1 一张“平平无奇”的M1卡藏着16个扇区的秘密Mifare Classic 1K是门禁市场最常见的型号也是我们日常说的M1卡。它的存储空间是1KB分成了16个扇区每个扇区4个块每个块16字节。前15个扇区用来存数据第16个扇区比较特殊存储一些厂商信息和特殊参数。关键在于每个扇区尾部那16字节这16字节里包含了Key A、访问控制位、Key B。Key A是必有的读卡器要想读取某个扇区的数据必须先通过这个扇区的Key A认证。也就是说一张卡能否被完整读取取决于你能搞到多少个扇区的密钥。如果所有16个扇区的Key A都是默认值比如FFFFFFFFFFFF、A0A1A2A3A4A5这类出厂密钥那复制起来很简单直接读全部数据就行市面上大部分读卡器都能搞定。如果只有一部分扇区用了默认密钥这叫“半加密”卡处理起来也还能对付至少能读到一部分内容阻断扇区也不多。如果16个扇区全部换成随机密钥没有任何一个是默认值这就是“全加密”卡。这种情况下普通读卡器只能读到第0扇区的基础信息其余15个扇区全部拒绝访问。把卡复制下来本质上就是拿到“所有扇区的数据密钥列表”这两个东西。1.2 复制卡到底复制的是一份什么“文件”很多人以为复制门禁卡就是复制一个卡号手机上拷个UID就行。放在最老式的IC卡上确实如此但现在绝大多数门禁系统早就不这么玩了。门禁读卡器验证一张卡是否有效通常会做三件事第一读取卡的UID也就是4字节或7字节的卡片序列号第二根据UID从后台数据库查出对应的用户权限第三很多系统还会读取卡内的某些数据扇区比如楼层权限、有效期、消费余额再和后台对比。所以复制卡要复制的是一份“完整数据快照”包括UID、第0扇区的厂商代码、每个数据扇区的内容以及每个扇区的Key A和Key B。你把这份快照写进一张同样支持UID修改的空白卡比如CUID、FUID、UFUID才能做到表面上的“一模一样”。问题是全加密卡的15个数据扇区根本不让你读数据快照拿不全后面的一切都无从谈起。所以关键问题就是怎么拿到扇区密钥。1.3 “侦测”秒杀的底气Mifare Classic的认证算法弱点跑字典之所以慢是因为它在“猜”侦测之所以快是因为它在“算”。M1卡使用的是NXP早年设计的CRYPTO1流密码认证协议。这个协议在2008年前后就被学术界公开破解了核心问题在于卡片的随机数生成器存在可预测性而且认证过程中泄漏出的信息足够多攻击者不需要枚举完整密钥空间只需要向卡片发起特定构造的认证请求观察卡片返回的加密随机数通过数学推导就能把密钥反算出来。行业内把这套攻击叫做Darkside攻击、Nested攻击本质上都是利用CRYPTO1的协议漏洞而不是暴力猜密钥。ChameleonUltra的“侦测”功能其实就是把这套基于漏洞的密钥恢复流程封装成了按键操作。用户不需要理解LFSR算法不需要构造16进制数据只需要让设备贴近卡内置固件会自动判断卡的类型对每个扇区发起定向计算然后输出密钥。这就是它和跑字典的本质区别对比项跑字典侦测原理逐个尝试密钥组合利用协议弱点进行数学推导耗时数十分钟到数天几秒到几分钟成功率依赖字典大小依赖卡片是否受影响适用卡半加密/已知默认密钥经典Mifare Classic全加密真实情况里有个很容易忽略的点跑字典即使成功往往也只是“运气好碰上某个扇区用了预设密钥”而侦测一旦成功是整卡所有扇区一次性全部拿下。实战体验差距非常大。2. 跑字典是“效率陷阱”一次全加密卡破解的实测与反思在讲ChameleonUltra的具体操作之前我想先花点篇幅说说跑字典这件事因为绝大多数人包括我自己都在这个方向浪费过时间。把坑讲明白了你才理解为什么侦测是更优解。2.1 Proxmark3跑字典的真实流程与时间账如果你已经有一套Proxmark3以前跑全加密卡的流程大概是这样的先把PM3插到电脑上打开软件读取目标卡的UID执行hf mf chk快速检测一遍默认密钥。这一步如果某个扇区命中了默认密钥软件会显示“found key Block X: FFFFFFFFFFFF”之类的输出。问题在于全加密卡在默认密钥检测阶段往往最多命中一两个扇区甚至一个都命中不了。接下来就只能开启更大范围的字典攻击命令通常是hf mf autopwn或者hf mf hardnested。用几MB的小字典跑每个扇区可能尝试几千到几十万次认证耗时半小时起步。用几十MB的大字典跑看起来内容很多实际绝大多数都是带零散规律的密钥对随机生成的密钥毫无办法跑一晚上也可能一条都跑不出来。如果开启hardnested模式虽然利用了算法漏洞但前提是已经知道至少一个扇区的密钥全加密卡往往连这个前提都不满足。我实测过一张学校发的全加密饭卡用PM3加载了一本号称20万条的常用门禁密钥字典跑了三个多小时16个扇区只破解出来1个还是默认密钥中的某个变种剩下15个扇区完全纹丝不动。那次之后我就明白了全加密卡跑字典是个典型的“效率陷阱”。2.2 字典越大越“虚”为什么预设字典成功率极低M1卡的密钥长度是48位也就是2的48次方约281万亿种可能性。市面上流通的所谓“几十万条字典”放到这个空间里连零头都算不上。更关键的不是数量而是密钥生成方式。门禁系统厂商发卡时很多会直接用随机数生成器产生密钥根本不存在“常见密钥”“弱密钥”这种规律。这种情况下字典里有没有对应的密钥纯粹看运气。哪怕跑到天荒地老数学上也不可能逼出正确答案。所以我的判断非常明确如果一个扇区的Key A不是默认密钥也不是常见弱密钥变种你用字典跑它的期望时间是无限大。与其在这棵树吊死不如换棵更低的树爬。2.3 跑字典的真正适用场景跑字典不是完全没用它有自己的主战场。比如你拿到一张半加密卡部分扇区已经是可读的只有最后几个扇区被锁住了那跑字典还有一定价值因为厂商很可能在这几个扇区沿用了默认密钥或者比较简单的规律。再比如你手里已经通过其他手段搞到一些密钥线索想验证某个特定区间内的可能性字典攻击也能派上用场。一句话总结跑字典适合做“收尾工作”和“捡漏”不适合作为“主攻手段”。主攻手段应该是一步到位的侦测/密钥恢复。我当时转用ChameleonUltra之后才发现原来全加密卡这件事可以做得这么轻量。下面开始讲具体怎么操作。3. ChameleonUltra侦测功能的上手准备与菜单逻辑ChameleonUltra本身是个开源硬件项目它的定位是“多协议NFC模拟器”既能读卡、写卡也能模拟卡上线。侦测功能在官方原版固件里通常叫“Detect”而能直接破解全加密密钥的大多是社区版固件或更新版本新增的能力。3.1 硬件和固件版本不是所有ChameleonUltra都能侦测先泼一盆冷水如果你手里是早期版本固件停留在出厂状态那“侦测”很可能只做到识别卡类型和读取基础信息并不能直接恢复全加密密钥。第一步确认设备版本ChameleonUltra机身背面通常有版本号前面板上有个小屏幕开机后能显示固件信息。第二步升级固件在电脑上用USB线连接设备按住设备上的按键进入刷机模式然后用官方烧录工具写入新版固件。社区里流传较广的固件版本支持“密钥引擎”打开后能看到Darkside、Nested等多个引擎选项。第三步下载配套手机App不管是iOS还是AndroidApp Store里直接搜ChameleonUltra即可。App最大的作用是图形化显示卡数据和密钥状态比在小屏幕上翻菜单直观太多。这套准备流程大概十分钟。如果没有升级固件后面讲的按键操作很多是你的设备上不存在的所以这个步骤别跳过。3.2 与设备的连接方式USB、蓝牙、手机AppChameleonUltra支持三种连接方式实战中各有用途USB连接主要用于刷固件、批量写入dump文件也是电量最充足的工作模式。蓝牙连接最推荐实测场景使用。手机开App设备开蓝牙配对成功后读卡数据实时显示到手机屏幕截图、存档都方便。离线模式完全不用电脑和手机直接用设备本身的OLED屏和按键操作。好处是速度快坏处是小屏幕信息有限适合在门禁现场快速判断卡能不能读。就复制门禁卡这件事来说我建议在电脑前操作时用USB出门实测时开蓝牙连手机App。两种方式随时切换不冲突。3.3 “侦测”到底输出什么读懂那张“体检报告”侦测完成后屏幕上或App里会生成一份类似“体检报告”的卡片信息汇总关键字段就四个字段含义实战判断UID卡片唯一序列号4字节或7字节复制时必须原样保留SAK卡片类型标识字节0x08是M1 1K0x18是M1 4K0x20是Mifare Plus等ATQA应答信息辅助识别类型通常关注前几位即可扇区密钥表16个扇区各自的Key A/Key B全加密卡侦测成功后会全部列出看到这一屏信息基本就能判断复制方案了。SAK如果是0x08或者0x18说明是经典Mifare Classic有戏。SAK如果是0x20或者其他非Classic值那就要警惕后面单独说。4. 5分钟实战从一张全加密卡到复制卡下面进入正题。假设你手上有一张全加密门禁卡、一台ChameleonUltra、一张CUID空白卡跟着我的操作走。4.1 第1分钟开机进入DETECT贴近卡片设备开机后主菜单一般有DETECT、READ、WRITE、EMULATE、SETTING几个选项。用按键切到DETECT确认进入。然后把卡放到设备的天线感应区。ChameleonUltra的天线位置通常在设备背面偏上的位置不是整个背面都灵敏。卡片放上去之后小屏幕会显示类似“DETECTING...”的提示。这里有两个容易踩的细节第一卡片别隔着太厚的手机壳或卡套外壳厚度超过1.5毫米感应距离就可能不够。第二保持卡片静止不要来回晃晃动会让认证过程反复中断屏幕上一直跳错误码。正常情况下两三秒后设备就会识别出卡类型显示UID、SAK、ATQA等信息。4.2 第2-3分钟自动密钥扫描观察进度识别完卡类型之后设备会进入密钥扫描阶段。这部分就是前面说的核心能力固件会对16个扇区逐一发起算法攻击不再需要你干预。整个扫描过程的表现是屏幕上的扇区编号从0到15依次亮起每个扇区在扫到时会显示类似“KEY FOUND”的提示。全加密卡的扫描时间通常在两到三分钟具体取决于卡片芯片的响应速度和设备固件的优化情况。需要特别说明的是这期间不要移动卡片也不要尝试触摸屏幕确认任何按键。有些卡片在连续几十次错误认证后会触发自身的保护机制表现为之后所有认证请求全部返回错误导致扫描中断。如果你观察到进度条卡在某个扇区不动然后所有后续扇区秒失败那大概率就是卡片进入了短暂锁定。遇到锁定不用慌把卡拿开等三十秒到一分钟再重新放到设备上继续扫。这不是设备坏了是所有Mifare Classic卡都存在的抗攻击机制。4.3 第4分钟导出完整dump文件密钥扫描完成后设备会生成一份完整的dump文件里面包含UID、所有数据块内容以及刚刚恢复出来的全部扇区密钥。在手机App里这个文件会直接显示为一个十六进制数据表。第0扇区的第0块最显眼前4个字节是UID后面跟着厂商代码和校验位。往下浏览就是1-15扇区的数据。这时建议立刻做两件事第一把dump文件保存到本地。App里有导出功能可以直接存成.dump文件。第二核对UID是否和母卡完全一致。如果复制后门禁刷不出来一半以上的原因是这一步没检查。保存成功后再进入下一步别急着拔卡万一后面写卡出问题还得重新再侦测一遍。4.4 第5分钟写入CUID空白卡并验证拿出一张CUID空白卡放到ChameleonUltra的感应区。在设备菜单里选择“WRITE”然后选择刚才保存的dump文件确认写入。写入过程本身很快十几秒到半分钟。写入完成后不要立刻拿走停留在写卡界面做一个简单的读回校验重新用设备读取这张新卡看UID和数据是否与母卡一致。绝大多数情况下到这里就能刷门禁了。但我建议多留一步实测验证把新卡拿到门禁读卡器上刷一下确认没有异常。有些门禁除了读UID还会校验特定扇区的数据如果校验没通过读卡器会直接拒绝响应。4.5 三种常见失败及对策我实际测试中遇到的失败场景翻来覆去就这几个失败场景表现解决办法卡片无法感应屏幕上一直DETECTING无响应调整卡片位置去掉厚卡壳确保电量充足密钥扫描中断进度停在某扇区后续全部秒失败分开卡再等待三十秒重新执行侦测写卡后无法使用数据一致但门禁不识别检查是否滚动码卡换一张原装UID卡确认扇区数据是否被动态改写前两个是操作问题最后一个才可能是“不能复制”的客观限制下一章展开讲。5. 哪些“全加密卡”侦测搞不定侦测功能在经典Mifare Classic卡上确实好用但它是这个协议下的“解药”不是所有卡都能治。实际接过不少朋友的问题很多人把ChameleonUltra买回去对着卡一顿扫结果一无所获然后跑来问是不是设备坏了。真不是多数情况是卡压根不属于侦测功能的覆盖范围。5.1 CPU卡/银行卡芯片根本不是Mifare Classic最容易误判的就是CPU卡。CPU卡的外观、尺寸、工作频率都和普通M1卡一样但它内部有独立的微处理器和操作系统采用的认证方式是动态双向认证每一次交易都会生成不同的随机数。这种卡不存在静态密钥ChameleonUltra的DETECT可以识别出它的卡类型但无法像对M1卡那样恢复出“密钥”。判断方法很简单看侦测结果里的SAK值。Mifare Classic的SAK一般是0x08或0x18如果显示的是其他值比如0x20Mifare Plus或0x28这类那就别在侦测上浪费时间去确认它是不是CPU模拟卡或者是否还有其它复制方案。5.2 厂商“打补丁”后的正品卡新批次Mifare Classic修复了CRYPTO1漏洞很多人不知道Mifare Classic的CRYPTO1漏洞公开之后NXP后续对芯片做了微调新批次的卡片并不总是保留最初那套容易被攻击的随机数生成逻辑。虽然市面上绝大多数经典M1卡仍然受影响但确实存在一些经过加固的版本导致侦测算法一直跑不出正确密钥。遇到这种情况表现很明确密钥扫描可以正常开始每个扇区都在计算但就是不出结果反复循环多次后自动放弃。这不是操作问题是卡片本身已经堵住了那条攻击路径。如果确认是加固过的新批次卡老实说个人设备层面没有太好的办法。你可以尝试换一种攻击引擎或者配合PM3做更复杂的嵌套攻击但成功率也不是百分百。5.3 滚动码/动态数据卡即使复制成功也会失效还有一种情况比密钥更麻烦就是滚动码。常见于某些高档写字楼的电梯卡或停车场系统。这类卡读取出来的dump文件、密钥都正常复制到CUID卡之后卡数据也一模一样但刷一次之后母卡的数据变了复制卡的数据没变下一回系统就不认了。原因是卡内某个扇区存着一个计数器每次刷卡都会递增后台系统拿这个计数器和卡片当前值做比对发现不一致就直接拒绝。对付滚动码卡单纯复制是无效的。行业里一种做法是每次刷卡后重新读取母卡数据再重新写入复制卡但这就失去了“复制一张卡”的意义。另一种做法是找包含动态模拟能力的硬件但ChameleonUltra目前不支持这种序列行为模拟所以我劝你直接放弃别在这类卡上投入太多。5.4 怎么用几十秒快速判断一张卡能不能复制综合上面的内容我总结了一个极简判断流程你拿到一张卡可以先按这个顺序走一遍第一步用ChameleonUltra的DETECT识别卡看SAK值。如果是0x08/0x18进入第二步否则直接放弃。第二步读取数据。如果默认密钥就能读到数据直接复制如果只有部分扇区可读进入第三步如果全部扇区都拒绝进入第四步。第三步用侦测功能扫描剩下扇区。能出密钥就继续扫描失败就检查是否加固卡。第四步如果全部扇区都拒绝且侦测失败检查卡是否CPU卡/滚动码卡。第五步所有环节都通过写入CUID卡实测门禁。这样做的好处是用最小成本避免无效劳动五分钟就能判断一张卡到底值不值得折腾。最后再分享一个我个人的小习惯成功复制并验证后我会把原始dump文件单独存一份到电脑的加密目录同时保留一张纸质记录。这样做不是为了别的纯粹是因为ChameleonUltra的存储空间有限固件一升级设备里的数据可能全被清掉到时候想再找原始dump就得重新跑一遍侦测。你在实操中如果也碰到任何奇怪的情况欢迎回来交流反馈毕竟不同批次的卡片踩出来的坑也不完全一样。
返回列表