AD

M1卡控制码实例分析

来上两个实例分析:

先来一个在读取卡的时候,经常看到的控制码:“FF 07 80 69”

则第6字节为FF,第7字节为07,第8字节为80,第九字节69为备用默认值。

参考前一篇文章中的表6:

则第6字节的前4位(高4位)F,换算为1111,后4位(低4位)为1111;第7字节前4位为0000,后4位为0111。

在参考表5,则第6字节内的各控制位值分别如下:

C2x3=0,C2x2=0,C2x1=0,C2x0=0,C1x3=0,C1x2=0,C1x1=0,C1x0=0

第7字节内的各控制位值分别如下:

C1x3=0,C1x2=0,C1x1=0,C1x0=0,C3x3=1,C3x2=0,C3x1=0,C3x0=0

同样可以得出第8字节的值。把这些所有的控制位的值集合后。可以得出:

(C1x0,C2x0,C3x0)=(0,0,0);(C1x1,C2x1,C3x1)=(0,0,0);(C1x2,C2x2,C3x2)=(0,0,0);(C1x3,C2x3,C3x3)=(0,0,1)

因为X代表扇区,所有当前扇区block0~block2的权限,参考表3和表4,可以得出:

block0~block2 的权限相同,为验证keyA或者keyB正确后,可以对当前扇区当前块进行读、写、加减值等操作。

针对block3,参考表7,可以得出,keyA的权限为:不可读,验证keyA后可以更改。控制码的权限为验证keyA后,可以进行读写操作;keyB的权限为:验证keyA后,可以进行读写操作。

 

实例二:

控制码为:“08 FF 8F 69”,

则第6至第8字节的二进制如下表:

0000 1000  | 0111 0111 | 1000 1111

 

6th:| 0000 1000 |

7th:| 0111 0111 |

8th:| 1000 1111 |

结合取反操作后,各控制位的具体值如下:

C2x3=1,C2x2=1,C2x1=1,C2x0=1,C1x3=0,C1x2=1,C1x1=1,C1x0=1

C1x3=0,C1x2=1,C1x1=1,C1x0=1,C3x3=1,C3x2=0,C3x1=0,C3x0=0

C3x3=1,C3x2=0,C3x1=0,C3x0=0,C2x3=1,C2x2=1,C2x1=1,C2x0=1

根据以上结果,以纵列为结果,可以得出:block0~block2的权限为110,根据表4翻译后为:验证keyA或者keyB后,可以对keyA及keyB进行读操作;验证keyB后,可以进行写和加减值操作。

得出block3(验证码)的权限为011,根据表7翻译后为:keyA及keyB任何情况下不可读,验证keyA或者keyB后,控制码可以读取;验证keyB后,keyA、keyB及控制码可以更改写入;

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略