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 小时。

如果有什么问题欢迎留言或者邮件咨询和交流。

解决方案:

  1. 将卡片全部更换成 CPU 卡,CPU 卡可以模拟 M1 卡结构,完全代替 M1 卡,安全性也比逻辑加密的 M1 卡更安全。

  2. 采用一卡一密系统,一卡一密可以免去升级硬件的麻烦,最大程度保护 IC 卡系统。

  3. 采用滚动码系统,增加效验,加大破解成本。

Tags: 破解, RFID, ACR122U, 极客, IC卡, Mifare, M1, S50, 黑客, 水卡, 热水卡

490 Comments

  1. lzz lzz

    0101010006A0A7F1FFFFFFFFFFFFFFFF
    01010100082E27F1FFFFFFFFFFFFFFFF
    010101000B0309F1FFFFFFFFFFFFFFFF
    这几组数都是包含金额的,指点下怎么算可以吗,算的头都大了。。。另外,存金额的扇区3号区后面全是F,前面全是---------------------,没法复制啊,是什么情况。。想把水卡跟饭卡二合一呢。谢谢

    1. lzz lzz

      第三行对应的应该是19.96元,试了好多种都失败了,还望大神指教

      1. lzz lzz

        下午又看了看010101000B0309F1FFFFFFFFFFFFFFFF,0b03代表1696,前面没用,求指点往后的09F1代表什么,试了只改前面的,没用。

        1. 暂时没有时间帮大家计算,不好意思:-(

  2. TNG TNG

    楼主你好,我用NFC手机贴上我的学校饭卡,tag ino显示 not a mifare classic tag,是否代表我的卡不能破解了么

    1. ggg ggg

      说明你的手机NFC芯片不是mf芯片,可能是博通芯片

    2. 不一定,其他卡可以用pm3

      1. TNG TNG

        请问破解原理和楼主的水卡一样么?该用什么软件呢?在只有NFC手机和一台电脑的情况下,如何操作呢

        1. 原理基本一致,破解密钥Windows用mfocgui,Linux用mfoc,只有NFC手机和电脑需要知道密钥才可以操作

          1. 承你貴言:-)

          2. TNG TNG

            谢谢你的解答,看到你还是高中生好佩服,我大二了现在,虽然对科技非常感兴趣但远不如你,有不懂的还会问你,祝你考上985

        2. TNG TNG

          由于IC卡的金额数据存储在食堂服务器中,如果用同样原理去修改卡的所有人信息和UID,是否可以复制一个与其他人一样的卡?

          1. 可以复制卡,但挺缺德

  3. lylwj lylwj

    我说的读不出水卡是指饮水机上 软件还是可以读取的

    1. 那就说明你算法没找对,仔细再分析一次

      1. lylwj lylwj

        ok 明白了 开始我拿手机自带的写入标签功能弄了一下水卡 这个应该是原因 话说我在read tag看到sector0到15都有数据 这样是没加密吧。。 谢谢解答。。

  4. lylwj lylwj

    请问一下 tag info那张界面是怎么出来的 还有为什么我用了read tag后直接读不出水卡了 谢谢

    1. 在tool那里有,你确定你用电脑破解了卡的密钥吗?

      1. lylwj lylwj

        我学校的水卡直接用read info就可以看到全部未加密 还有 您回复的速度真快 。。。。。

        1. read info并不能看是否加密,我的博客都是有实时通知的,只要我不是在忙就可以马上回复。

  5. 李单纯 李单纯

    你好。 可以方便加下那您的QQ 向您请教下么? 我用NFC手机读取dump时。 除了1扇区里的UID 以外 其他扇区都是一样的。

    1. 那就很可能是数据存在服务器上,卡只是分辨身份用

  6. 李单纯 李单纯

    你好。 请问用什么数据线进行手机与NFC链接啊?

    1. 手机自带NFC,如需连接可用OTG

  7. 好猫 好猫

    请帮忙分析一小段
    2E07 0006 0000 0E05 1016 0ACD 01D435 55 18.38
    2C07 0002 0000 0E05 1210 23CE 01D435 65 18.36
    2A07 0002 0000 0E05 1210 23CF 01D435 64 18.34
    2807 0002 0000 0E05 1210 2ED0 01D435 6E 18.32
    2407 0004 0000 0E05 1210 2FD1 01D835 72 18.28

    第一列是余额 第二列是本次使用多少钱 第三列无用 第四列是年月 第五列是日小时 第6列前2个是分钟 后2位是第几次刷卡 请问7列是干嘛的呢? 第八列是校验

    1. 好猫 好猫

      1A07 0002 0000 0E05 1215 01D4 01E035 48 18.18
      1807 0002 0000 0E05 1215 02D5 01E035 48 18.16
      1607 0002 0000 0E05 1215 13D6 01E035 58 18.14
      1407 0002 0000 0E05 1215 13D7 01E035 57 18.12
      1207 0002 0000 0E05 1215 13D8 01E035 56 18.10
      0C07 0006 0000 0E05 1215 17D9 01E835 61 18.04
      FE06 000E 0000 0E05 1215 1CDA 010036 79 17.90
      FA06 0002 0000 0E05 1215 26DC 010036 75 17.86
      F406 0006 0000 0E05 1215 29DD 010836 7F 17.80
      F006 0004 0000 0E05 1215 2ADE 010C36 7F 17.76

  8. 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+后面数据不变,结果刷卡器报警,希望大家帮忙分析下,怎么回事?

  9. caizi caizi

    jcop41不能破解吗

    1. CPU卡目前都很安全哦

      1. range range

        话说要是学校一卡通行不行,那种能在淘宝直接充值的校园一卡通,那个是不是不能改钱这些啊?

        1. 那些的话虽然不敢说安全性很高,但我奉劝你别打歪主意←_←

          1. 可以,NFCGUI

          2. bbqiu bbqiu

            没有nfc手机就不能修改了,能不能在电脑上修改

  10. shen shen

    现在还没有ACR122U 但是我用饭卡刷NFC手机,一直显示“此标签为空白或无法识别”无法读取信息啊。莫非不是是Mifare Classic 1k类型???

    1. 你用什么工具识别呢?

  11. 许酥 许酥

    你好。我有MTC查看我们学校的一卡通和热水卡发现一卡通尽然没有加密。。。。。汗 = =!

    热水卡

    sector: 4
    No keys found (or dead sector)
    sector: 5
    No keys found (or dead sector)
    sector: 6
    No keys found (or dead sector)
    4.5.6为加密段.等122回来再说.

    被人de一卡通

    sector:2

    32 07 93 45 53 00 00 00 00 00 00 00 00 00 00 00
    00 23 95 14 05 11 03 7F CA 00 00 00 00 00 00 00
    00 00 00 14 05 09 02 00 00 00 00 00 00 00 00 00
    -- -- -- -- -- -- FF 07 80 69 FF FF FF FF FF FF

    sector:3

    00 DF 33 01 00 00 00 00 00 00 00 00 00 00 00 13
    46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46
    46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46

    我de一卡通

    sector:2

    22 34 53 61 39 00 00 00 00 00 00 00 00 00 00 00
    00 44 40 14 05 10 03 02 63 00 00 00 00 00 00 00
    00 00 00 14 05 11 01 00 00 00 00 00 00 00 00 00
    -- -- -- -- -- -- FF 07 80 69 FF FF FF FF FF FF

    sector:3

    00 E6 35 01 00 00 00 00 00 00 00 00 00 00 00 1C
    EF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 F0
    EF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 F0
    -- -- -- -- -- -- FF 07 80 69 FF FF FF FF FF FF

    我觉得第一行可能是名字。
    第二行的14 05是验证么?
    第三行第一个和最后一个是??

  12. 树熊丶 树熊丶

    它显示“没有找到默认密码加密的扇区”是不就是全扇面加密?

    1. 对的

      1. zhu zhu

        博主能帮我算一组数据吗,我算了很久了,前四位倒置是金额,后四位是校验码,两位一组,前十五组相加得到最后一组,但是第十五组(就是倒数第二组)算不出来,麻烦您能给我点提示吗,谢谢了非常感谢!!
        0元:00000000102700060000CE5D000040A8

        0.26元1A00000054A1000000009E4C0000C8C1

        24.42元:8A09000011CA00010000B439000090EC

        25.26元:DE09000011CA00030000B439000020D2

        25.29元:E109000011CA00000000B439000000B2

        25.41元:ED09000011CA00020000B43900005818

  13. 在押犯 在押犯

    博主,能帮忙分板一组数据吗?
    第一次数据:
    第8块: 01 EC 0A 01 00 30 31 36 36 34 38 38 20 20 20 C9
    > 第9块: 1C 02 00 6C 07 00 0E 05 05 0B 2B 06 48 09 00 36
    > 第10块: 1C 02 00 6C 07 00 0E 05 05 0B 2B 06 48 09 00 36
    > 第11块: 00 00 00 00 00 00 7F 07 88 DA 00 00 00 00 00 00
    这次数据是14年4月24日消费的,上面也有显示日期时间,这组数据,我自己分析出是
    1C 02 00 6C 07 00 0E 05 05 0B 2B 06 48 09 00 36
    |刷机编码|年 月 日 时 分 秒|次数|
    这次消费了5.8元,余额为15元。
    第二次数据
    第8块: 01 EC 0A 01 00 30 31 36 36 34 38 38 20 20 20 C9
    > 第9块: DC 05 00 6C 07 00 0E 04 18 0B 36 28 45 09 00 35
    > 第10块: DC 05 00 6C 07 00 0E 04 18 0B 36 28 45 09 00 35
    > 第11块: 00 00 00 00 00 00 7F 07 88 DA 00 00 00 00 00 00
    这次是5月5日消费了3.3元,余额5.4元。同一个地方消费的。
    我想遍方法了,都想不出如果得出余额和消费金额。

    麻烦大家一起帮帮忙,谢谢博主

    1. 我有空在给你算算

      1. 梨花 梨花

        帮你分析了一下
        前三字节是剩余金额1C 02 00倒置 00 02 1C十六进制数0x00021c
        对应十进制数0540后两位是小数
        DC 05 00倒置 00 05 DC十六进制数0x0005DC
        对应十进制数1500后两位是小数

        最后一字节是checksum(校验和)计算如下
        把前十五字节相加1C+02+00+6C+07+00+0E+05+05+0B+2B+06+48+09+00=0x0136截取后两位36
        把前十五字节相加DC+05+00+6C+07+00+0E+04+18+0B+36+28+45+09+00=0x0235截取后两位35

        数据组太少,不一定准确,还是多消费几次验证一下保险

    2. 在押犯 在押犯

      1C 02 00 不明数据
      6C 07 00 消费机编码
      0E 05 05 0B 2B 06 消费时间
      48 09 消费次数
      00 36 不明数据

  14. 往前跑^_^ 往前跑^_^

    全扇区加密的怎么破解?用什么软件?能发给我吗吗?我也是高中理科生,买了r122u
    破解到密码怎样导入MCT中?keyA的成功导入了,keyB导入无效,比如00000092500400000000B4F7BEF4C4B1中间的是控制位,keyB就是B4F7BEF4C4B1吧?导入怎么用不了的?

    1. 全加密用pm3才可以,pm3嗅探再利用算法漏洞算出key。破解到的密码直接在mct中的Edit Key File中分行写上保存即可

      1. 往前跑^_^ 往前跑^_^

        我知道分行写,但我已经写入去了,读的时候读不出来,只显示keyA
        3区里是00000092500400000000B4F7BEF4C4B1,另一个密码是怎样的?

        1. 控制位全是0啊,不可读

          1. mfcuk很早就不支持acr122u了,或许你可以找旧版本试试,但破解可能性不高。如果你确实需要破解可以去淘宝请IC卡商处理

          2. 往前跑^_^ 往前跑^_^

            不可能有钱买pm3了...听说全加密卡可以用mfcuk破解,是真的吗?不想全功尽废啊!!

  15. XQ XQ

    博主看看这两个数据怎么都不太对 该怎么算
    14.12: 01 96 D3 6C 00 14 14 00 00 03 E1 00 00 00 00 1D
    01 95 D0 88 00 14 16 00 00 03 E0 00 00 00 00 04
    14.03: 01 98 D5 95 00 14 03 00 00 03 E2 00 00 00 00 00
    01 97 D5 95 00 14 12 00 00 03 E2 00 00 00 00 F2

    1. 目前可以看出的是开头两个字节应该就是消费次数了。后面的数据我抽个时间再去看看,数据太少了不好分析

  16. tooyoung tooyoung

    实践的时候出现了俩个问题,一个是我用米三安装MCT读卡的时候出现提示not a mifare classic card,但卡确实为M1卡,我用mofcgui跑出了密钥 但因此仍无法使用MCT读卡进行数据读写;其二是我发现加密扇区的控制位被改7F078869即为密码A和B都能读写数据,我用mifare 操作工具却始终无法读写数据。求作者解惑,手机不可以的话如何使用电脑修改已加密的扇区。

    1. 不是所有的设备都支持Mifare卡,我用米2测试倒是没问题,控制位的确是可读写,把密码填到MCT的key文件中即可读取,你首先试试卡片测试多几次看是否能读取,米3的金属外壳会造成一定的影响,电脑修改请使用libnfc。

  17. 技术宅_Bob 技术宅_Bob

    40.07 07 28 00 2F
    40.00 00 28 00 28
    39.90 5A 27 00 81

    其实观察一下就不难发现,第3,4是校验前面的数据
    2F是40+07
    28是40+00
    81是39+90

    欢迎交流扣⑧314795贰

    1. @Bingo 这个朋友已经分析出来了,条理也非常清楚,可以参考

      1. Bingo Bingo

        嗯。非常感觉。实践后和理论一致。

  18. Bingo Bingo

    你好,看了你的文章,了解了数值的运算。

    但我这边的水卡0728002FF8D7FFD00728002F14EB14EB

    余额是40.06 怎么算都不对 ,请问是不是加密了?

    该如何解?

    1. 这个数据的确是值域结构,但结果是 788539399,地址14

      1. Bingo Bingo

        你好。我有尝试去自己算。我这边卡的值域结构 计算方式和你给的不一样。
        现在稍稍有些眉目。
        为了便于分析,只取前4个钱包正字节
        40.07 07 28 00 2F
        40 00 28 00 28
        39.90 5A 27 00 81

        发现第二个字节是小数点左边的 用十六进制表示
        第一个字节是小数点右边的 用十六进制表示

        现在不知道第三和第四个字节是干嘛用的,还没有找到规律。

        请赐教。

    2. Bingo Bingo

      00 28 00 28 FF D7 FF D7 00 28 00 28 14EB14EB

      这个是40

      求算法

      1. Taylor Taylor

        xw20416

      2. 算法已经说得很清楚了,伸手党一律拒答。自己不尝试去算难道一直去求人家帮你。

        1. 陈银 陈银

          哥,我一点都不会咋办啊

          1. ai ai

            我这用nfc手机读公交卡,16个扇区都能读出来,没有显示读取失败的,是不是说明扇区都没加密?

          2. 弟,那就学吧=_=

  19. s0ap s0ap

    如果没有NFC手机的话,能不能在电脑端修改数值呢?

  20. rill rill

    手机不支持M1标签,可否推荐一款pc端的写卡软件?win7系统的,谢谢~

    1. 小毅 小毅

      我的怎么没有那个扇形的,只有手机nfc功能可以吗。没有mfc读卡器

      1. 有密码就可以不用读卡器,没有的话扇区密码必须用电脑加读卡器进行破解

    2. 道明 道明

      1996对应0101010006A0A7F1FFFFFFFFFFFFFFFF
      20xx对应01010100082E27F1FFFFFFFFFFFFFFFF
      28xx对应010101000B0309F1FFFFFFFFFFFFFFFF28
      xx表示后两位记不清楚了,求计算方法

    3. Nfctool

Write a new comment