拓竹_AMS_RFID_数据分析工作原理及与防伪探索
拓竹 AMS RFID 数据分析工作原理及与防伪探索
本内容仅用于网络安全研究与学习交流,请勿用于任何非法用途。
拓竹
Bambu Lab 拓竹科技是一家致力于用最前沿的机器人技术彻底革新桌面级 3D 打印产业的公司。拓竹科技的第一款产品–X1 系列高速智能 3D 打印机瞄准业内最强性能,在诸多关键性能上,实现了数量级上的进步,更是把多色彩打印、支持高性能工程塑料等工业级打印机技术带入消费级产品,拉开了业界期待多年的桌面 3D 打印革命的序幕。用户在打印过程中能够突破色彩和材料的限制,将创造力提升到了一个全新的水平,找到纯粹的创造乐趣。拓竹科技成立于 2020 年,总部位于中国深圳,在深圳和上海设立了研发中心,并在美国奥斯汀设立办公室。
AMS
“拓竹的 AMS”是指 Bambu Lab 推出的自动供料系统(Automatic Material System)。连接 Bambu Lab 3D打印机后,该系统支持在打印过程中自动切换不同颜色或类型的线材,从而实现多色打印、多材料打印以及自动换料功能。同时,AMS 内置 RFID 识别模块,可自动读取并识别官方耗材的信息,提升使用的便捷性与稳定性。

