vol002cover.png

编者按:

  1. ==修改水卡、校园卡存在法律风险,饮水机用水仍需缴费的学校师生,禁止修改校园卡==
  2. 两阳(广东两阳中学)在2025年就宣布饮水机用水免费,根据当时水卡金额给我们退钱。但由于饮水设备没有更换,即使免费了我们还得去充值水卡(只不过现在不用钱充值)。问题出在充水卡处只能给你充50,我问她为什么不充个100,她说50够你喝很久了
  3. 本人是2026届高三,我们充值水卡时间是下午练后,时间仅有5分钟。有几次水卡没钱了忘充了,借了同学好几天水卡
  4. 基于以上原因,我研究了校园卡和水卡一些原理,成功修改了两阳水卡,本篇文章分享了修改教程

准备工作

  1. 硬件:一台支持 NFC 功能的安卓手机

    苹果不行,由于 IOS 封闭的特性,没有提供 NFC 接口,故修改不了 IC 卡

  2. 软件MIFARE Classic Tool
    (下称“MTC“)是在 Github 上开源的 NFC 应用,官方提供了三种下载渠道(其实还有 Github Release )
    Get it on Play Store Get it on F-Droid Get the APK

    此外本文提供国内(蓝奏云)下载地址,但只提供现在版本

    由于蓝奏云禁止手机端分享.apk文件,本文分享的是 MCT 的压缩包

    蓝奏云下载
  3. 客体:两阳水卡

  4. 主体:人

  5. 基础:实践

水卡分析

金额存储位置

两阳水卡只有扇区4的块1和块2有值块数据

1
2
3
4
5
#扇区4
0400000000000000000000000000C5AE
8813000077ECFFFF8813000011EE11EE
8813000077ECFFFF8813000012ED12ED
FFFFFFFFFFFFFF078069FFFFFFFFFFFF

在 MCT 中以整数查看数据,发现这两个值块数据的整数值就是50.00 x 100,即当前金额 x 100
图19
所以,理论上只需要改这两个值块数据就可以了

校验机制

  1. 滚动码校验
    滚动码位于块1、块2的最后4字节,例如 11EE11EE12ED12ED,但不管怎么刷卡,滚动码都没有变化,故推断滚动码是出厂固定值,可能分别代表“上一次交易”和“当前交易”的某个固定标识,但实际饮水机不修改它们
  2. 扇区4块0末尾 C5AE 校验
    第一行末尾 C5AE 可能是对金额等固定数据的校验值,但在修改金额后,不修改 C5AE,饮水机也不会拒绝
  3. 金额上限校验
    实操中,若把值块数据整数值改为99900以上(不包括99900),饮水机会拒绝,或强制修改为99900

因此两阳水卡就是一个明文存储金额、无滚动、无校验的简易离线卡,通过修改扇区4块2(但最好连块1一起改)的值块数据,只要上限不超过999元,就可以自由修改水卡金额

教程

  1. 解压下载好的 MCT 压缩包,安装软件

    国产安卓系统会报毒,不要安装应用商店的版本,直接无视风险安装

    MCT 是完全开源的软件,其代码是公开的并接受社区的监督,请放心使用

  2. 打开软件-读标签,此时拿**==水卡贴紧手机 NFC 处==,出现“发现新标签”提示后点击“开始映射并读取标签”,在这期间==水卡要贴紧手机==**

    图1 图2
  3. 复制扇区4的其中一个值块,点击右上角三个点,点击“编/解码值块”

    图7 图4
  4. 粘贴刚刚复制的值块数据,点击“解码”,此时“整数值块”那里会出现数据。在“整数值块”框内输入你想要的金额,然后点击“编码”,然后复制上面生成的“值块数据”

    图5
  5. 返回上一级界面,把刚刚复制的值块数据粘贴回去

    图6
  6. 以同样方法处理另一块的值块数据,处理完后进入写存储

    图8 图9
  7. 注意:点击 OK 的时候要把水卡贴在 NFC 处

    图10 图11 图12

后续修改

我们可以保存改为999元的水卡的转储文件,下次修改可以跳过改值块数据的步骤

图13 图14 图15 图16 图17 图18

然后再重复教程中的写存储步骤,就可以实现对另一张水卡的修改