记一次M1卡破解过程——weigr的第一次博文

时间:2017-05-30 13:30:51   收藏:0   阅读:27818

一次偶然原因,在网上看到关于一些Mifare Classic card卡的破解文章,发现成本不是很高,并且门槛也不太高(本人笨得很,没觉得低)觉得很有意思,准备入坑一波。正好我寝室有饭卡、洗澡卡和直饮卡,为啥不试一试呢,嘿嘿.说干就干!

于是乎就在网上各种收集资料,(本人懒得很,不想去图书馆查资料)首先我们得搞懂M1卡的内部结构是吧,不然无从下手啊,所以我们先从结构说起吧.

可能文章有点长,着急的话可以直接跳过前面三个点


1.M1卡的存储内部结构:

M1卡分为16个扇区,每个扇区对应4块(块0-块3),共64块,编号为0-63.第0扇区的第0块用于存放厂商代码,已经固化无法更改。其余区的第0-2块用于存放数据,块3为控制块用于存放密码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字节的具体含义我也不是很清楚(不影响我们破解),所以就不说出来误导大家了。

卡中每个块包含16字节,所以M1卡的容量=16扇区*4块*16字节=1024字节=1k  (M1卡的由来)。


知道了M1卡的大致结构我们就可以开始进行破解了,我在此收集了几种常见的破解手段。

2.M1卡的破解原理: 

1)暴力破解:

暴力破解是最简单粗暴、不需要多少技术含量的,就是比较费时,但这并不妨碍大家对它喜爱之情。因为M1是被动卡,需要读卡器为之供能,一旦读卡器切断电源,卡中临时数据就会丢失,所以无论试错多少次密码都不会被锁定。特别是一些厂商偷懒用弱密码,花不了多少时间就能破解。

2)克隆卡片:

这算是最简单又实用的方法了。因为M1卡加密扇区里面保存着各种数据,所以可以克隆一张带有同样数据的克隆卡。这就会用到一种叫UID卡的特殊M1模拟卡。前面说过,每张卡在0扇区的0块都会存放厂商代码,所以里面也保存了UID编号,是无法修改的。但是这种特殊的UID卡该区域没有设定保护,可以随意修改UID,因此可以制作一张与目标卡数据完全相同的克隆卡。

3)重放攻击:

重放攻击是基于M1卡的PRNG算法漏洞实现的。当读卡器读卡时就会产生随机序列,但卡本身不带电,所以每次断电后在重新连接,就会生成一模一样的序列,所以可能把这个序列算出来。只要控制好时间就能知道当卡获取能量后某一刻时间的随机序列,从而实现修改数据。

4)密钥窃听:

利用工具Promark 3可以嗅探M1卡(即便是全加密卡)在和读卡器进行数据交换时的数据,然后利用XOR工具就能把扇区密钥算出来。然而Promark3对于我来说太贵了(可怜的学生狗wuwu~)。

5)验证漏洞:

当读卡器读卡的扇区时,卡会发一个随机序列给读卡器,读卡器收到序列后会利用自身算法加密该随机序列再反馈给卡,卡片接收后再用自己算法计算,如果结果一致就认为该读卡器是合法授权的,然后开始进行数据传输。这就产生了问题:当读卡器访问另一个扇区时,又会重复上述步骤,而此时卡片与读卡器之间的数据交换已被算法加密过,而这个算法又是由扇区密钥决定,因此就会导致这个密钥泄露。所以只要知道一个扇区的密钥,就能破解卡。(只要不是霉运如我遇到全加密卡 (╥╯^╰╥))



3.M1卡的分析原理:

1)比对法 :

比对法就是将已知数据换算成十六进制,寻找卡片中能与之对应的数据,从而确定卡片中对应存储位置所存储的数据的意义,或卡片中变化的字节转成十进制,判断是否相应的数据信息。最常用的比对值当然是余额,还有当前的消费金额。

2) 试错法:

针对一些不明含义的字节,通过修改已知意义的字节来确定其关联性,找出不明意义字节的计算方法。比对法有时并不能分析出所有数据块的数据,这时就可以考虑试错法来确定隐晦数据和哪些字段有关联。


4.好戏开始:

前面说了那么多废话(求原谅),这哈开始正式破解之旅了。

本着能省则省的学生党原则,我一开始没想用PROMARK3、ACR122来破解(毕竟得上百元啊,心疼)。于是在网上找半天破解软件,发现 MIFARE经典工具 还不错(操作界面如下)

技术分享

于是急忙下载安装到手机上(PS:要求你手机有NFC哦),当时我就觉得破解没什么难的啊。安装完成后迫不及待地拿着洗澡卡就打算进行破解,实际操作才发现根本不是那样的啊,除了读出来个UID其余什么都么有,自带的字典根本没有好大用处。就算你有好的字典,手机跑起来也很慢,所以被逼无奈,只好向ACR122大佬低头,狠下心买了它(贼气,某宝上有卖的,我买成170,附带破解软件。POR3对于我是天价更买不起)。下面的就是它了

技术分享


——杀器在手,天下我有。

照着卖家的教程,安装好送的驱动(网上也有很多可以下载,但我觉得卖家的靠谱些),在电脑上连接好宝贝,检测无误可以使用(贼激动)。真是万事俱备,不欠东风。反手拿起我的洗澡卡就放在了宝贝上,然后打开卖家送的破解软件,就是下面这个东东:

技术分享

