2024-06-19
技术文档
00

目录

ROUND ONE - 手机直接复制
ROUND TWO - 物业刷写手机
ROUND THREE - 手机刷写手环
ROUND FOUR - 通过CUID卡转写
ROUND FIVE - 爆破密钥
Surprise
8扇区1块:
9扇区1块:
校验算法

我们小区的电梯是刷卡使用的,一般物业只会授权给户主那一层和地库的权限,刷在一张小蓝卡片上,偶然一天我发现有人用手机刷了电梯的卡,应该就是用的NFC吧,我也想整一个.

ROUND ONE - 手机直接复制

我是用的小米手机是支持NFC的,我直接打开NFC添加门卡、模拟实体卡……失败!提示此卡为加密卡,只能模拟卡号,无奈之下我就尝试模拟卡号,去刷电梯发现一点反应都没有,此方案失败!

ROUND TWO - 物业刷写手机

小米手机除了提供直接模拟实体卡的方法之外还有一个开空白卡,让物业直接写卡的功能,我立马挑了一个风和日丽的下班天,去了物业写卡,物业也很熟练的写了卡,然后告诉我……失败!说我的卡可以开卡但是不能充值时间,所以会导致我刷不了电梯。虽然物业后面也帮我百度了可能的原因,但是我已经心凉了一半了没听太清楚,此方案失败!

ROUND THREE - 手机刷写手环

通过在B站上看到的一个视频,UP讲的小米手机可以通过向小米手环模拟卡的方式绕过手机对于加密卡的检测,这不巧了么,我正好有一个小米手环7PRO,打开运动健康APP、卡包、添加卡、通过手机模拟,一套流程下来确实开卡成功了,立马拿去电梯试试……失败!电梯毫无反应,此方案失败!

ROUND FOUR - 通过CUID卡转写

看网上的一些帖子说有可能是卡的ID或者厂商码没有被模拟,我就去下了一个MIFARE Classic Tool读标签看了一下手环和电梯卡,发现确实厂商码是不一样的.而帖子里说CUID卡可以模拟厂商码,然后通过复制卡号再写卡可以实现加密卡的复制. 说干就干下单一张CUID卡(也就1.2元还包邮)。

回来照着帖子里的方法,先把电梯卡的0扇区0块的内容写进CUID卡里,然后通过工厂格式化把卡里其他内容清空,再让手机模拟这张卡写给手环,再将加密内容直接写入手环。一套流程下来,拿去电梯试试……还是失败!地图还是没有反应,此方案失败!

ROUND FIVE - 爆破密钥

通过MIFARE Classic Tool读取手环的数据和电梯卡的数据比较后发现,电梯卡在8-15扇区的3块中密钥A是“------------”,而我在写手环的时候用的是0-7扇区的密钥A“FFFFFFFFFFFF”,这样看我的电梯卡应该是一张半加密卡,我并没有给电梯卡完成解密,所以写进去的数据也是有问题的。

好的知道问题在哪里就可以开干了,从网上下了一个NFC Tool,他的在线破解是要收费的,但是可以本地使用联机密钥进行破解,又从github上找了一个NFC的密钥字典,放进去跑了五分钟就爆破成功了,由此可见我们小区的电梯密钥是有多么弱,竟然是“123456123456”,汗颜……

通过正确的密钥再将电梯卡的数据写入手环中,测试一下,成功!电梯正常响应!对于手机的话,我又正好有另一台支持NFC的手机,用另一台手机重复我刚对手环的操作,这样手机也就写入了加密的电梯卡。

Surprise

通过复制的历程,我学习了很多新的知识,很多帖子的人都是在破解卡片,实现刷卡自由,我也就想着试试破解吧,这样还可以上楼顶晒被子,嘿嘿。

正好我手头有三张电梯卡,一张A可以到-1、9、29,一张B可以到-1、9,另一张C也可以到-1、9

然后我将三张卡的数据都读出来进行对比,发现他们除了0扇区0块的卡号和校验码有区别之外,在8扇区1块,9扇区1块也有区别。

8扇区1块:

A:3CCF 11F1 7001 FFFF

B:3CCF 1206 7701 FFFF

C:3CCF 1440 7701 FFFF

9扇区1块:

A:8040 0004 0014 1419 031B 0001 0000 00E6

B:8040 0000 0014 1419 0108 0001 0000 0064

C:8040 0000 0014 1419 0502 0001 0000 0064

对比分析一下BC,他们在9扇区1块的第2节和第8节与A不同,所以应该是与楼层相关,排除楼层因素剩下他们三个都不同的应该就是时间因素了。

其中8扇区1块的第2节,11F1的十进制为4593,1206为4614,1440为5184,A、B卡为几乎同时办理,C卡为一年后办理,正好和我办理这三张卡的时间间隔成正比,姑且猜测他们为发卡的顺序编号。

其中9扇区1块的4-5节将其每两个十六进制字符转为10进制字符即可转为时间,如A1419 031B就可以这样转换:

14->20

19->25

03->03

1B->27

就是1419 031B代表着2025年03月27日,应该就是物业所说的充值时间,或者说是到期的时间。 同理另外两张卡分别为1419 0108代表着2025年01月08日,1419 0502代表着2025年05月02日到期。

那么就剩下9扇区1块的第2节和第8节了。

我们将9扇区1块的1-2节转为二进制可以得到:

A:1000 0000 0100 0000|0000 0000 0000 0100

B:1000 0000 0100 0000|0000 0000 0000 0000

C:1000 0000 0100 0000|0000 0000 0000 0000

明眼人一眼就可以看出来这不就是电梯楼层的权限么,从左到右是从-1到31,A卡的区别就在29楼从0变成1了,那么如果这就是楼层相关的内容了,9扇区1块的第8节又是干什么的,为什么会不一样呢?从0扇区0块的校验码和网络上一个哥们修改洗衣卡的帖子中我进一步猜测,这节也是校验码。是对楼层数据的校验码,防止有人修改楼层权限,通过校验码来阻止这种行为。

那么问题就变成这个校验码是怎么生成的了。

校验算法

观察AB的差别在于9扇区1块的1-2节转为二进制后第30位由0变为1了,而将9扇区1块最后一节转为二进制:

0000 0000 1110 0110

0000 0000 0110 0100

发现,验证码发生了两位变化,由此猜测应该是两位分别生成了一次校验码再拼接起来的,那么校验码应该是9扇区1块最后一节的后两位,接下来就是如何通过0100生成11100110,同样还可以使0000生成01100100.

通过观察发现,9扇区1块的1-2节是楼层控制,4-5节是时间控制,那第3节0000 0000 0001 0100就很可疑了,有可能就和验证算法相关了,通过观察发现:

对于A:

0100 AND 0001 << AND 0100 = 1110

0100 AND 0001 >> AND 0100 = 0110

对于B:

0000 AND 0001 << AND 0100 = 0110

0000 AND 0001 >> AND 0100 = 0100

由此猜测验证算法应该如上。

本文作者:Yaki

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!