news 2026/9/19 5:23:38

proxmark3 T5577 实战指南:从块读写、Bit 级配置到密码保护与嗅探

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
proxmark3 T5577 实战指南:从块读写、Bit 级配置到密码保护与嗅探

proxmark3 T5577 实战指南:从块读写、Bit 级配置到密码保护与嗅探

【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3

本文以 proxmark3(Iceman Fork)仓库自带的doc/T5577_Guide.md教程为主线,系统讲解 T5577 这颗 125 kHz 低频 RFID 芯片的完整使用过程:如何用lf t55xx系列命令检测、转储、读写数据块,如何按位修改 Page 0 Block 0 配置字让卡片启用密码或仿真 EM4100,以及如何使用lf t55xx sniff捕获明文密码。读完本文,你可以独立完成 T5577 的初始化、数据写入、密码开启与关闭、配置解码和命令嗅探等全套操作,并理解每条命令背后的源码实现。

一、T5577 是什么:芯片定位与内存结构

T5577 是一颗通用的低频(LF)RFID 芯片,工作在 125 kHz 频段,常用于学习和各类卡片的仿真。官方教程明确建议:学习 RFID 与阅读数据手册(datasheet)应同时进行——手册中保存着你需要的全部信息,只是你还不知道如何解读它。本指南基于仓库内文档(见 T5577 教程原文),并结合 客户端 T55xx 命令实现 给出源码级佐证。

从芯片内部看,T5577 可以存储数据配置两部分内容。上方内存布局图中,所有白色块都能存数据,其中部分块有第二用途(如密码块、可追溯数据块),而"Configuration Data"与模拟前端选项则决定芯片如何行为。

可追溯数据(Traceability Data)是制造厂商烧录并锁定的数据,包含生产年份、季度、晶圆编号、die 编号等,用于追溯芯片的生产批次。它占据 Page 1 的 Block 1 与 Block 2,正常情况下不可写——但部分 T5577 克隆芯片允许覆写这两个块。可以使用lf t55xx trace命令读取(对应源码入口 CmdT55xxReadTrace)。

首次接触卡片:detect 与 dump

由于 T5577 的配置可以改变其输出数据的编码方式,proxmark3 必须先弄清"如何解读收到的数据"。每次把 T5577 放到 proxmark3 上后,都应先执行 detect 命令

[usb] pm3 --> lf t55xx detect

典型输出(对应 CmdT55xxDetect):

[=] Chip type......... T55x7 [=] Modulation........ ASK [=] Bit rate.......... 2 - RF/32 [=] Inverted.......... No [=] Offset............ 33 [=] Seq. terminator... Yes [=] Block0............ 000880E0 (auto detect) [=] Downlink mode..... default/fixed bit length [=] Password set...... No

detect 之后,即可转储整片存储:

[usb] pm3 --> lf t55xx dump
[+] Reading Page 0: [+] blk | hex data | binary | ascii [+] ----+----------+----------------------------------+------- [+] 00 | 000880E0 | 00000000000010001000000011100000 | .... [+] 01 | 00000000 | 00000000000000000000000000000000 | .... [+] 02 | 00000000 | 00000000000000000000000000000000 | .... [+] 03 | 00000000 | 00000000000000000000000000000000 | .... [+] 04 | 00000000 | 00000000000000000000000000000000 | .... [+] 05 | 00000000 | 00000000000000000000000000000000 | .... [+] 06 | 00000000 | 00000000000000000000000000000000 | .... [+] 07 | 00000000 | 00000000000000000000000000000000 | .... [+] Reading Page 1: [+] blk | hex data | binary | ascii [+] ----+----------+----------------------------------+------- [+] 00 | 000880E0 | 00000000000010001000000011100000 | .... [+] 01 | 00000000 | 00000000000000000000000000000000 | .... [+] 02 | 00000000 | 00000000000000000000000000000000 | .... [+] 03 | 00000000 | 00000000000000000000000000000000 | ....

