背景知识

小米手环

小米手环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内没有多余门禁卡影响读取

REF