M Tools:移动端rfid校验计算工具 – 作者:devil0x

初学 RFID

1. 前情提要

Mifare Classic card 提供 1k-4k 的容量,我们经常见到的是 Mifare Classic 1k(S50),也就是所谓的 M1 卡。M1 卡有从 0 到 15 共 16 个扇区,每个扇区配备了从 0 到 3 共块个段,每个段分为 b0 到 b15 共 16 个区块,并且可以保存 16 字节的内容。

每个扇区的第 4 段呢是用来保存 KeyA,KeyB 和控制位的,每张卡的 0 扇区还有一个唯一标识的 UID 号。

2.破解原理

这种卡类的攻击方式大概分为这么几种:

1)暴力破解

爆破对于 M1 卡的破解来说比较有效,因为 M1 卡是被动卡,需要读卡器来供能,切断供能后卡的临时数据就丢失了,也就是说不会存在输入过多错误密码后造成的锁死之类的情况

FFFFFFFFFFFF、A0B0C0D0E0F0 等等都是 M1 白卡的默认密码,所以当我们使用 acr122u 的配套软件 M1 卡服务程序这样的工具来爆破的时候基本上都是用这些默认密码来填充剩余扇区的密码。

2)克隆卡片(卡复制)

M1 卡的扇区可以保存数据,所以大部分的卡片会选择加密扇区后保存数据,我们可以用 uid 卡来进行复制,每张 M1 卡在 0 扇区第 1 段都有一个唯一标识,而且是保护无法修改的,uid 卡就是没有设定 0 扇区保护的卡,所以你可以随意的修改你想要的 uid,这样我们就可以克隆出一张连 uid 都相同的卡片了。

3)嗅探攻击

在卡和机器数据交换的时候嗅探数据,并计算出校验即可。后期可在安卓端用 app:M Tools 进行数据的嗅探。

已经有很多篇文章讲过了原理部分,直接讲一下阶段

3. 所需工具:

硬件: ACR122u(最常见的 rfid 设备,本质就是 pn532,但是有个足够强的上位机,比 pn532 容易上手。没买 pm3 是因为感觉贵,没啥必要。。。)

软件:m1 卡程序,fixdump,sublime Text3,UID 写卡程序

以及安卓端:mifare classical tools, M Tools(神器)

mifare classical tools 是一款让人又爱又恨的软件,但是远远不如 M Tools 强大得多。。。 

4 . 实际操作:

1. 首先把 acr122u 的驱动叽里呱啦的安装好。

2. 把水卡放置道读卡上,正确识别之后灯会变为黄色。

3. 打开 m1 服务软件,正确识别机器之后,点击开始破解。

破解完成当即获得一个 1kb dump 文件,现在可以直接拖进 sublime text3,即可看出扇区密钥。

为了容易看出金额差别,用手机端 app:mifare 打开 m1 卡, 

会发现没有 3 号 4 号扇区的 key,

用 sublime 打开 dumpfile1.dump

每个扇区的第 4 块区域,前半部为 keyA 后半为 keyB

直接导入 mifare 工具,手机端图形界面好观察一些。

直接可以看到改扇区的信息了。先把现在的这份数据保存一下,然后再去机器那里刷一下机器,然后就可以看出数据变化位了,后就可以确定数据位和校验位了。

随即就发现了一些端倪。这几个数值出现了变化,

E4 12 DC 90

E8 12 DB 93

把前两部分导进进制转换器

刚好是金额位,那么剩下的就是。。。。校验位。

这都 8102 年了,之前经常逛酷安,知道一款神器,M Tools

这是一款酷安基佬开发的 app,最神奇的是作者录制了视频教程,但是地址确是在油管,并附有中式英语进行讲解。现在还有一款 app 是 M Keys 也是该作者的作品,这两款 app 现在也都支持外置 ACR122U 了,so 没有 nfc 的手机也可以外置进行操作。

这个 app 也需要提前把密钥导进去,然后就可以对扇区数据进行操作

这货可以预置常用的算法,什么十六进制倒序,倍数转换啊,直接一点即可。

然后就找到之前发现的金额位数据,直接就可以转换成 47.40,然后下一不是选择校验位的算法,but 真的看不出有何端倪,直接先跳过了。然后来到这个 app 的核心功能,嗅探校验位算法。于是,在刷卡机器旁边,冲冲放放这样来了十几个来回,嗅探到了一下数据。

目前已知的校验位计算方法有这么几种: 

反正就是加减乘除,异或取反,各种操作挨个试。看了好久没看出来,就去翻着去看了几篇教程,发现了一些端倪。

但就是这个 b12 部分一直啥都看不出来,真的是毫无规律可循。但其他部分应该还是很好知道规律的

such as:第 2 块与第 1 块做对比,金额位 b0 差-4,b1 没有差别,b12 差+1, b15 差-3,刚好钱差 0.04

同理第 3 与第 4 块的做对比,金额位 b0 差-8,b1 没有差别,b12 差+1, b15 差-7,刚好钱差 0.08

那么可知,凑一下:

 b0 + b1 + b12-b15 = 某定值
(-4)+(0) +(+1)-(-3)

的话总值是没有变化的没有变化。

把这些数换到 10 进制计算出这个某定值为:

88(hex)+12(hex)+8(hex)-60(hex) = 66(十进制)

所以 b15 的公式就是:b15=b0+b1+b12-66

把公式填进 M Tools,直接成功完成验证:

但是这个 b12 什么鬼,什么规律都没有。。。。。。。。

但后来经过自己观察,这个可能是随机的,从图上可知每刷一次都递增一下,从 00 开始,such as:08.09.0A。。。。。。

5. 修改数据:

到了修改数据的地方,这都 8102 年了,提供一个更快的思路,直接用 M Tools。再充值的地方,长按有个定额的选项,直接填入即可。

然后就修改成功了,改个奇数位试试,

终语

这算是遇到一个贼拉简单的校验,甚至连异或检验都没有。经过多次的计算校验,感觉计算校验就一条总结:羊毛出在羊身上。

1. 用好 winhex,逆向计算器

2. 最重要的,校验的奥义:羊毛出在羊身上。就是说,校验位在哪里,你可以通过多看几个数据的变化来看出。而校验的产生,总是遵循金额位的变化,校验不管咋变,都是金额位数值通过各种公式组合加计算出来的。

M Tools 的优点在于优秀的 gui 界面方便进行看出校验方式,填入计算公式,直接就可以就行数据修改。

*本文作者:devil0x,转载请注明来自FreeBuf.COM

来源:freebuf.com 2019-02-20 15:00:18 by: devil0x

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论