需要注意:T5577 存在大量克隆芯片,各克隆片的出厂默认配置可能不同;若卡片带有可追溯数据,其内容随生产批次而变,因此你的 dump 结果可能与示例有差异。

二、读与写数据块:32 位粒度与十六进制格式

proxmark3 操作 RFID 卡片的基本功就是读写数据。T5577 的读写规则是一次读写一个完整的块(block),每块存放32 位数据——这也解释了 dump 输出中的 32 位二进制列。

学习阶段请避开配置块(Page 0 Block 0)和 Page 1 的块。用户数据建议存放在 Block 1–7,但记住Block 7 是密码块,将来若要启用密码就会用到它。

2.1 读一个块

[usb] pm3 --> lf t55xx read -b 1

结果:

[+] Reading Page 0: [+] blk | hex data | binary | ascii [+] ----+----------+----------------------------------+------- [+] 01 | 00000000 | 00000000000000000000000000000000 | ....

命令的读法是:对 T55xx 芯片(t55xx)执行低频(lf)命令,读取块(block,-b)1。

2.2 写一个块

-d参数提供 8 位十六进制数据,写入 Block 1:

[usb] pm3 --> lf t55xx write -b 1 -d 12345678
[=] Writing page 0 block: 01 data: 0x12345678

回读验证:

[usb] pm3 --> lf t55xx read -b 1
[+] Reading Page 0: [+] 01 | 12345678 | 00010010001101000101011001111000 | .4Vx

2.3 十六进制与二进制对照

一个十六进制数字承载 4 位二进制数据,因此 32 位块数据 = 8 个十六进制数字(8 × 4 = 32)。对照速查表:

HexBinaryDecimal
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
A101010
B101111
C110012
D110113
E111014
F111115

写入89ABCDEF验证满 32 位:

[usb] pm3 --> lf t55xx write -b 1 -d 89abcdef
[=] Writing page 0 block: 01 data: 0x89ABCDEF
[usb] pm3 --> lf t55xx read -b 1
[+] 01 | 89ABCDEF | 10001001101010111100110111101111 | ....

2.4 练习 1

用 read/write 命令让lf t55xx dump显示 Page 0 的 Block 1–7 中 Block 1 为89ABCDEF、其余为00000000的布局。不要写 Block 0,也不要改动 Page 1 的数据

[usb] pm3 --> lf t55xx dump
[+] 00 | 000880E0 | 00000000000010001000000011100000 | .... [+] 01 | 89ABCDEF | 10001001101010111100110111101111 | .... [+] 02 | 00000000 | 00000000000000000000000000000000 | .... [+] 03 | 00000000 | 00000000000000000000000000000000 | .... [+] 04 | 00000000 | 00000000000000000000000000000000 | .... [+] 05 | 00000000 | 00000000000000000000000000000000 | .... [+] 06 | 00000000 | 00000000000000000000000000000000 | .... [+] 07 | 00000000 | 00000000000000000000000000000000 | ....

反复练习读写 Block 1–6 直到结果符合预期。练习阶段建议远离 Block 7——那是密码的存放位置,一旦设置后忘记密码,你将无法再读写该卡片。

三、密码保护:从 000880E0 到 000880F0 的 Bit 28

密码操作对新手容易踩坑。核心警告只有一句话:忘记密码 = 失去卡片访问权

3.1 第 1 步:擦除到已知状态

wipe命令会把 Block 0 重置为默认配置、把 Block 1–7 全部清零(源码入口 CmdT55xxWipe):

[usb] pm3 --> lf t55xx wipe
[=] Target T55x7 tag [=] Default configuration block 000880E0 [=] Begin wiping... [=] Writing page 0 block: 00 data: 0x000880E0 [=] Writing page 0 block: 01 data: 0x00000000 [=] Writing page 0 block: 02 data: 0x00000000 [=] Writing page 0 block: 03 data: 0x00000000 [=] Writing page 0 block: 04 data: 0x00000000 [=] Writing page 0 block: 05 data: 0x00000000 [=] Writing page 0 block: 06 data: 0x00000000 [=] Writing page 0 block: 07 data: 0x00000000

