谈谈 Mifare Classic 破解

2008 年的时候,荷兰恩智浦(NXP)公司开发的 RFID 产品 Mifare Classic 就被破解了,黑历史在这里就不在具体说了,想详细了解可以自己 Google 百度。现在还是重点说说关于 Mifare Classic 破解的内容。

Mifare Classic 提供 1 Kb - 4Kb 的容量,现在国内采用的多数是 Mifare Classic 1k(S50)[后面简称 M1 卡],而我以后的测试也大多是基于 M1 卡开展。

大家要先了解 M1 卡的结构,这能够为后期的破解做铺垫。

M1 卡有从 0 到 15 共 16 个扇区,每个扇区配备了从 0 到 3 共 4 个段,每个段可以保存 16 字节的内容,为什么这里要强调从 0 开始呢?这跟 C 语言里面数组下标默认从 0 开始是差不多的,好计算地址偏移,我们不必太过在意,只是要记住是从 0 开始,写入数据的时候不要写错地方就可以了。每个扇区的第 4 个段(也就是 3 段)是用来保存 KeyA,KeyB 和控制位的,因为 M1 卡允许每个扇区有一对独立的密码保护,这样能够更加灵活的控制数据的操作,控制位就是这个扇区各种详细权限计算出来的结果。

每张 M1 卡都有一个全球唯一的 UID 号,这个 UID 号保存在卡的第一个扇区(0 扇区)的第一段(0 段),也称为厂商段,其中前 4 个字节是卡的 UID,第 5 个字节是卡 UID 的校验位,剩下的是厂商数据。并且这个段在出厂之前就会被设置了写入保护,只能读取不能修改,当然也有例外,有种叫 UID 卡的特殊卡,UID 是没有设置保护的,其实就是厂家不按规范生产的卡,M1 卡出厂是要求要锁死 UID 的。下图很清晰的列出了 M1 卡的结构。

更多的 M1 卡结构可以下载这两个 PDF 仔细阅读。

高频 IC 卡指南

飞利浦官方 M1 卡文档

看完上面的文档我相信你对 M1 卡也有了一定的了解,现在就来简单谈谈 M1 卡的各种破解方法,后面会陆续发布相对应的实际案例。

  1. 暴力破解

暴力破解是破解工作永远的话题,只要你拥有庞大的计算资源,管你什么密码都能破解。而且,在 CRYPTO1 算法的细节没有被泄露之前,最有效的方法就是暴破了。还有一个很重要的原因就是,M1 卡是被动卡,需要读卡器为它提供能量,一旦读卡器切断了电源,卡中的临时数据就会丢失,这样就没有办法记录下攻击者究竟输错了多少次密码,卡永远不会因为密码输入错误太多而被锁定,只要攻击者有时间慢慢跟它耗,密码肯定会出来的。

这里列举一些常见的 M1 卡密钥

FFFFFFFFFFFF
A0A1A2A3A4A5
D3F7D3F7D3F7
000000000000
A0B0C0D0E0F0
A1B1C1D1E1F1
B0B1B2B3B4B5
4D3A99C351DD
1A982C7E459A
AABBCCDDEEFF
B5FF67CBA951
714C5C886E97
587EE5F9350F
A0478CC39091
533CB6C723F6
24020000DBFD
000012ED12ED
8FD0A4F256E9
EE9BD361B01B
  1. 重放攻击

重放攻击是基于 M1 卡的 PRNG 算法漏洞实现的,当卡接近读卡器获得能量的时候,就会开始生成随机数序列,但这有一个问题,因为卡是被动式卡,本身自己不带电源,所以断电后数据没办法保存,这时基于 LSRF 的 PRNG 算法缺陷就出来了,每次断电后再重新接入电,卡就会生成一摸一样的随机数序列,所以我们就有可能把这个序列计算出来,所以只有我们控制好时间,就能够知道在获得能量后的某一刻时间的随机数是多少,然后进行重放攻击,就有可能篡改正常的数据。如果卡的所有权在我们手上的时候,我们甚至不需要浪费太多的时间就可以实现。

  1. 克隆卡片

