RFID 安全之某学校水卡破解
本文只作技术研究之用,请勿用于非法用途,否则后果自负。
如今网络上能找到 RFID 安全类的信息非常的少,原因我就不说了,大家也明白。大家如果要研究 RFID 安全可以去 RadioWar或者 Freebuf多看看相关的文章,我在后面也会放出一些相关的资料供大家下载研究,资料大多数是外语资料,所以说外语一定要学好!
用 NFC 手机上安装的 MCT(Mifare Classic Tool) 查看,水卡的确是 Mifare Classic 1k 类型的。
此次破解用到的工具有:电脑一台,ACR122U-A9 港版一台,带 NFC 功能的手机一台,水卡一张。
在进行破解工作之前,我们要为电脑搭建相应的环境,大家需要在电脑上安装 .NET Farmwork 4 以及 Java,请自行上网下载安装,后面用到的软件依赖这两个运行库。
安装完运行库之后就需要安装 ACR122U 的驱动了(驱动下载(百度云) ,SDK 下载(百度云) ),为了方便后续的开发,我将 SDK 也一并安装。
安装完驱动和 SDK 之后,把 ACR122U 连接电脑,设备就能正常工作了。把我们的水卡放上去,ACR122U 的蜂鸣器就会响并且 LED 的颜色也会改变。
在此之前我已经尝试过用 MCT 自带的常见的密钥去访问水卡,发现有部分扇区使用的不是默认密钥,被加密了,对于这种不是所有扇区加密的卡,我们可以采用验证漏洞把其他扇区密码破解出来。
验证漏洞可利用的程序是 mfoc,mfoc 在 Windows 上的版本叫 mfocgui,但 mfocgui 对于刚刚接触 RFID 安全的同学来说有点麻烦,所以这次直接采用M1 卡服务程序(其实就是简化版的mfocgui)(内容涉及违法,已经按相关部门的规定撤下)。
打开之后,程序界面非常简洁,只有一个按钮,就是开始破解。在读卡器列表那我已经见到我的 ACR122U 了,所以直接按开始破解就可以。然后接下来就等待程序自己破解密钥。
不用很久,就看到所有扇区都被打勾了,破解成功了。
破解成功后根目录就生成了这张卡的 dump 文件了,大小是 1 Kb,整张卡就被读取出来了。
但 mfoc 原本是运行在 Linux 环境下的,移植到 Windows 下的 mfocgui 生成的 Dump 文件是并不能直接使用的,还需要一个修复工具 fixdump(下载fixdump),将 1 kb 的 Dump文件修复成 4 Kb 的 Dump 文件才行。
fixdump 是命令行操作,并且必须安装了 .NET Farmwork 4 运行库才可以使用,为了方便命令操作,我们将 Dump 文件拷贝到fixdump 的目录里,打开 cmd 进行修复。命令很简单,直接 fixdump file.dump
就可以,生成的文件会直接覆盖源文件。
修复完成后,用 UltraEdit 或者 WinHex 之类的十六进制编辑器打开,就可以看到 Dump 文件的数据了。
看到上图我用方框框着的数据了吗?这就是卡扇区的控制段,其中前 6 字节和后 6 字节的 FFFFFFFFFFFF 就是这个扇区的密码,中间的 FF078069 就是控制位,还不清楚 M1 卡的结构的可以去看看这篇介绍 M1 卡结构 文章。
知道密码之后,我将密码导入 MCT 中,开始读取卡片的数据了。紧接着就可以开始改写,具体可以看一下 S50 卡的官方文档。
Content Hidden.You Need To Login.
将数据写入到卡里,现在就是去机器实践的时候了。
破解大完满结束,总耗时 5 小时。
如果有什么问题欢迎留言或者邮件咨询和交流。
解决方案:
将卡片全部更换成 CPU 卡,CPU 卡可以模拟 M1 卡结构,完全代替 M1 卡,安全性也比逻辑加密的 M1 卡更安全。
采用一卡一密系统,一卡一密可以免去升级硬件的麻烦,最大程度保护 IC 卡系统。
采用滚动码系统,增加效验,加大破解成本。
我今天试了一下我的饭卡,破译出来后发现就扇区2有数据,如下
+Sector: 2 此时卡上余额180.30元
00000DA655A400000000000000000000
00466E090306000000001CDE00000000 00466E 十六进制转十进制为18030 090306?
00000055000000000000000000000000
------------FF078069FFFFFFFFFFFF
+Sector: 2 此时卡上余额179.30元
00000DA655A400000000000000000000
00460AA50506000000001CDE00000000 00460A 十六进制转十进制为17930 A50506?
00000055000000000000000000000000
------------FF078069FFFFFFFFFFFF
按照教程里面的方法怎么也算不出 090306、 A50506跟余额之间的关系,而且那个《M1卡结构》文章也打不开,你能给我解答一下吗?
搞定没有啊?
文章并没有问题,而且不是所有的卡都用同一种算法,我的方法不一定适用于你的卡,所以你要自己去发现,你的结构一看就是自定义的算法,多去收集数据,然后分析其中关系即可
没有- -
孩子你过来,我保证不打死你( ̄. ̄)
大神,我读卡的时候,他的扇区没有,怎么办?
你确定你有卡的密码了吗?
大神,那个IC卡的密码和UID之间有什么关系?我用学校的卡和原来的密码,这样修改数据之后能用,可是我改写密码之后就不能用了,是不是密码和UID之间有关系?
一卡一密的就每一个UID对应一个密码
那他们的关系是什么样子的?
如果没有NFC手机怎么办?
用PC端的读卡设备
没有读卡器 手机可以读卡吗?
非专业人士 不懂这个。。。
求指教
你知道卡的密码,并且手机支持NFC就有可能读卡
刚刚拿到的水卡 不知道密码。。。
不行,必须知道密码,没有密码就得用读卡器破解
我也是使用Chrome呢,没有问题,前端使用HTML5和CSS3,对浏览器要求略高
大概明白了,感谢回复我的白痴问题,我回头问问电子的同学 去实验室借个读卡器。
最后给作者反馈一个问题,我用谷歌浏览器打开这个网页存在排版的问题,非常不美观,网页有些拉伸变形,不知道是不是我浏览器的原因。
不行,除非你能把算法编译到Android上去,必须使用读卡器
请问作者有没有相关的文章或者攻略推荐阅读的,专业论文看不懂,我学遥感的对电子完全一窍不通。。。
今天拿到热水卡,手机是小米3支持NFC,仅凭这个能不能破解水卡?
有这可能,毕竟漏洞的论文把方法给出来了,芯片和CPU的效率是个主要问题
或者说 手机支持NFC 可不可以把手机当作读卡器使用?
首先感谢作者的耐心回复。
手机有没有可能算出密码呢?
请问没有读卡器怎么办?求电邮回复
没有读卡器是不可能进行读卡的
对于一些无驱的读卡器,怎么用mfocGUI。
只要能识别出来基本没有问题,因为一般都是基于PN532方案的
我用地是明华的M&W读卡器,软件识别不了,我们公司以前用的饭卡系统的公司不做了,现在买了一些白卡,可是原来的卡第一扇区加密了。现在mfocGUI里面找不到明华的M&W读卡器,请大神支招!!
基于PN532的读卡器实测均能使用,请多尝试几个版本试试,有问题可以再联系。
大神能不能留个QQ号。
适用于ACR122U的MCT可不可以发我一份?我实在是没研究过安卓……不懂怎么让MCT使用ACR122U……手机是mi2s,和你差不多,官网安卓驱动和开发文档我试过也帮不到我……
Android直接引用ACR122U读卡只有一个demo,而且MCT哪个都一样,你能解决接口并挂载读卡器就可以用的了。直接Android接ACR122U不现实不方便
用M1卡服务程序破解了一般 下面提示 链接NFC读卡器失败 这是什么原因呢?
一般这样提示就代表读卡器与卡的链接被中断,先检查下USB口是否正常,其次检查卡和读卡器
我测试了几张卡 包括小区门禁 公司门禁 新买的空白卡 只有1种卡出现了这种问题 测试了两张这种卡 都不行
那就很可能不是M1卡,用libnfc测试判断下
博主,你好!
如果只用ACR122U,不用NFC手机,能否实现修改水卡的功能呢?
可以
用fixdump修复dump不过是在文件后面补零。这里用M1卡服务程序出来的dump根本不用修复。不信您可以自己测试。
是的,但写入必须要求4k格式,非4k要先转换成4k才可以写入
博主是否必须xp系统才完全兼容软件??
Windows7也可以,不过学校机器是XP所以我只有XP做实践
我用的wind xp。。。。
你看看大小是不是1k就是了,完整的应该是4k
明白了。嘿嘿。
不知道为什么这不进数据去。需要什么软件?还有就是那个dump文件不用修复也能打开。还看的到我的名字。。为什么?
Liunx下Dump出来的文件不需要修复
那个手机上的驱动能不能发我?还有2天学考了,没心情写了。。哭。。。
Google Play和ACR官网都有,自己download
acr122u怎么样才能在安卓手机上用?需要驱动吗?这几天一直都没有思路。
有提供驱动,看官方文档自己开发就可以,接口都给出来了
给个连接吧,大神,小弟不是学计算机的,学医的整这个伤不起啊
额,这个没有具体资料的,一种算法思想来的
请问。MFOC GUI可以在哪里下载?能能发给我么?谢谢。
我明天发给你,邮件已收到
O(∩_∩)O谢谢
我就差最后一步了,用MCT写入数据之后,为什么原来高亮的黄色的数据变成了白色,而且写入卡之后也不能用?用MCT写入数据的方法有什么需要注意的吗?大神
高亮消失表示结构已经不符合语法结构,请仔细检查
第12块: 00 23 5A FF DC A5 00 05 78 06 18 00 00 38 01 D1
第13块: 00 25 3B 58 00 00 00 CF C4 D3 A2 C4 C8 20 20 8C
第14块: 00 00 10 00 00 16 09 30 06 18 12 20 02 00 00 B1
第15块: 00 00 00 00 00 00 FF 07 80 69 43 05 21 19 87 09
我修改了12块中的23 5A,这个值是金额,然后去刷卡,没有问题,但是我发现,12块里面的值不动,修改第14块值中的日期,06 18 12 20 02 00 ,比如06改成05,就发现不能刷卡了,会报错。这是何解?是不是刷卡机每次都会对时间进行一次校对?
不好意思哦,我没有时间帮大家计算,大家尽可能自己多费点心思吧
请详细解释一下文章最后一段数值转换之间的含义,刚接触没有弄懂。
比如如下数据
读第3扇区
第12块: 00 23 5A FF DC A5 00 05 78 06 18 00 00 38 01 D1
第13块: 00 25 3B 58 00 00 00 CF C4 D3 A2 C4 C8 20 20 8C
第14块: 00 00 10 00 00 16 09 30 06 18 12 20 02 00 00 B1
第15块: 00 00 00 00 00 00 FF 07 80 69 43 05 21 19 87 09
能再解释一下这些块值代表的含义吗,15块这个 是密码我弄懂了,谢谢
你可以把M1卡官方文档下载看,里面很详细的介绍有
请问博主,卡里面的块值有没有可能某些数值是代表中文字符呢
值域是只能代表数字。其他非值域就可以