这个默认值与源码中的常量定义完全一致,见 cmdlft55xx.h 的配置块常量:

#define T55X7_DEFAULT_CONFIG_BLOCK 0x000880E8 // ASK, compat mode, data rate 32, manchester, STT, 7 data blocks #define T55X7_RAW_CONFIG_BLOCK 0x000880E0 // ASK, compat mode, data rate 32, manchester, 7 data blocks #define T55X7_EM_UNIQUE_CONFIG_BLOCK 0x00148040 // ASK, EM4x02/unique - compat mode, manchester, data rate 64, 2 data blocks

3.2 第 2 步:确认状态

[usb] pm3 --> lf t55xx detect

确认输出中Block0000880E0若 Block 0 不是 0x000880E0,必须先解决该问题再继续

3.3 第 3–4 步:写入密码并核对

本例使用密码12345678,密码存放在 Page 0 Block 7(源码中即T55x7_PWD_BLOCK 0x07):

[usb] pm3 --> lf t55xx write -b 7 -d 12345678
[=] Writing page 0 block: 07 data: 0x12345678

lf t55xx dump核对 Block 0 与 Block 7:若二者不严格等于000880E0/12345678,停止后续操作

3.4 第 5 步:按位开启密码位(Bit 28)

数据手册规定:要让芯片启用密码,需设置配置字(Block 0)的第 28 位 "PWD"。

本例中,只改 Bit 28,其余位一律不动

  • 当前 Block 0:000880E0
  • 新 Block 0:000880F0

位位置对照(Bit 28 处加粗):

Bit Location (28) 000000000011111111112222222 2 2233 123456789012345678901234567 8 9012
Hex DataBinary Data
000880E000000000000010001000000011100000
000880F000000000000010001000000011110000

即 Bit 28:0 = 无密码,1 = 使用密码。注意其他配置位均未改变。该位掩码在源码中定义为T55x7_PWD 0x00000010(即 0xF0 与 0xE0 之差)。

写入新配置:

[usb] pm3 --> lf t55xx write -b 0 -d 000880F0
[=] Writing page 0 block: 00 data: 0x000880F0

3.5 第 6 步:验证密码生效

密码启用后,不带密码的 detect 将失败:

[usb] pm3 --> lf t55xx detect
[!] Could not detect modulation automatically. Try setting it manually with 'lf t55xx config'

这是因为读写需要密码。加上-p参数后恢复正常:

[usb] pm3 --> lf t55xx detect -p 12345678
[=] Chip type......... T55x7 [=] Modulation........ ASK [=] Bit rate.......... 2 - RF/32 [=] Inverted.......... No [=] Offset............ 33 [=] Seq. terminator... Yes [=] Block0............ 000880F0 (auto detect) [=] Downlink mode..... default/fixed bit length [=] Password set...... Yes [=] Password.......... 12345678

3.6 第 7–8 步:带密码写/读,以及安全机制

写块时附带密码:

[usb] pm3 --> lf t55xx write -b 1 -d 1234abcd -p 12345678
[=] Writing page 0 block: 01 data: 0x1234ABCD pwd: 0x12345678

读块时附带密码——重大警告

在未启用密码的卡片上执行"带密码读"可能导致卡片被锁死。仅在确认卡片确实使用了密码时才使用带密码的 read。

proxmark3 对此内置了安全检查(safety check):执行lf t55xx read -p ...时,客户端会先尝试读取配置块并判断 PWD 位是否置位(实现见 CmdT55xxReadBlock 的安全检查逻辑 及其调用的底层读取函数中的 检查代码):

[usb] pm3 --> lf t55xx read -b 1 -p 12345678
[+] Reading Page 0: [+] blk | hex data | binary | ascii [+] ----+----------+----------------------------------+------- [!] Safety check: Could not detect if PWD bit is set in config block. Exits.