这是一个很简单也很实用的方法,因为M1卡自带扇区可以保存数据,所以大部分的卡片会选择加密扇区后将数据保存在里面,所以我们完全可以克隆一张带有一样数据的克隆卡。这就会用到一种叫 UID 卡的特殊 M1 模拟卡,前面说到每张 M1 卡在 0 扇区第 1 段都会有一个全球唯一的 UID 编号,而且这个块在出厂之后是被厂商设定保护无法修改的,UID 卡就是没有设定 0 扇区保护的卡,所以你可以随意的修改你想要的 UID,这样我们就可以克隆出一张连 UID 都相同的卡片了。

  1. 密钥流窃听

利用神器 Proxmark 3 可以嗅探到全部扇区都加密的 M1 卡,在卡和已经授权的读卡器交换数据的时候进行窃听,就能把 tag 数据读取出来,利用 XOR 算 Key 工具就可以把扇区的密钥计算出来,这也是 PRNG 算法的漏洞所导致的。

  1. 验证漏洞

验证漏洞是目前使用最多的M1破解手段,在读卡器尝试去读取一个扇区时,卡会首先发一个随机数给读卡器,读卡器接到随机数之后利用自身的算法加密这个随机数再反馈回给卡,卡再用自己的算法计算一次,发现结果一致的话就认为读卡器是授权了的,然后就用开始自己的算法加密会话并跟读卡器进行传送数据。这时候问题就来了,当我们再次尝试去访问另一个扇区,卡片又会重复刚才那几个步骤,但此时卡跟读卡器之间的数据交换已经是被算法加密了的,而这个算法又是由扇区的密钥决定的,所以密钥就被泄露出来了。因此验证漏洞要求我们至少知道一个扇区的密钥,但目前大部分的扇区都没有全部加密,所以很容易就会被破解。

破解 M1 卡当然不仅仅只有这几种方法,但对于我们来说已经足够了,目前国内 80% 的 IC 卡都是 M1 卡,例如门禁卡,饭卡,智能电卡之类的。

这里再提供两篇 Radboud 大学关于破解 Mifare 的论文,大家可以研究下,的确是受益匪浅。

The Mifare Hack

Dismantling MIFARE Classic

Tags: 破解, 安全, RFID, 极客, Mifare, M1, S50, 密钥, 黑客