结果很玄幻!破解失败!(欲哭无泪——!我要你这机器有何用) 我当时一脸懵逼,毫无办法,只好向店家求助,结果店家给我了一个加强版破解软件再让我试一试(wc为啥不早些拿出!)。但实话实说在那一瞬间我感受到了很大的希望,想来肯定没问题。于是又再次尝试,结果还是血崩,还是失败。话说加强版长这样:

技术分享

默认密码破解失败,因此我又把“使用穷举法解卡”选项开启了。当时也比较晚了,于是乎就把电脑开着慢慢破解,然后我就睡觉去了(期待成功)。结果二天我起来一看还在破解(woc一晚上时间都没弄出来,难受),顿时无力感油然而生,真是老话说得好哇—一“一日之计毁于晨”。遂又向卖家求助,心想他肯定还有终极版破解软件没给我,结果答复我可以考虑买个PRO3。我真是¥#@...(有钱我早买了好吧(╥╯^╰╥),不谈钱 我们还是好朋友),至此我是彻底绝望了。

不过我还是不甘心呐,难道一百多就买个废品吗。不行,我还得继续,然后我找来室友的洗澡卡挨着试,结果也是不言而喻的,我被卡完虐。(这卡也太顽强了吧)

怎么办呢。焦头烂额之际,咦..我不是还有直饮水卡吗?(其实我还有饭卡,但饭卡是联网的,就算能破解,你只要敢改,立马就有人来查你水表,当然你能拿下后台另当别论,反正我技术达不到也不敢做。)要不拿来试试,试试就试试。果然天无绝人之路,成功破解了(hah..别提多高兴了)。破解成功之后我想了一下,是不是破解成功就能用呢?万一这个饮水机也是联网的呢,那不是血崩了?于是我反复检查了饮水机四周,发现除了电源线、进水管之外并无其他多余的连线,因此放心了一点,但还是有点怕(我胆小,毕竟不想让大学生活提前结束),然后我又找到饮水机上的生产公司,进入他们官网查询该型号机器,发现是我多虑了,哈哈。至此才完全放心(进入官网时发生了有趣的事,但看这篇幅我也不敢再延伸了)

技术分享

紧接着就是克隆卡片了,为了让更明白地阐述,在此我把完整破解->克隆图示发出来(卖家送的,有点用)

技术分享

技术分享

技术分享

技术分享

至此卡片克隆也完成了(参考上面图示)。但是光克隆岂不是很不给力吗,我们得知道扇区里面的数据代表什么含义啊,余额我们能随意控制才行啊。这里我们就得用到一个M1分析软件(M1卡分析助手)了。复制成功后应该是这样子的:直饮水原卡(以下简称原卡)与直饮水复制卡(以下简称复制卡)的数据应该一致(可以看到这水卡除了0、1、2扇区其余扇区都没有数据),如下图

技术分享

之后我又用复制卡去接了点水,改变了一下余额,再与原卡对比结果:

                                            图1 

技术分享

可以看到1扇区的2、3行数据变了且这两行数据一样,我们有理由相信这与余额相关。然后我用软件分析图中1扇区中第2行数据(D5 19;2A E6),发现D519按位取反刚好等于2AE6,然后再看逆序值(19D5)的十进制为多少(一般余额对应的十六进制数据都是以逆序值存放),巧了,十进制刚好为6613,正好是我水卡的余额66.13元(激动hahah..)。

技术分享

因此我可以认定1扇区的2、3行就是余额的信息。为了验证正确性,我直接将2、3行的D519改为了FFFF最大值,对应的十进制为65535(最后两位是小数,其实是655.35元),然后对应的2AE6改为0000(按位取反),于是我又屁颠屁颠拿去饮水机上刷,结果竟然报错。为什么呢?难道是图1的2扇区红字部分的问题?(除了1扇区就只有2扇区有不同之处了)要是这样就麻烦了,还得破解2扇区数据的意义才行。但是除此之外有没有其他可能呢?我想了一会儿,会不会是数额改得太大了呢?于是乎我将余额65535又改为50000也就是将FFFF改为50C3(50000对应十六进制的逆序值),再拿去刷——成功!哈哈...



5.总结

破解到此基本告一段落,花费了我将近一下午时间(还不算收集资料时间呢,笨笨的我,没得法)至于那些无关紧要的数据信息我会继续研究,以后再更新。


我之所以决定写下整个过程:一是因为我长期在各个论坛“收刮”好的文章、资料,甚有收获,所以这次就轮到我尽一点绵薄之力来帮助其他像我一样的人吧;二是趁着这个机会巩固加深一下自己的理解,也是一举两得吧。


由于我是第一次写博文,上传图片按钮我都找了半天(话说就不能整大些图片按钮咩),中途还突然“闪退”一次,给我吓得遭不住,都写了一半了呢。还好有自动保存功能,不然我真没毅力再写一次了,写博文真是个体力活呢,感觉比破解本身还累多了...


也因为是第一次写这个,肯定有诸多不足,见谅!


6.参考资料:

链接:http://pan.baidu.com/s/1dE0VWnJ 密码:2q4q

链接:http://pan.baidu.com/s/1cmzkIU 密码:ale3



    



本文出自 “weigr的小小博客” 博客,请务必保留此出处http://weigr.blog.51cto.com/11359186/1930522

评论(3
overlooker 2017-10-05 18:27:01
没能穷举出来的原因应该是穷举不全,试试把穷举数改为最大,而不是100000
chun9027 2018-01-07 22:34:42
那二扇区不去管他吗?
chun9027 2018-01-07 22:35:46
你这个好简单可以直接用分析助手来,我看了很多人卡都分析不出来
3
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!