安全检查介入,拒绝在无法确认 PWD 位的情况下带密码读取,要求提供覆盖参数-o

[usb] pm3 --> lf t55xx read -b 1 -p 12345678 -o
[+] Reading Page 0: [=] Safety check overridden - proceeding despite risk [+] 01 | 1234ABCD | 00010010001101001010101111001101 | .4..

此时读回了写入的数据。read 命令的完整参数(-b块号、-p4 字节十六进制密码、-o覆盖安全检查、--pg1读 Page 1,以及下链路编码选项 r0–r3)定义在 CLIParser 参数表中,密码必须是 4 个十六进制字节,否则直接报错退出。

3.7 第 9 步:关闭密码

需要把配置字 Bit 28 清零。正确做法是:先读出当前配置,仅清 Bit 28,再写回——直接盲写一个"标准配置"会覆盖你所有的其他设置(虽然这能救回卡片,但会丢失你已有的配置)。本例已知目标值就是000880E0

[usb] pm3 --> lf t55xx write -b 0 -d 000880E0 -p 12345678
[=] Writing page 0 block: 00 data: 0x000880E0 pwd: 0x12345678

验证免密码 detect 恢复:

[usb] pm3 --> lf t55xx detect
[=] Block0............ 000880E0 (auto detect) [=] Downlink mode..... default/fixed bit length [=] Password set...... No

四、Part 2:理解两个独立的双向通信协议

很多初学者容易忽略的一点:T5577 有两套不同的、各自带有子协议的通信方向

  • Card → Reader(卡到读):T5577 按 Page 0 Block 0 的设置编码数据。无论是默认读模式(上电后自动发送 Block 1 到 x 的循环广播),还是响应命令的回复,都用它。
  • Reader → Card(读到卡):T5577 按 Page 1 Block 3 的设置编码(下链路)。若命令编码不正确,芯片会忽略该命令并退回默认读模式。

这就是为什么 detect 输出里会显示 "Downlink mode",以及 read 命令为何提供--r0--r3四种下链路编码选项(fixed bit / long leading reference / leading zero / 1-of-4,对应 cmdlft55xx.c 中的下链路模式定义)。

五、解码配置字 Block 0(Page 0):以 EM4100 为例

配置字的选择决定了卡片在"生产用途"下的行为形态:想让卡片表现得像 EM4100,就选 EM4100 的参数组合;HID 同理(各协议配置值可参见社区资料,也可对照 cmdlft55xx.h 中内置的协议配置常量表)。

以非密码保护的 EM4100 配置00148040为例,其二进制为00000000000101001000000001000000(32 位)。按位域拆解:

BitsPurposeValue
0000Master KeyNothing Set
0000000Not used in Basic Mode
101Data Bit RateRF/64
0Not used in Basic Mode
01000ModulationManchester
00PSKCFRF/2
0AORNot Set
0Not used in Basic Mode
010Max Block2
0PasswordNot Set
0ST Sequence TerminatorNot Set
00Not used in Basic Mode
0Init DelayNot Set

5.1 实操:把 T5577 变成 EM4100

假设卡片仍处于 Part 1 结束时的状态(无密码可写)。

  1. 克隆 EM4100,ID 为1122334455
