每张卡出厂在扇区0,都有UID,读取UID是不要密码的,因此可以根据uid的4个字节进行加密,生成AB密码,密码的生成有多种方式,分区间,取余取整,等等计算。这样破解也只是破解一张卡密码,对代理商造成的损失可以降到最低,可以使用qt开发上位机,以及安卓app,批量初始化以及充值。M1卡发展多年,存在uid相同以及可以更改的uid卡,这样破解了一张卡,就可以根据卡内数据伪造卡了,鉴于此,基于uid和卡号进行二次加密,密码正确,还是二次鉴权正确卡才合法。
关于m1卡写卡失败,却返回成功的具体分析,刷卡过快,m1卡快速离开刷卡区,慢慢脱离刷卡区,会出现写卡成功,返回失败,这是非正常操作,处理方式,写卡默认成功,刷卡预扣,少了预扣;返还预扣,刷卡过快,成功还是失败都默认成功,预扣返回失败,少了预扣。由于客户操作不当,刷卡过快,导致的损失,不予解决了。预扣和返款时不能判断写卡成功与否,默认都是成功,远离刷卡区时,会出现写卡成功,返回失败。
可以建立一个模型,一个刷卡流程:从寻卡,防冲突,校对密码,读取数据,写入数据,时间为T;进入刷卡区到远离刷卡区这段时间要大于一个完整的刷卡流程。
单片机端使用2套密码:默认密码以及根据uid计算出来的密码,
上位机,
指令 | 说明 |
AA 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 A0 | 单片机->上位机,正常卡读卡数据 |
AA 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 A3 | 单片机->上位机,卡区间显示 |
BB 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 B0 BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 | 上位机->单片机,开始初始化 停止初始化 |
BB 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 B1 | 上位机->单片机,区域码,充值等 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 | 上位机->单片机,恢复出厂设置,写白卡 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B3 | 上位机->单片机,卡区间设置 1-4起始;5-8截止 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B4 | 上位机->单片机,密码设置 1-6 十六进制 |
协议说明
数据块 | 1 | 2 | 3 | 4 | 5 |
定义 | 帧头 | 数据长度 | 指令 | 数据 | 指令和数据的CRC校验 |
数据长度 | 1 | 1 | 2 | N | 2 |
说明 | 用户自定义 | 数据长度包括指令,数据和校验 |
起始标志 | 数据长度 | 数据类型 | 数据内容 | 校验码 |
0x5a | 6+4 | 0x0101 | 设备号 | CRC16 |
1字节 | 2字节 | 2字节 | 4字节 | 2字节 |
起始标志 | 数据长度 | 数据类型 | 数据内容 | 校验码 |
0x5a | 6+4 | 0x0201 | 无 | CRC16 |
1字节 | 2字节 | 2字节 | 0字节 | 2字节 |
起始标志 | 数据长度 | 数据类型 | 数据内容 | 校验码 |
0x5a | 6+4 | 0x0101 | 登录信息 | CRC16 |
1字节 | 2字节 | 2字节 | 4字节 | 2字节 |
相对地址 | 字段名称 | 说明 |
0 | 设备号【0】 | 设备号为8位数字,占 4字节 如设备号:12345678 则16进制为0x00BC614E |
1 | 设备号【1】 | |
2 | 设备号【2】 | |
3 | 设备号【3】 | |
4~23 | SIM卡编号 | 剩余字节为20位SIM卡编码,ASCII编码字符串 |
24 | 设备区域码【0】 | 类型uint16 |
25 | 设备区域码【1】 | |
26 | 离线指令数【0】 | 设备当前离线未上传的控制指令数 |
27 | 离线指令数【1】 | |
28 | 保温灯开启温度 | 类型uint8,摄氏温度 |
29 | 保温灯关闭温度 | 类型uint8,摄氏温度 |
30~31 | 保留 |
|