拓竹_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 标签中实际存储的数据内容。通过对相关资料的研究与整理,可以对其数据布局有一个更清晰的认识。

数据来源:Bambu-Lab-RFID-Library

数据转换说明

RFID 卡中存储的数据本质上是二进制数据。为了便于展示与分析,通常会将其转换为 十六进制(Hex) 形式进行查看。但在实际解析过程中,还需要进一步将十六进制数据还原为可读的“明文”信息。

上面常见的数据转换方式包括以下几种:

十六进制 → 字符串(String)

比如耗材的类型 PLA Silk (使用CyberChef转换)

1
504C412053696C6B0000000000000000 >>  PLA Silk

十六进制 → 浮点数(Float)

比如耗材粗细

1
0000E03F >> 1.75

十六进制 → 十进制(Integer)

比如烘烤温度 (计算器转换)

1
3700 >> 55

识别数据

通常来说,读取 M1 卡数据需要借助如 Proxmark3 这类专业 RFID 分析设备。目前对于拓竹耗材标签来说,即使没有此类设备,在已知相关条件的情况下,仍然可以实现数据读取。

实现读取的关键在于:获取各扇区的访问密钥(Key)。

RFID-Tag-Guide:deriveKeys.py 公开了拓竹 RFID 标签的密钥计算方法,其核心为 HKDF(HMAC-based Key Derivation Function,基于 HMAC 的密钥导出函数)。通过该方法,可以利用卡片的 UID 推导出各个扇区对应的密钥,从而实现对标签数据的访问与解析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
from Cryptodome.Protocol.KDF import HKDF
from Cryptodome.Hash import SHA256

if not sys.version_info >= (3, 6):
print("Python 3.6 or higher is required!")
exit(-1)

def kdf(uid):
master = bytes([0x9a,0x75,0x9c,0xf2,0xc4,0xf7,0xca,0xff,0x22,0x2c,0xb9,0x76,0x9b,0x41,0xbc,0x96])
return HKDF(uid, 6, master, SHA256, 16, context=b"RFID-A\0")

if __name__ == '__main__':
uid = bytes.fromhex(sys.argv[1])
keys = kdf(uid)

output = [a.hex().upper() for a in keys]
print("\n".join(output))

使用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 / 数据指纹
    • 对异常或重复标签进行封禁处理
  • 📊 数据一致性与使用行为分析
    结合设备使用记录,对异常耗材使用模式进行识别(如同一标签在多个设备同时出现)

也有可能,Bambu Lab 可能选择在一定范围内开放 RFID 体系,例如提供官方接口或规范,允许用户自定义或接入第三方耗材。在保证安全性的前提下,实现更灵活、自由的使用体验。(用户许愿)