[usb] pm3 --> lf em 410x clone --id 1122334455
[+] Preparing to clone EM4102 to T55x7 tag with ID 1122334455 (RF/64) [#] Clock rate: 64 [#] Tag T55x7 written with 0xff8c65298c94a940 [+] Done
  1. lf search验证(可看到 HoneyWell IdentKey 的多种解码结果与 T55xx 芯片指纹):
[=] Checking for known tags... [+] EM 410x ID 1122334455 [+] EM410x ( RF/64 ) [=] -------- Possible de-scramble patterns --------- [+] Unique TAG ID : 8844CC22AA [=] HoneyWell IdentKey [+] DEZ 8 : 03359829 [+] DEZ 10 : 0573785173 [+] DEZ 5.5 : 08755.17493 [+] DEZ 3.5A : 017.17493 [+] DEZ 3.5B : 034.17493 [+] DEZ 3.5C : 051.17493 [+] DEZ 14/IK2 : 00073588229205 [+] DEZ 15/IK3 : 000585269781162 [+] DEZ 20/ZK : 08080404121202021010 [=] [+] Other : 17493_051_03359829 [+] Pattern Paxton : 289899093 [0x11478255] [+] Pattern 1 : 5931804 [0x5A831C] [+] Pattern Sebury : 17493 51 3359829 [0x4455 0x33 0x334455] [+] VD / ID : 017 / 0573785173 [=] ------------------------------------------------ [+] Valid EM410x ID found! [+] Chipset detection: T55xx [?] Hint: try `lf t55xx` commands
  1. 用 detect / info 查看新配置。detect 显示 Bit rate 变为5 - RF/64、Block0 为00148040
[usb] pm3 --> lf t55xx detect
[=] Chip type......... T55x7 [=] Modulation........ ASK [=] Bit rate.......... 5 - RF/64 [=] Inverted.......... No [=] Offset............ 33 [=] Seq. terminator... Yes [=] Block0............ 00148040 (auto detect) [=] Downlink mode..... default/fixed bit length [=] Password set...... No

lf t55xx info(源码入口 CmdT55xxInfo)给出结构化解读,并附"配置块指纹"匹配:

[=] --- T55x7 Configuration & Information --------- [=] Safer key : 0 [=] reserved : 0 [=] Data bit rate : 5 - RF/64 [=] eXtended mode : No [=] Modulation : 8 - Manchester [=] PSK clock frequency : 0 - RF/2 [=] AOR - Answer on Request : No [=] OTP - One Time Pad : No [=] Max block : 2 [=] Password mode : No [=] Sequence Terminator : No [=] Fast Write : No [=] Inverse data : No [=] POR-Delay : No [=] ------------------------------------------------------------- [=] Raw Data - Page 0, block 0 [=] 00148040 - 00000000000101001000000001000000 [=] --- Fingerprint ------------ [+] Config block match : EM unique, Paxton

info 的输出确认了我们手工解码的结果,其中 "Config block match: EM unique, Paxton" 与源码常量T55X7_EM_UNIQUE_CONFIG_BLOCK/T55X7_EM_PAXTON_CONFIG_BLOCK(同为0x00148040)的指纹匹配机制对应。注意:detect 仍然必不可少——proxmark3 必须先 detect 才能知道如何解码 info。EM4100 仿真下 Max Block = 2,数据占用 Block 1 与 Block 2。

5.2 练习 2

用 Part 1 的读写技能查看 Block 1 和 Block 2 的数据。注意1122334455这个 ID 是编码后存储的,不要指望直接看到这些字节——如何解码,去查数据手册。

此时若想给这张 EM4100 仿真卡加密码保护,可走第三节的流程,把配置从00148040更新为00148050(同样只动 Bit 28)。切记先在 Block 7 写入并记住一个有效密码。

(原文档中 "Block 3 Page 1" 一节标注为to be written,即下链路配置块部分尚未撰写;理解其重要性可参考第四节的协议说明。)

六、嗅探 T55xx 命令:抓明文密码

有些读卡器通过 T55xx 命令(read/write 等)与卡片通信,并因此被认为"安全"。但此时密码是以明文在射频场中发送的。proxmark3 提供了嗅探命令,从缓冲区或射频场中捕获这些命令(源码入口 CmdT55xxSniff):

[usb] pm3 --> lf t55xx sniff
[=] T55xx command detection [+] Downlink mode | password | Data | blk | page | 0 | 1 | raw [+] ------------------------+------------+----------+-----+------+-----+-+--------------------------------------------- [+] Default write/pwd read | [FFxxxxxx] | FFxxxxxx | 6 | 0 | 16 | 45 | 1011111111101xxxxxxxxxxxxxxxx100000110 [+] Default write/pwd read | [FFxxxxxx] | FFxxxxxx | 6 | 0 | 17 | 46 | 1011111111101xxxxxxxxxxxxxxxx100000110 [+] -------------------------------------------------------------------------------------------------------------------

输出表逐列给出:下链路模式、捕获到的密码([FFxxxxxx]表示密码高字节为 FF、其余位未完全解析)、目标数据、块号、页号以及原始位串。

七、T5577 与 Keysy:基于可追溯数据的 DRM

Keysy 标签克隆工具使用一种特殊机制:它在Block 6写入一个特殊"密码"值(注意:这不是第三节的芯片密码),该值与可追溯数据绑定,Keysy 会校验并计算 Block 6 的正确取值,不会写入不满足条件的标签。这一 DRM 技术依赖两个前提:

  1. 正品 T5577 芯片的可追溯数据(Page 1 的 Block 1 和 2)不可重写
  2. 计算 Block 6 正确值的方法是专有的——由此迫使用户购买其品牌标签。

而正如前文所述,部分 T5577 克隆芯片允许覆写可追溯数据,因此把一枚 Keysy 标签的完整 dump 写入这类克隆芯片,即可欺骗 Keysy 使用它。这同时意味着:永远不要覆写 Keysy 标签的 Block 6,否则该标签将无法再被 Keysy 编程(除非恢复该值)。

八、源码级小结:命令体系与关键常量

从 client/src/cmdlft55xx.c 的函数布局可以完整看到lf t55xx子命令的实现脉络(均对应本文出现的操作):

命令源码入口作用
lf t55xx detectCmdT55xxDetect自动检测调制/波特率/Block 0/密码位
lf t55xx dumpCmdT55xxDump转储全部页块数据
lf t55xx readCmdT55xxReadBlock读块,含 PWD 安全检查
lf t55xx writeCmdT55xxWriteBlock写块,可选密码
lf t55xx wipeCmdT55xxWipe恢复默认配置并清零
lf t55xx infoCmdT55xxInfo结构化解读配置字 + 指纹匹配
lf t55xx traceCmdT55xxReadTrace解析 Page 1 可追溯数据
lf t55xx sniffCmdT55xxSniff嗅探射频场中的 T55xx 命令
lf t55xx brute/chkpwdCmdT55xxBruteForce/CmdT55xxChkPwds字典/穷举恢复密码

核心常量集中在 client/src/cmdlft55xx.h:密码块号T55x7_PWD_BLOCK = 0x07、PWD 位掩码T55x7_PWD = 0x00000010、每页块数T55x7_BLOCK_COUNT = 12,以及 EM4100(0x00148040)、HID 26 位(0x00107060)、Indala 64/224(0x00081040/0x000810E0)等各协议的配置字常量——这些常量与本文第五节的位域解码表一一对应。

配置状态在客户端由t55xx_conf_block_t结构(定义)持有,涵盖调制方式、位率、偏移、Block 0 值及其来源状态(NOTSET/AUTODETECT/USERSET/TAGREAD)、密码与下链路模式——这正是 detect 输出各项的内存表示。

附录:本指南的关键安全红线

  1. 忘记 Block 7 密码 = 卡片报废(除非用lf t55xx chkpwd/brute从字典恢复)。
  2. 未在密码模式下不要执行带-p的 read;必须时配合-o并自担风险——客户端的 safety check 会先拦截。
  3. 改配置字采用"读—改单 bit—写回"策略,不要盲写标准值覆盖整块。
  4. 操作前永远先lf t55xx detect,它是后续所有命令正确解码的前提。

【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 5:07:30

EMC测试条件控制实战指南:环境、供电、布置与特殊要求

做产品开发这些年,我几乎每个项目都要和 EMC 测试打交道。很多人以为 EMC 测试就是把样品送到实验室、插上电、跑一遍就完事,等拿到报告才发现问题一大堆:不是样品在实验室里工作状态不对,就是供电条件不符合标准要求,…

作者头像 李华