想起大学时公共浴室每个隔间都有个读卡器,需要把校园卡放上去后才能使用热水。
我观察了下,每天每张卡有一定的热水额度(好像是20升),0点刷新。但我洗澡时间比较长,一张卡的热水似乎有些不够用,得想想办法。
我找到的第一个办法是利用0点刷新的机制。在0点前才去洗澡,只要插上后不拔下来,就可以用满20升热水。用完之后拔下来再插上去就已经刷新了,还可以再用20升。但这个办法的缺点就是得掐时间洗澡,万一错过0点,就得借已经洗过的室友的卡片(带两张卡去)。
就这样用了一小段时间,我有点受不了了,决定继续研究。我想象中的热水系统应该有个联网鉴权流程,读取校园卡信息,后台查询这个学号的同学今天还剩多少额度的热水。这样似乎很合理,所以我直接在考虑这个流程上有没有什么隐藏的漏洞。
不过是我想复杂了,我做了一些试验,发现获取热水并没有想象中复杂。
- 同一张校园卡在四个隔间的额度是独立的。
- 不一定需要校园卡,交通卡也可以拿到热水。
所以,可能没有联网,也没有鉴权。但对于同一个隔间的读卡器,用过的热水是会记录的,拔卡再插并不会重置,所以读卡器还是有读取到卡片的什么信息,并以此来记录已用额度。
我买了一些 Mifare S50 空白卡回来测试,果不其然每一张卡都有独立的额度。我还尝试用A卡先用掉一点热水,用读写卡器把A卡的id复制到B卡上,B卡的额度就和A卡一样了。
所以结论就是:每个隔间独立维护基于M1卡卡号的热水额度,0点重置。
这些买回来的M1白卡,我就命名为洗澡卡,并发微博记录了下。后来有人找我购买,我开价5元卖出了不少。有些同学只是为了洗澡多一些热水,有些想知道原理,我也一一告知了。不过这事儿越传越离谱,最后大概是我黑进学校洗澡的服务器,还私自制作破解卡。
虽然被学校请喝茶,但我实际上没有做任何“破解”系统、服务器的行为,所以就只是让我删掉微博了事。
不知道现在学校洗澡是不是还得刷校园卡,也不知道洗澡系统有没有进一步完善。