前不久把某学校的水卡顺利破解了(不了解事情经过的看上一篇文章),看似很顺利,但最近偶然发现一些细节问题,细心的话可能也有人留意到,卡中的数据除了两个值块保存余额之外,还存在其他的数据,虽说学校的热水系统不联网,但要是机器自带日志记录,把我卡记录下来那不就完蛋了?所以此次要斩草除根,免得引来无穷后患。
要掌握规矩,肯定要有多组数据对比,找同学借了两张正常未经修改的水卡进行读卡,结果分别如下。
纳闷的发现除了我的卡之外,其他卡的1扇区都是没有数据的。果断把自己卡的1扇区清空了,拿去饮水机测试,使用一切正常,不知道是哪个这么无聊把数据写进去的,继续研究。
可以发现,所有卡的4扇区的0段开头都有0400,并以C5AE结尾,貌似这是一个校验位,把它清零,拿去饮水机测试,发现是Error,看来这个位的确是校验用的,可以保持一致,重点来分析下5扇区那段数据。
似乎发现了点端倪,除了开头的FA5C 0000 05AC FFFF和对照卡不一样之外,其他数据都相同。接着试试除了这8字节的开头保留,其余清零,在饮水机上测试,一切正常,回来再次读卡的时候又重新生成了一样的数据,可以排除影响。
接着将这8字节开头清零,拿去饮水机消费,发现提示Error,看来的确是一个校验,我们必须保证对数据的敏感,可以看到0000和FFFF,两个值恰好是取反了一次,那FA5C和05A3是不是也一样?FA5C转成二进制是1111101001011100,05A3转成二进制是0000010110100011,结果很清楚,两个值是互相取反保存,那我将它修改成0000和FFFF,其余部分清零,拿去饮水机测试,一切正常。
到此为止,水卡的校验也被破解了,为了保险起见,将水卡的无用数据清零,并用0000和FFFF代替取反的值,痕迹就被清理干净了。