55 Comments

  1. WYMBF WYMBF

    博主可以留个联系方式吗比如说qq

  2. xx xx

    直接用pn532模块连接电脑可否使用M1卡服务程序以及mofc等软件?博主能发一份软件包给我吗?谢谢

  3. 男孩 男孩

    楼主你好,如果M1 卡是全加密的 那么用ACR122 还能不能破解呢,网上关于全加密这方面说的较少

  4. 老司机带带我 老司机带带我

    除了1扇区全是0
    BD2426F9460804006263646566676869
    00000000000000000000000000000000
    00000000000000000000000000000000
    000000000000FF078069000000000000
    2扇区开始
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    000000000000FF078069000000000000

    这是什么鬼

  5. 方亮 方亮

    楼主能不能发个密码包给我,########@qq.com

  6. no sector encrypted with the default key has been found, exiting” 全加密卡ACR122U是不是不能破解 只能用PM3?

  7. 小明 小明

    用MFOC破解时显示 no sector encrypted with the default key has been found, exiting”全加密卡ACR122U是不是不能破解 只能用PM3?

  8. wall wall

    请问那些自行车卡公交卡什么的是这种卡吗?是不是有带NFC的手机就能知道是什么卡了?

  9. Browser: IceWeasel 31.5.0 IceWeasel 31.5.0 Operating System: GNU/Linux GNU/Linux
    mfoc -k -0 black.mfd ==> 得到白卡的数据,作为key
    mfoc -k -0 water.mfd ==> 得到水卡的数据
    将water.mfd 修改金额 得到water2.mfd
    最后进行写入 nfc-mfclassic r A water2.mfd black.mfd
    请问这样对吗????
    ---------同问
    还有我将一张白卡写入了数据后,是不是那张白卡就不能再修改了(也就是说废了)???
    求教

  10. momo momo

    mfoc -k -0 black.mfd ==> 得到白卡的数据,作为key
    mfoc -k -0 water.mfd ==> 得到水卡的数据
    将water.mfd 修改金额 得到water2.mfd
    最后进行写入 nfc-mfclassic r A water2.mfd black.mfd
    请问这样对吗????

    还有我将一张白卡写入了数据后,是不是那张白卡就不能再修改了(也就是说废了)???
    求教

  11. kli kli

    请问,现在破解4k的卡和1k的是否是一个道理?或者说有很大不同?

    1. 一样,只是容量不同

  12. xyzealot xyzealot

    hi.我想问下我们学校的卡是联接一张银行卡的。据我所知只有在卡里少于20以下才会在每天的傍晚往从银行卡里自动充值100到卡里.这样的情况我如果复制了一张卡会影响关联银行卡的原卡的数据吗?还是说这张新卡是跟银行卡无关联的,我可以重复将原卡的数据复制到新的卡内?

    1. 这说明卡片是联网的,与银行卡倒是无关,就是钱存服务器上,然后检测到少就是充值而已,但是修改原卡数据肯定被发现

  13. 陈浩 陈浩

    我想买你的密钥可以吗?

  14. […] 首先了解M1卡的结构:请参考http://bobylive.com/static/1491 […]

  15. cqwww cqwww

    能不能分享一下你用的m1卡密钥文件

    1. 密钥不共享哦不好意思

  16. sakick sakick

    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    B5FF67CBA95100000000B5FF67CBA951
    一排的这样是什么意思?

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

  18. Nick Nick

    hi,我用RFID RadioEye 破解的时候显示"no sector encrypted with the default key has been found, exiting"
    是说用的都不是默认key吗?那我该怎么办.谢谢!

    1. 是的,全加密卡需要用专用设备破解,你可以给我邮寄卡有偿破解。

      1. qq59282231 qq59282231

        我的卡也是这样,破解的时候显示"no sector encrypted with the default key has been found, exiting"
        请给联系方法

        1. douniwan douniwan

          无需其他设备 全加密用mfcuk就行了

  19. KWOK KWOK

    学校现在换了新的饭卡,这种饭卡我判断是不联网,而且他们也不会去记录的(因为这些卡,我们去充钱,去老板那里,老板在机器上刷一下管理卡,然后就可以给其他卡加钱,输入20就加20,然后我们可以去其他窗口买饭,这些机器只能减钱,当卡里剩5元你又消费5元,也就是卡里没有钱了,卡被收回。然后再去充钱时随机给你一张卡充钱)。我就想,能不能我充50之后把卡里的数据保存下来,然后等卡里的钱不多的时候把数据再写进去?求回复

    1. 可以,这种叫重放攻击,直接复制是最简单的破解,不联网就可以,不排除机器有日志功能,请注意

    2. KWOK KWOK

      对了,餐厅的几台机器没有连接,全部都是只接一个电源线,也就是说,数据全部在卡里。所有的加钱减钱都是对卡数据直接操作

  20. tiffany007 tiffany007

    新手一枚,请教一个问题。
    最近用复制uid卡的方式克隆了小区的电梯卡,不过每次刷过后,uid中的一串数据会变动,而且用同一张原始卡复制的三张卡,只有其中一张可以使用,请问这是什么情况?怎么才能解决?期待大神回复~~

    1. UID会改变只有UID卡可以实现,这样很可能会是电梯里有动态算法或者是ID,IC一体卡

      1. tiffany007 tiffany007

        你好,我又发现如果拿原始卡复制后多张卡后,原始卡会不好使,被复制的卡里只有一张好使,请问这是你所说的有动态算法么?如果是这样的话,还可以破解么?

        1. 应该是可以的,但是具体情况还是要具体分析才能判断

Write a new comment