RFID 安全之某学校饭卡破解

本文只作技术研究之用,请勿用于非法用途,否则后果自负。

继上次水卡的成功破解,对学校的饭卡也有点想要研究的念头了。既然这样,打铁趁热马上开始动手,先拿出 MCT 测试一下卡类型和扇区情况先。(不了解相关工具和术语的去看看之前的水卡破解案例以及M1 卡结构和破解探究

0 扇区并没加密,所以还是可以用跟水卡破解一样的手法,M1 卡的验证漏洞,具体过程就不再阐述了,可以去翻看一下之前写过的,破解出密钥之后就重点来分析下算法。其实这跟软件破解是一样原理,我们需要的不是破解密钥的方法,而是从根源上将算法破解,破解密钥简单几步没任何电脑基础的都能完成,正如学编程不是学语法而是不断提高自己的程序思维,这样我们才能学到东西。

在我破解了密钥之后,我直接将 Key 导入了 MCT 中,直接用 MCT 读取,比起用十六进制编辑器,我倒很喜欢有 M1 卡特有结构高亮功能的 MCT,毕竟是专门用于 Mifare 卡的工具,卡中数据十分直观。仔细看看,1、2、10 扇区存在数据,想要数据分析必须有多组数据,找同学借了几张卡来做对照。一轮对比过后,发现我的卡又是比较奇葩的,所有人的卡都是 1、2 扇区存在数据,只有我的 10 扇区有数据,纳闷啊……

把 10 扇区清空,忙着生命危险跑去小卖部试了试,发现一切正常,好了,我是奇葩……

我消费了几次,拿回来之后发现,都是 2 扇区的扇区数据发生了变化,基本可以确定钱的数据就在 2 扇区,那 1 扇区到底是干嘛的呢?尝试清空 1 扇区,再去小卖部试卡,一切正常。猛然想起,学校旧的热水系统是使用饭卡的,今年更换了新系统之后才换的卡,估计 1 扇区就是旧热水系统的了,机器现在已经不复存在了,果断清空。

重点来看看饭卡的数据,直接用电脑的十六进制编辑器打开 Dump 文件,就发现 2 扇区 0 段有我的名字的存在,这里是使用 GBK 内码保存的汉字,然后我尝试将刚刚在消费机上看到的卡号转成十六进制,在名字前不远的地方就发现了痕迹,那现在尝试下修改姓名和卡号。

Content Hidden.You Need To Login.

抱着赴死的心再去小卖部(小卖部的阿姨已经开始注意我这个鬼鬼祟祟的小子了),在众多掩护之下拍下了这个结果图,成功了。

接下来就到了最振奋人心的修改金额了,经过前面几次消费的分析,我发现 2 扇区除了 0 段和 3 段之外,中间的两段数据都是发生了改变,并且每次都只有其中一行发生改变,这个问题困扰了我将近一天时间,最后在某个时刻茅塞顿开,终于想明白了。卡中的两字节数据变化,泄露了这两行数据的用途。

Content Hidden.You Need To Login.

01BF 和 01BE 不刚刚好相差 1 吗?于是去小卖部多消费了几次,再结合之前充值的几次记录,终于发现,这个值每交易一次就会加 1。这应该就是交易的次数记录了,问同学借了一张刚刚充值过的卡,发现不管是充值还是消费在这里都记录了最近两次的消费记录,并且第一行是记录奇数次的,第二行是记录偶数次的,这也就造成了之前为什么变化的位置不通。知道这个规矩之后后面的工作就简单得多了,每一行肯定是代表了一次消费记录,其他数据干什么用对于我们的分析也不会造成太大的干扰。

Content Hidden.You Need To Login.

将我现在饭卡的余额转换成十六进制,马上就发现了前 8 位就是记录了这次交易后的余额,紧接着的就是这次的交易的金额,再接着就是消费次数,后面还有很长一段数据应该是消费机的编号了(这个会在后续继续破解,目前暂时没有头绪),尝试着将饭卡按这个规律计算了一次,将卡修改成一百多块钱,结果如下图。

Content Hidden.You Need To Login.

一切弄好之后写入到新卡,拿去测试,一切正常,使用非常完好,到此为止饭卡也被全部破解了。改个强悍点的数值看一看。

Content Hidden.You Need To Login.

不过数据修改了也并没什么卵用,只是能看一下,警告一下想要免费蹭饭的人,所有饭卡系统都是联网的,一分钱的数据都会同步到服务器,修改了拿去用了,你就等着警察上门吧。

此次破解总耗时接近 7 天,而且还有一些隐晦数据没有清楚用途,后期继续进行研究。

解决方案:

  1. 更换更安全的 CPU 卡,现在 CPU 卡可以模拟 M1 卡格式,但安全系数比逻辑加密的 M1 安全得多。

  2. 将现有卡片升级到一卡一密,并且保证扇区全加密,一卡一密可以很大程度保护现有的旧 IC 卡系统。

  3. 将系统设置成联网效验,联网效验是目前最安全的一种智能卡操作模式,可以很好的保护该系统。

Tags: 破解, 安全, RFID, 极客, Mifare, M1, S50, 黑客, 饭卡

103 Comments

  1. ggg ggg

    余额
    895.12 1区块:00015DA8 0000014A 0899 16008800 7FEE
    890.12 1区块:00015BB4 0000033E 089A 16008800 F6F7
    879.12 1区块:00015768 0000078A 089B 16008800 1D8E
    864.12 1区块:0001518C 00000D66 089C 16008800 9CD2
    863.62 1区块:0001515A 00000D98 089D 16008800 4225
    859.32 1区块:00014FAC 000001AE 089E 17008800 D756
    826.82 1区块:000142FA 00000E60 08A1 17008800 D60B
    大伙帮忙分析一下上面的数据,第1列是余额,第2列是当天累计消费金额(第2天会重新累计),第3列是每次消费值加1,第4列的16,17应该为消费日期,最后面的两个字节不知道是啥,应该是校验值。我将第1列余额改为9999.99元,即000F423F+后面数据不变,结果刷卡器报警,希望大家帮忙分析下,怎么回事?

  2. 我问一个问题,博主用到了安卓的NFC读卡吗?
    能不能说一下整个过程用到的工具有哪些?多谢

    1. 不一定需要NFC手机,有电脑即可,手机只是方便随时携带随时修改数据而已。具体去看看之前水卡破解的案例 http://bobylive.com/static/1493

  3. lumia lumia

    楼主好厉害!赞一个!有个疑问,如果修改成功了,对账单时,网上数据和卡的数据不同,会不会bei查到啊?如果被查到破解也没有意义了啊

    1. 你可以经常修改卡号,使得数据变乱,因为每天都有人会充值,而且大部分人的卡里都是有余额的,你消费一点点,然后别人充值的时候又会把这部分补上,这点财务上出入就会被当做是系统冗余而忽略。当然如果太大额的话就很难说了哦

  4. 你这拙劣的智商真是为你捉鸡去。首先。卡对刷卡机来说只是一个凭证。也就是保存你的账号密码。当通过了。刷卡机读取远程计算机上面的数据。然后发布扣除你现金的信息到计算机。同时把读取到你的卡的数据的凭证发到远程计算机。计算机再变更你的他数据库的数据。不是改你的饭卡数据。小朋友。秀智商还是要懂得下限的

    1. wx0204 wx0204

      喜欢极客系列文章

    2. wangbadan wangbadan

      晨跑,你说的是ID卡。IC卡比ID卡复杂多了。楼主这么厉害你居然认为他智商低。哎。。。。井底之蛙

    3. 又不是用自己的卡号,而且数据库sa权限都拿到了还不能改啊( ̄. ̄)。而且高智商人士,IC卡跟ID卡的差别就在于空间不同,用IC卡一般就意味着数据离线,服务器辅助对账,但本地加密会做的很好,自己去看看校园一卡通设计理论吧,绝对不能完全依赖网络。我们这卡已经是八年前开始用的了,别把你超现代的目光放到这里

  5. wmxk007 wmxk007

    博主,你的文章被转到freebuf了,快去索要版权
    http://www.freebuf.com/articles/terminal/34146.html

    1. ⊙_⊙鄙而不语

      1. Testing Testing

        楼主真大方!

        1. 😁为什么这样说呢?

  6. 无心问世 无心问世

    请问下博主手机是什么型号,貌似小米3不行

    1. 试试看 试试看

      看了楼主做的事情,我也有点手痒了,我想试试看学校的水卡,因为水卡是不记名的。。。。话说楼主,做这些需要些什么设备和哪方面的知识?

      1. RFID读卡设备:ACR122U(非全加密),Proxmark3(最权威的RFID设备)。知识:RFID理论,算法知识,计算机概论

        1. BBS BBS

          我在radiowar的网店里看到有定制版的Proxmark3出售,貌似要1500+,貌似这部神器很牛B的,太贵了没钱买,准备买一部WiFi Pineapple钓鱼= =

          1. PM3加上天线一套下来2200左右,WIFIPINEAPPLE不错,但其实可以自己做的

    2. 米2A,S3,S4,Note3均测试通过,其他暂时没机器做测试

      1. 倾诉 倾诉

        我的NOTE3不能识别M1卡

        1. 可能个别手机NFC芯片不同导致的

  7. 首曼 首曼

    楼主你好,请问一下,我们学校的饭卡如果丢了再挂失,领到的新卡可以在充饭卡的机器上领回旧卡的余额,这是不是说明卡内只有个人身份的信息,而余额的数据是在学校的主机中?

    1. 不一定,或许跟我破解的这个一样,卡中也有数据,服务器数据用于对账

      1. 首曼 首曼

        那破解了以后给饭卡加钱。和服务器数据对不上,岂不是会被发现

        1. 不太过火就很难发现

          1. crazsy crazsy

            我这儿刷卡机的地方都有摄像头,比较可怕

  8. crazsy crazsy

    你好,我用mfocgui读一张M4卡,过了好几分钟软件崩溃,是我软件没下好?

    1. 4k卡没有测试过哦,mfocgui是1k卡专用

      1. crazsy crazsy

        水卡能顺利修改金额,但不能撸到一张白卡上,是识别UID的?

  9. 树熊丶 树熊丶

    消费记录会有余额么 ,感觉很容易查出来有问题但是没法抓到你的样子啊

    1. 这个肯定有的,但卡的数量太大很难核算

  10. 树熊丶 树熊丶

    如果把卡号改了,卡还能正常使用么?

    1. 可以,卡号不同就代表不同身份的人了

  11. 厉害 厉害

    学校的刷卡机插了网线的,服务器上没记录吗?

  12. xiaoquan xiaoquan

    这种POS机的数据不是直接存在服务器端的吗 POS机结账的时候就会发现不对了

    1. 用IC卡的话钱90%都保存在卡中,服务器是拿来记录消费记录的,伪造卡号就可以造成数据混乱

  13. 陈江民 陈江民

    ...我们学校也坑,帮我破解看看,我会很淡定的...

    1. Kkz Kkz

      我也在尝试

    2. 自己动手丰衣足食哦

  14. xiaopo xiaopo

    楼主对于把技术用于实践做得很到位,我有时间也研究一下,看看行不。嘿嘿

  15. 桦

    哈哈哈,最后的图惊呆了我o_O

    1. →_→淡定

      1. 小龙 小龙

        帅帅的楼主 如果我买一张白卡克隆自己的数据 然后再修改UID 名字和加金额 这样一来是不是可以即使对账也查不出我是谁呢?

Write a new comment