但是,RFID 自动识别功能仅适用于官方带标签的耗材。对于无 RFID 标签或非官方标签的耗材,AMS 无法进行自动识别,用户在每次上料后需要手动配置对应的材料类型及相关参数,以确保打印过程的正常进行。
通过调研发现,RFID-Tag-Guide 项目对拓竹耗材所使用的 RFID 标签进行了抓取与解析。该项目借助 Proxmark3 等专业 RFID 分析设备,对标签数据进行嗅探与提取,并在此基础上分析出了相关的密钥生成与校验机制。
通过 RFID-Tag-Guide 项目的研究可以了解到,拓竹耗材所使用的 RFID 标签基于 Mifare Classic 1K(简称 M1 卡) 架构。该类型卡片是一种常见的高频 RFID 存储介质,广泛应用于门禁、公交卡等场景。
Mifare Classic 1K Card
从存储结构上来看,M1 卡总容量为 1KB,被划分为 16 个扇区(Sector 0 ~ Sector 15),每个扇区包含 4 个数据块(Block 0 ~ Block 3),因此全卡共计 64 个块(编号 0 ~ 63)。每个数据块通常为 16 字节。
其结构如下
正常的M1标签区块数据结构
第 0 区块(Block 0)结构
| 字节范围 | 内容 | 说明 |
|---|---|---|
| 0–3 | UID | 每张卡的唯一标识(Unique Identifier) |
| 4 | BCC | UID 校验字节,计算公式:BCC = UID0 ⊕ UID1 ⊕ UID2 ⊕ UID3 |
| 5–15 | 厂商数据 | 芯片厂商固化信息(只读,不可修改) |
每扇区的 Block 3(控制块 / Sector Trailer)
| 字节范围 | 内容 | 说明 |
|---|---|---|
| 0–5 | Key A | 扇区认证密钥 A,用于数据块读写权限认证 |
| 6–8 | Access Bits | 权限控制位,定义本扇区各数据块的读/写/增/减权限 |
| 9 | 用户字节 / 保留字 | 可用于应用保留或填充,一般未使用 |
| 10–15 | Key B | 扇区认证密钥 B,可用于读/写权限或仅作为只读保护 |
其他区块(Data Blocks)
| 字节范围 | 内容 | 说明 |
|---|---|---|
| 0–15 | 数据 | 存储业务数据,每块 16 字节,可根据权限读写 |
拓竹耗材标签的数据
在了解 M1 卡的数据结构之后,接下来可以进一步分析拓竹耗材 RFID 标签中实际存储的数据内容。通过对相关资料的研究与整理,可以对其数据布局有一个更清晰的认识。
数据转换说明
RFID 卡中存储的数据本质上是二进制数据。为了便于展示与分析,通常会将其转换为 十六进制(Hex) 形式进行查看。但在实际解析过程中,还需要进一步将十六进制数据还原为可读的“明文”信息。
上面常见的数据转换方式包括以下几种:
十六进制 → 字符串(String)
比如耗材的类型 PLA Silk (使用CyberChef转换)
1 | |
十六进制 → 浮点数(Float)
比如耗材粗细
1 | |
十六进制 → 十进制(Integer)
比如烘烤温度 (计算器转换)
1 | |
部分数据转换存在字节序(大端 / 小端)的区别
数据结构解析参考于 RFID-Tag-Guide:BambuLabRfid.md
识别数据
通常来说,读取 M1 卡数据需要借助如 Proxmark3 这类专业 RFID 分析设备。目前对于拓竹耗材标签来说,即使没有此类设备,在已知相关条件的情况下,仍然可以实现数据读取。
实现读取的关键在于:获取各扇区的访问密钥(Key)。
RFID-Tag-Guide:deriveKeys.py 公开了拓竹 RFID 标签的密钥计算方法,其核心为 HKDF(HMAC-based Key Derivation Function,基于 HMAC 的密钥导出函数)。通过该方法,可以利用卡片的 UID 推导出各个扇区对应的密钥,从而实现对标签数据的访问与解析。
1 | |
使用python脚本很容易计算出标签的秘钥,当然也有在线解密工具在线HKDF派生密钥和校验
通过上述方法即可推导出各个扇区对应的 Key A 和 Key B。
在获取密钥之后,就可以借助各类 NFC 工具对拓竹标签数据进行读取与分析,而不再局限于专业设备。
例如,可以使用 Android 平台上的 MifareClassicTool 应用,通过导入已知密钥,对拓竹标签的各个扇区进行认证并读取完整数据。
随机盐 是 python 脚本中的 master 值
携带信息(Info) 是 b”RFID-A\0” 的十六进制值,秘钥B则是 b”RFID-B\0”
复制标签
在掌握数据结构之后,一个自然的问题是:是否可以自行写入并自定义标签数据?
结论是:不可行。
通过对标签数据的分析可以发现,在数据尾部存在一段较长的 RSA 数字签名。该签名覆盖了其前面的关键数据区域,用于对数据完整性进行校验,确保标签内容在写入后未被篡改。
在实际工作流程中,Bambu Lab 的 AMS 系统会在读取标签数据后,对签名进行验证:
- 若签名校验通过,则认为数据有效
- 若数据被修改导致签名不匹配,则判定为无效标签,无法正常使用
从密码学角度来看,RSA 属于非对称加密体系:
- 数据签名由私钥(Private Key)生成
- 签名验证通过公钥(Public Key)完成
由于私钥仅由厂商掌握,外部无法获取或推导,因此无法对修改后的数据重新生成合法签名。从目前的技术角度来说 RSA 加密也无法被破解!
那么,是否存在其他方式可以实现兼容第三方耗材?
一种可行思路是:标签复制(Tag Cloning)。
其基本原理如下:
- 利用已知可读取的合法标签数据
- 将完整数据(包括 UID、各扇区数据及签名)进行 1:1 原样复制
- 写入到一张兼容的空白 RFID 卡中
由于复制后的数据:
- ✅ 保持了原始数据的完整性
- ✅ 包含有效的 RSA 签名(未被破坏)
因此在读取时,Bambu Lab 的 AMS 系统会将其识别为一张合法标签,从而正常加载并使用对应的耗材信息。
AMS 标签防伪
是否可以随意复制到任意 RFID 卡?
答案是:不可以。
即使已经掌握了完整的标签数据并进行 1:1 复制,仍然需要满足卡片本身的硬件与行为特性要求,否则依然无法被 Bambu Lab 的 AMS 系统识别。
基础前提:卡片类型必须兼容
首先,目标卡必须符合 Mifare Classic 1K(M1 卡) 的基本结构与通信协议。
常见可用于复制的卡片类型包括:
UID 卡(Gen1 魔术卡)
- 特点:
- 支持直接修改 UID(Block 0 可写)
- 响应特殊后门指令(如
0x40)
- ❌ 问题:
- 极易被检测
- 已被 AMS 明确识别并拦截
CUID 卡(Gen2 魔术卡)
- 特点:
- 支持通过认证方式修改 Block 0(UID 可改)
- 不响应 Gen1 后门指令
- ⚠️ 问题:
- 多数卡片 可不受权限限制修改0区块(违反标准 M1 卡行为)
- 容易被 AMS 检测为异常卡
FUID 卡(一次写 UID 卡)
- 特点:
- Block 0 可写 一次
- 写入后自动锁定,行为与标准 M1 卡一致
- ✅ 优势:
- 无后门指令
- 0 区块不可再次修改
- 👉 可稳定绕过 AMS 检测
UFUID 卡(可锁定 UID 卡)
- 特点:
- 初始状态可修改 UID
- 支持“锁卡”操作(写保护 Block 0)
- ⚠️ 使用方式:
- 未锁定:❌ 会被识别为异常卡
- 锁定后:✅ 表现为标准 M1 卡,可正常使用
- ❗ 限制:
- 锁卡通常需要专用设备(如 Proxmark3)
AMS 的防伪检测机制
通过分析可以发现,AMS 除了 RSA 签名校验 外,至少还实现了以下两类卡片行为检测:
魔术卡检测(后门指令检测)
- AMS 会发送特定指令(如
0x40) - 判断卡片是否响应
| 卡类型 | 是否响应 |
|---|---|
| UID 卡(Gen1) | ✅ 响应 → 被识别为魔术卡 |
| 标准 M1 卡 | ❌ 不响应 |
👉 结论:
UID 卡直接被排除
Block 0 写入测试(行为检测)
AMS 会尝试执行以下操作:
- 使用已知密钥(Key A)直接对 Block 0(厂商块)进行写入测试
- 故意破坏 BCC 校验
检测逻辑:
| 行为 | 判断结果 |
|---|---|
| Block 0 写入成功 | ❌ 判定为异常卡(魔术卡),此类卡不受 878787 权限位限制,可直接修改 Block 0 |
| Block 0 写入失败 | ✅ 判定为正常卡,在 878787 权限配置下无法修改 Block 0,需先调整权限后才可写入 |
实际测试结论
- 大多数 CUID 卡:
- 不受权限管控可写 Block 0
- ❌ 被 AMS 检测并破坏数据(导致卡异常)
- 少数特殊 CUID 卡:
- 无法绕过权限写 Block 0
- ✅ 可绕过检测(较少见)
- FUID 卡:
- 写入后 Block 0 永久锁定
- ✅ 完全符合标准卡行为
- 👉 最稳定方案
- UFUID 卡:
- 未锁卡:❌ Block 0 可写 → 被检测
- 锁卡后:✅ 行为正常 → 可用
- 锁卡需要额外设备支持
AMS 的防伪不仅依赖“数据正确性”,还依赖“卡片行为一致性”
必须同时满足:
- ✅ 数据完整(RSA 签名正确)
- ✅ 卡片结构正确(M1 卡)
- ✅ 行为符合标准(不可写 Block 0 / 无后门)
| 卡类型 | 是否可用 | 说明 |
|---|---|---|
| UID 卡 | ❌ | 被0x40指令检测 |
| CUID 卡 | ⚠️ | 极少数可用,大多数被检测 |
| FUID 卡 | ✅ | 最稳定方案 |
| UFUID 卡 | ✅(锁卡后) | 需额外操作 |
能否被 AMS 识别,不取决于“能不能写数据”,而取决于“是否看起来像一张真正的原厂卡”
Bambu RFID Reader
基于上述对 M1 卡结构、RFID 数据解析以及 AMS 工作机制的研究,一个开源的 Android 应用应运而生。该应用围绕 Bambu Lab 生态,提供对拓竹 RFID 标签的读写支持,并结合实际使用场景,集成了耗材管理功能。
项目地址:
🚀 核心功能
📡 RFID 标签读写
支持通过手机 NFC 功能读取拓竹耗材标签数据,并可以将已有的数据复制到标签卡中。🧾 数据解析与可视化
将原始十六进制数据转换为可读信息(如材料类型、颜色、参数等),便于理解与分析。📦 耗材库存管理
提供本地库存管理功能,可记录每卷耗材的使用情况,实现分类、统计。⚙️ 便捷操作体验
相比传统依赖专业设备的方式,利用手机即可完成读取与管理,大幅降低使用门槛。
文章结尾
需要注意的是,随意复制 RFID 标签并用于实际使用属于不当行为。
从技术角度来看,标签复制虽然在原理上可行,但其本质是对原有系统认证机制的规避,可能带来以下问题:
- ❌ 违反使用条款或服务协议
复制标签可能绕过厂商对耗材的管理机制,违反设备或耗材的使用规范 - ⚖️ 涉及法律风险
此类行为可能被认定为规避技术保护措施或侵犯相关权益 - 🔒 破坏系统安全设计
厂商通过签名与防伪机制保障系统可靠性,随意复制可能影响设备稳定性或数据一致性 - 🧩 引发不可预期问题
如多标签冲突、数据异常、设备识别错误等
随着系统安全策略的不断升级,Bambu Lab 的 AMS 在未来很可能引入更加完善的防伪机制,以进一步提升标签的安全性与唯一性校验能力。
可能的演进方向:
- 🔐 更严格的 Block 0 访问检测机制
通过更加规范的认证流程,进一步识别可写 UID 的异常卡片(如部分 CUID 卡) - 🧩 卡片行为一致性检测增强
对卡片底层响应特征(指令响应、芯片特征等)进行分析,从而识别非标准 M1 卡 - 🌐 联网校验机制
通过云端服务对标签进行唯一性验证,例如:- 检测重复 UID / 数据指纹
- 对异常或重复标签进行封禁处理
- 📊 数据一致性与使用行为分析
结合设备使用记录,对异常耗材使用模式进行识别(如同一标签在多个设备同时出现)