小米手环3NFC版详细破解流程
背景知识
小米手环
小米手环3分为两种,一种为普通版,另一种为NFC版本,这篇文章的主角是NFC版本。
NFC
NFC(Near-field communication)顾名思义,近距离无线通信,国内媒体比较常用近场通信来描述。他是通过RFID(非接触式射频识别)演变而来。
近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。
这段话也说明了它的技术指标,13.56MHz,传输距离,传输速度。
ID/IC卡
ID卡和IC卡的主要
区别如下:
比较简单的一个判断方法就是,如果卡(水滴)表面有10位或者18位编码,且以00开头的,那些都是ID芯片的卡。
在IC卡中包含接触式的和非接触式(感应卡)。飞利浦公司的mifare1(代号M1)系列就是一种非接触式的卡,M1卡的使用比较广泛,一般公交IC卡,校园卡,购电卡,购水卡等等。
综上,因此小米手环3NFC版本仅仅支持13.56MHz的频率的IC卡。
IC卡加密区段简介
一般我们的门禁卡都为M1系列,所有这里简单说一下M1的加密区段原理。M1卡分为16个扇区,每个扇区对应4个block(block0-block3),一共64个block,编号为0-63。**第0扇区的第0block用于存放厂商代码,已经固化无法更改。其余区的第0-2block用于存放数据,block3为控制块用于存放密码A&存取控制&密码B,结构如下:
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
(密码A 6字节) (存储控制 4字节) (密码B 6字节)
并且每个扇区块3中的密码和存储控制全部都是独立的,独立控制本扇区的各种操作,每个扇区都能实现不同的功能,所以广泛用作一卡通。存储控制里面4字节的具体含义我也不是很清楚(不影响我们破解),所以就不说出来误导大家。卡中每个block包含16字节,所以M1卡的容量=16扇区*4块*16字节=1024字节。
我这次破解其实就是针对密码A和密码B做文章。
常见几种的破解方式
- 暴力破解:简单粗暴,比较费时。M1是被动卡,一旦读卡器切断电源,卡中临时数据就会丢失,所以无论试错多少次都不会锁定, 只要攻击者有时间慢慢跟它耗,密码肯定会出来的。
- 卡片克隆:需要利用UID卡(可以重复读写的M1卡),这种卡的0扇区block0处是可以修改的,可以利用UID制作和母卡一样的克隆卡片。
- 验证漏洞:当读卡器读卡的扇区时,卡会发一个随机序列给读卡器,读卡器收到序列后会利用自身算法加密该随机序列再反馈给卡,卡片接收后再用自己算法计算,如果结果一致就认为该读卡器是合法授权的,然后开始进行数据传输。这就产生了问题:当读卡器访问另一个扇区时,又会重复上述步骤,而此时卡片与读卡器之间的数据交换已被算法加密过,而这个算法又是由扇区密钥决定,因此就会导致这个密钥泄露。所以只要知道一个扇区的密钥,就能破解卡(无法破解全加密卡)。
准备工作
硬件设备
- PN532 NFC 模块
- UID卡若干
- 原始门禁卡
软件设备
- RN532驱动
- 上位机软件
- 十六进制的编辑器
- Hex Fiend(MacOS)
- TTHexEdit(WinOS)
开始
基本流程
读原始卡->保存加密的Dump->修改为非加密的Dump->写入UID白卡中->将白卡刷入手环->将加密的Dump刷入手环
读取原始卡
首先将PN532的驱动安装完成。Win7下会要求重启电脑,Win10可以直接安装后运行。打开上位机注册器「NFC上位机-注册器无时间限制版.exe」,注册软件。
之后打开「NFC上位机-NFC上位机.exe」,就会看到如下界面
将门禁卡放到设备上,然后点击「读整卡」,等待一段时间,程序会读取整个卡的内容,下方就能看到整个卡中的扇区和块的信息了。
保存加密DUMP并修改密钥
点击扇区旁边的灰色小三角会提示是否保存当前dump,选择「是」保存为「原始.dump」。
按照上面背景知识的内容,我们很容易就能找到有存在密钥的扇区了,对,就是1,2扇区中的第3块。接下来我们需要把用十六进制的编辑器打开这个原始.dump。将第3块密码部分修改为FF FF FF的形式,注意别伤及中间的四位存储控制字节。
修改完成后,将这个dump另存为「破解后.dump」。
写入UID白卡中并刷入小米手环
再次打开「上位机.exe」将白卡放到设备上面。先读取白卡中内容,然后写入的时候选择「破解后.dump」。等待写入成功。
打开小米运动APP,选择模拟卡,这时候这张白卡就可以顺利被模拟了,不再会提示「不支持此加密卡」。
等待小米手环模拟成功后,就来到了这次破解的最重要的一步。
将加密的Dump刷入手环
这里有坑,详见后面,这里直接说方法。需要利用命令行来读卡,写卡。打开CMD定位到「PN532_GUI」目录。将原始门禁卡放到设备上,利用mfoc.exe读卡&nfc-mfclassic.exe写卡。执行命令
mfoc.exe -O base.dump
等待这个命令执行完毕,将小米手环放到设备上,执行:
nfc-mfclassic.exe w A base.dump
等待刷入成功即可。
这样整个刷机过程就完成了,可以愉快的拿小米手环刷门禁了哈。
一些坑
- 刷卡的时候,切记先读卡,后写卡,如果不是这个步骤会导致刷卡成功,但使用失败。具体原因尚不明了,有知道的伙伴可以留言
- 写加密信息的时候,如果使用icud卡,则会导致该卡被加密锁死,无法重复读写
- 有一些门禁系统会校验第0扇区第0块的厂商信息,由于小米手环不支持修改这块信息,所以会导致失败
- 运行所有程序需要在管理员权限之下,并关闭国产的安全管家之类软件。实测在Win10的家庭版上,默认系统自带的防火墙会将上位机写入程序识别为病毒。故需要关闭该防火墙,或者做白名单放行
- 小米手环在刷入的时候,最好保证屏幕常量且停留在对应的模拟卡的界面
- 如果单次写入失败,可以重新尝试一次。重新尝试的方法为重新来一遍完整的流程,即删除手环中的卡->模拟白卡->写入
- NFC设备读写门禁的时候,保证周围20cm内没有多余门禁卡影响读取