
首先
HF :high frequency ,高频,高频卡,NFC 。本文里也代指最常见的 M1 卡
LF :low frequency , 低频,低频卡,RFID 。
M1卡 原理与数据:https://www.fosvcat.com/article/11
M1卡 破解与对抗:https://www.fosvcat.com/article/12
Chameleon Ultra 设备仍有很多待开发挖掘的功能,本文内容可能会发生变化。
官方 WIKI :
设备简介
简介
https://github.com/RfidResearchGroup/ChameleonUltra
ChameleonUltra 与知名的 Proxmark3 同样出自 RfidResearchGroup
该项目从 2006 年发起,初代的 ChameleonMini 并非由 RRG 原创,后来 RRG 接手并进行了改进。而 ChameleonUltra 是变色龙系列硬件自以来的的终极之作。
2013 ChameleonMini → 2020 ChameleonTiny → 2023 ChameleonUltra
本代 ChameleonUltra 分为三个官方的硬件版本:
- ChameleonUltra(日常使用的精致版)- 本文所指设备
- ChameleonUltra Lite(大体积且砍掉了 Ci522 芯片的降级版)
- ChameleonUltra DevKit (大体积的开发者专用版)
特点
- 双频模拟: 采用 Nordic nRF52840 芯片作为核心,Ci522 芯片作为兼容,同时且完整的支持 13.56 MHz HF 和 125 kHz LF 双频模拟和读写功能。
- 多卡槽: 拥有 16 个独立卡槽( 8 HF + 8 LF ),可通过机身按键切换。
- 自带读写与解密功能:ChameleonUltra 集成了 MFRC522 读写芯片。可以独立读写或进行 MFKEY32v2、Darkside、Nested 等攻击。
- 双模连接: 支持 蓝牙 5.2 或 USB-C 连接外部设备。且拥有官方的全平台支持的图形界面客户端 ChameleonUltra_GUI (后文简称客户端)。
- 超长续航:90 mAh 锂电池。由于芯片功耗极低,每天休眠或刷卡 6 次,可使用约 6 个月。
开源状态
硬件:普通版硬件设计官方未开源,只有大体积的 DevKit 开发板开源。
但是民间已将其硬件完全破解,市场上存在大量复刻版,硬件与官方版相比完全一致甚至更强(例如更大电池)。动手能力强的还可以 DIY 手表/通行密钥 等并将变色龙硬件结合进去。
软件:设备固件 和 变色龙GUI 软件的代码和协议均在 Github 上完全开放。
网上存在很多具有额外功能的修改版固件。也有一些 All in One 的读写卡软件整合进了变色龙客户端的设备操作功能。
购买 / 获取
官方项目组授权了一些官方经销商(在 Github 主页查看)售卖硬件。它们的价格很贵,项目组会从中直接获得商业利润。
如果不希望支付额外溢价,可以在常见网购平台购买民间制作的复刻版。复刻版的核心硬件与官方版完全一致,且 Chameleon 也没有设计 FlipperZero 那样的工厂唯一数字签名,因此复刻版完全兼容官方固件和变色龙 GUI ,没有任何功能损失。
复刻版按形态通常分为和官方一致的更小巧便携的“滴胶版”和带有厚塑料壳包裹的“外壳版”,可以根据需要选择。
复刻版有的添加了 硬件重启 功能(长按A+B触发),用于摆脱不稳定固件小概率发生的死机;有的添加了更大的电池;也有的对 Chameleon LOGO 做了自定义。均可根据需要选择。
设备指示与操作
指示灯
CHG 指示灯 为充电指示灯,充电时亮起,充满熄灭。
RF 为射频指示灯,设备处在射频场或发出射频时会亮起,进行 高频 读写时会闪烁。
1 - 8 为卡槽指示灯,用于指示当前的模拟卡槽。 通过 A / B 键向 右 / 左 切换卡槽。
当某一卡槽为关闭状态时,切换卡槽会将其跳过。
- 绿色 - 卡槽当前模拟 高频卡
- 蓝色 - 卡槽当前模拟 低频卡
- 红色 - 卡槽当前同时模拟 高频卡 和 低频卡
在连接 USB 后, 3 4 5 6 卡槽指示灯会变成三种颜色的呼吸灯。
当通过 USB 与客户端 程序连接后 1 ~ 8 卡槽指示灯会变成跑马灯,且颜色会对应当前所选卡槽的 高低频卡 类型。通过蓝牙连接客户端不会变成跑马灯。
休眠 / 唤醒
为了省电,设备活跃状态下数秒钟没有操作且没有射频场,设备会自动休眠。
设备会记住当前所选卡槽位置,任何时候唤醒都会直接模拟该卡槽。
休眠状态下,按 A / B 键 、 插入USB ,或将设备置于射频场均可将其唤醒。此外,如果当前卡槽只开启了高频卡,则只会被高频场唤醒;低频同样;同时开启高低频卡时,就能被两种射频场唤醒。
与客户端连接会阻止设备自动休眠。休眠状态下蓝牙会关闭,必须先唤醒才能进行蓝牙连接。
休眠和唤醒时可以播放跑马灯动画(插入 USB 除外),灯的颜色同样对应当前卡槽。
A / B 键
活跃状态下单击或长按 A / B 键可以进行指定操作,且可在客户端中自定义。默认是:
- 单击 A - 向 右 / 前 / 增大数字 切换卡槽
- 单击 B - 向 左 / 后 / 减小数字 切换卡槽
- 长按 A 松开 - 将当前 高频/低频 卡的卡号复制进当前卡槽
- 长按 B 松开 - 通过卡槽指示灯上显示设备剩余电量
对于 硬件重启 设备,长按 A+B 立即触发重启。该硬件级功能无法自定义。
刷写模式
DFU 模式( 4 5 号灯闪烁)用于在固件损坏或遇到其它软件问题时重新刷入固件。
休眠状态下长按 B 键并插入数据线,松开,会进入 DFU 模式。此时可以在客户端刷固件。
由于数秒后无操作会自动休眠(即使处于插电状态),建议先做好准备再进入 DFU 。
官方客户端
https://github.com/GameTec-live/ChameleonUltraGUI
官方客户端有命令行工具和图形化工具。命令行工具可能包含一些前沿功能。
本文只介绍 官方 GUI 客户端。 它使用开源框架 Flutter 编写,兼容全平台且具有统一的界面。
有些三方 NFC 工具例如 MTools BLE 也有集成 Chameleon 客户端的功能。
ChameleonUltra 的存储空间很有限,字典 和 保存的卡片 等数据均存储在客户端设备本地。并且客户端将所有数据全部整合并保存为一个 json 文件 。只需导入导出或同步这一个文件即可在多设备的客户端同步数据。如果不方便同步,就只在一部设备上使用该客户端以便于管理这些数据。
首页
未连接设备时为空白
使用 USB 连接设备,或在打开蓝牙的情况唤醒设备,刷新页面即可选择并连接设备。
连接设备后,首页会显示 设备电量、已使用的卡槽、固件版本 等信息。
可以切换活跃卡槽、手动切换 模拟/读卡 模式(这俩模式通常自动切换)。
可以进入设备设置,可以进行:
- 进入 DFU ,通过 DFU 安装最新官方固件,通过 DFU 安装自定义固件
- 调整 休眠/唤醒 的动画样式,或将其关闭
- 分别设置 A / B 按钮的 单击 / 长按 操作(总共四种),可选操作有:
【禁用】、【向前切卡槽】、【向后切卡槽】、【克隆卡号】、【显示电量】 - 开/关 蓝牙配对功能。启用后可以清除已绑定的设备,并设置自定义 PIN 码。
- 重置设备设置(仅重置该页面的改动)或 工厂重置(清除所有设备数据)
卡槽管理
需要连接设备。读取并管理设备上的 8 个卡槽。
直接点击卡槽,可以选择一个已保存的 高/低频 卡片,并直接写入到该卡槽。
点击右侧设置键,可开关该槽位的 HF / LF 模拟,或者 删除 / 编辑 / 导出 该槽位 HF / LF 卡片。
编辑操作允许你对 高/低频 卡 重命名/改卡号
对于 Mifare Classic 高频卡,可以进行很多复杂调整:
- 单独编辑 SAK、ATQA、ATS
- Gen1A 魔术模式 - 开启后可接受 Gen1A 魔术卡指令写 0 扇区 0 区块
- Gen2 魔术模式 - 开启后可可允许使用 0 区块密钥写 0 扇区 0 区块
- PRNG 类型 - 可更改为 静态,弱,强
- 从 0 块使用 UID / SAK / ATQA - 开启时忽略独立的设置,使用转储内的对应数据
- 收集 Nonces (Mfkey32) - 对于未完全破解的卡片进行侦测收集密钥
- 写入模式:(针对滚动码等具有写入机制的系统)
- 正常 - 正常写入,按照 ISO14443A 标准返回【写入成功】
- 拒绝 - 不会写入,按照 ISO14443A 标准返回【写入失败】
- 欺骗 - 不会写入,但是按标准返回【写入成功】
- 影子 - 不会写入,按标准返回【写入成功】,并将要写入的数据存在临时缓存中。
当读卡器为了验证进行回读检查时,设备回报缓存中的数据欺骗读卡器,让读卡器确认数据已写入。刷卡结束后,缓存的数据消失。
这一系列功能调整可以帮助用户研究不同类型卡片的机制和弱点,也能用于测试读卡系统。
已保存的卡
无需连接设备,该界面显示并管理 GUI 客户端本地的 json 文件 内的配置 。
点击加号可以导入本地转储文件、本地字典文件。保存进 GUI 客户端。
导入 bin 转储文件时需要手动校准。json 转储文件由于自带元数据因此可直接导入。
校准:直接根据转储文件大小,可判断卡型是 mini、1K、2K、4K 。可根据 SAK 和 ATQA 判断 UID 字节长度。( 4 字节 UID 的值为 08 和 00 04 )
保存的卡片中, “ WLAN ” 图标表示 LF 卡 ,“ Card ” 图标表示 HF 卡。
直接点击保存的卡片可以查看其信息,复制和导出( bin 或 json ),也可编辑基础数据。
对于 HF 卡,还支持支持导出卡密钥。支持编辑 HF 卡数据,会有一个清晰易读的编辑界面和 ASCII、控制位、整数值 的检查功能。
直接点击已保存的密钥可以 查看,复制,导出。点击编辑按钮进入编辑。
读取卡片
可以分别进行 HF卡/LF卡 读取
低频卡没有加密和数据存储,可直接读取 卡号和卡类型 ,保存即可。
高频卡读取后,会先显示出 0 块的 UID 等信息,不会自动开始解卡。此外还会显示出卡片 类型、PRNG 类型 、硬件后门是否存在 等信息。
此时可以直接保存卡片 UID ,或尝试使用字典解卡。如果字典解卡未恢复所有密钥,会出现 “恢复密钥” 按钮。点击后设备会自动进行攻击:
- Darkside 攻击(如果没有已恢复的密钥)
- Nested 攻击(如果有已恢复的密钥)
- Backdoor 攻击 (如果后门存在)
如果卡侧密钥全部恢复,直接保存卡片或导出为转储文件即可。
如果卡侧密钥恢复失败或未能全部恢复,需要进行侦测破解。
- 点击 “仅保存UID” 或 “导出部分数据” ,保存一个数据不完整的卡片。
- 将其写入到一个卡槽。编辑该卡槽,打开 “收集 Nonces” ,保存。
- 切换到该卡槽,在原卡对应的读卡器上多次刷卡( 5次左右即可 )。
- 回到刚刚卡槽的编辑页面,会出现一个 “获取密钥” ,点击该按钮。
- 等待计算,保存恢复的密钥,再次读原卡即可。完成后关闭 “收集 Nonces” 。
另外,ChameleonUltra 在硬件上不支持 PM3 那样的有卡嗅探,只支持侦测读头来恢复密钥。
写入卡片
首先选择一个已保存的卡片
选择 HF 或 LF 魔术卡类型
对于 LF ,设备无法自动检测魔术卡类型。选择后直接写入即可(部分卡型支持设置密钥)。
对于 HF ,设备可以自动检测 Gen1 魔术卡 。目前客户端已支持所有 Gen 1 / 2 / 3 魔术卡写卡。
客户端目前还不支持 “ 写入部分扇区 ” 。如果写入过程出现了问题客户端会将其显示。
写卡功能是 Chameleon 设备的次要功能。对于 Gen 2 / 3 魔术卡,用手机写卡通常会更方便。
其它工具
下载字典:
下载 PM3 ,Flipper Zero Unleashed 固件 等多种来源的多种字典
T55XX 密码移除器:
使用密码字典,为该类型的 LF 卡片清空或设置新密码
低频嗅探:
分析原始低频场
高频嗅探:
分析原始高频场
Gen 4 魔术卡:
(开发中)
设备固件
因为 Chameleon 硬件能力有限,官方固件也始终处在开发前沿,所以它不像 FlipperZero 一样有众多独立固件项目。
官方固件在 Github Release 下载:
- ultra-dfu-full.zip - 默认使用的完整固件,包含应用和引导。可直接通过 DFU 安装。
- ultra-dfu-app.zip - 只包含应用固件,不包含引导。可直接通过 DFU 安装。
- ultra-binaries.zip - 供烧写器使用的 hex 文件的压缩包,用于救砖。
目前官方固件还没有实现自动轮询功能:
由射频场唤醒时,自动按指定延迟顺序切换一轮开启的卡槽。便于存储了大量卡片的用户。
可以使用宅人改造家的轮询固件:https://pan.baidu.com/s/1ucn8CPnoK1w9IIu\_4z7zyw?pwd=1gd2
- 基于 2.0.0 固件,修复了被错误的 高/低 射频场唤醒的 Bug 。
- 长按 A 再长按 B 可以进行软件重启,长按 B 再长按 A 可以进入 DFU 模式。
- 由高频场唤醒时,会按指定延迟自动轮询所有开启了高频卡的卡槽。低频同理。
- 轮询延迟写死在固件中,调整延迟需要刷写固件,不支持在客户端直接调整。