起因
学校强制要求出入寝室需要刷校园卡,但是很多时候本来就只是临时上下楼,却不得不多带一张卡在身上。于是我想到了我常年佩戴的小米手环4NFC版
,试图使用它来模拟校园卡,但是很可惜,当前小米仅支持非加密卡的模拟,而我们学校使用的却是IBM
制式的JCOP41
这意味着这张卡无法被直接模拟,需要解密,但常规的解密方式并不适用于这张卡,CPU卡的构造也注定有一部分数据无法被读取,我只能希望门禁数据没有放在CPU区里,万事俱备,开工!
材料准备
- 具备全功能NFC的安卓手机一台(这里使用
LG G7
) - PN532+PL2303HX
- 一张
CUID白卡
(理论上可以省下,但你买PN532一般都会送) - MifareOneTool
- MifareClassicTool
- 一颗爱折腾的心
分析
首先将PN532,PL2303HX连接到你的PC上(请遵照商家提供的教程安装),这里我们使用MifareOneTool和MifareClassicTool来完成破解。在我的环境下,可以使用默认密钥FFFFFFFFFFFF
读取校园卡,即std.keys
。
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571029031208.png)
观察读取的数据可知门禁数据很有可能存在于10扇区,接下来我们使用MifareOneTool
来尝试解出该分区的密钥。
解密
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571029309989.png)
如图所示执行,注意,需要运行HardNested
两次以分别取得keyA
和keyB
,如果你和我是同一所大学,keyB
应当为AB2016CD0310
,而keyA
,在每张卡上都应该不同,需要自行解出。
注意,
HardNested
对于CPU的要求很高. 对我而言,Ryzen 2600
满载运行消耗了约200秒以求得密钥,如果你在性能更低的设备上执行此操作,消耗的时间可能更久。
将密钥导入MifareClassicalTool
,这时就会发现,之前无法读取的10扇区已经可读,保存转储文件,我们接下来会用到。
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571030138371.png)
复制
复制MiFareClassicTool
读取的第一行紫色文字
,使用写标签将数据写入CUID白卡
,使用小米运动控制小米手环对CUID白卡
进行模拟(此步骤需要实名)。
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571030509823.png)
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571030832371.png)
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571030903159.png)
模拟成功后,使用MifareClassicTool
将之前保存的转储文件除0扇区以外的所有扇区写入小米手环。
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571031165442.png)
检测
读取小米手环,并与之前保存的转储文件相比较
![file file](https://learningman.top/wp-content/uploads/2019/10/image-1571031409935.png)
关于0扇区的不同,猜测是小米对于0扇区的读写做了限制,但一般情况下门禁并不会校验0扇区
如果你的结果和我的大致一致,恭喜你,你已经成功了!
Bug & ToDo
- 0扇区的不同
- 支付功能无法使用,猜测是因为数据存于CPU区,无法被读取,暂时无解。
致谢
方方方块@coolapk
:他在PM3上完成的操作为我提供了大量灵感。
filthystone@coolapk
:他在PN523上进行的探索有极高的完成度,本文部分内容来自于他在酷安发表的文章
珍惜不离不弃@coolapk
:他向我介绍了MifareOneTool
感谢文中所使用的所有软件和硬件的设计者,开发者。
发表回复