两年前在某宝上买了一个 PN532 模块,然后踩了一堆坑复制了本科的校园卡到小米手环 4 NFC上,最近要读研了要换卡,又把坑踩了一遍,遂简记一下避免再次踩坑 (虽然我大概后面再也用不到了(雾

一句话概括

代理卡片不要写完整的扇区 0,要把加密删了,后面扇区 0 的加密是可以改回来的

ZJU 校园卡的特性

0 - 5 扇区会被加密,即第一个扇区也会被加密,这一特性导致网上的方案不可行

小米手环复制门卡的特性

  1. 要求门卡非加密,任何一个扇区加密都不行

  2. 只能有第一个扇区有内容,即扇区 0

  3. 仅复制扇区 0 中的卡号,且强制将厂家信息写为小米自己的(至少手环 4 是这样的)

  4. 但是,第一个扇区的其他内容(含加密信息),以及其他扇区的信息都可以在复制完门卡后再次外置写入,利用这一点可以将复制出来的非加密卡转为加密卡

解决方案

软件

xcicode/MifareOneTool: A GUI Mifare Classic tool on Windows

虽然这玩意 19 年就停工了但也不是不能用

另外 Linux 上用 mfcuk 去操作也是可以的

步骤

  1. 使用 MifareOneTool 破解原始的校园卡

  2. 既然小米手环只能复制第一个扇区的卡号部分,那就使用 CUID 卡创建一个非加密的仅包含卡号信息的代理卡(直接按照网上的方案创建只包含扇区 0 的卡是不行的,一定要把扇区 0 的加密手工删掉,否则无法复制),然后让小米手环去复制这张卡

  3. 使用 MifareOneTool 对着手环上新复制的这张卡再次写入完整的数据(即扇区 0 - 15,因为扇区 0 需要靠这个步骤转换回加密的状态),此时选择写普通卡 / 写 CUID 卡区别不大,毕竟小米手环上的卡是不能写卡号和厂商信息的

  4. 大功告成,可以使用 MCT 之类的工具检查一下卡片复制是否成功