• 正文
  • 相关推荐
申请入驻 产业图谱

学习下M1卡的内部数据分析

04/22 17:31
346
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在扒开 M1 卡的内部看看数据是怎么排列的之前,我们先看看 M1 卡在这个卡家族中排在什么位置。

基础知识查看:探索一下NFC

M1 卡属于高频卡,高频卡的工作频率是 13.56MHz,因此,它比低频卡传输速率高,存储容量也可以更大。

针对高频卡,有两个标准,分别是ISO14443 -TypeA和ISO14443 -TypeB。他们的区别是编码不同,TYPE A采用开关键控(On-Off keying)的Manchester编码,TYPE B采用NRZ-L的BPSK编码。

TYPEB 与 TYPEA 相比,具有传输能量不中断、速率更高、抗干扰能力强的优点。RFID的核心是防冲突技术,这也是和接触式IC卡的主要区别。ISO14443-3规定了TYPEA和TYPE B的防冲突机制。二者防冲突机制的原理不同,前者是基于位冲突检测协议,而TYPE B通信系列命令序列完成防冲突,目前的二代身份证,社保卡,护照都是基于此标准。

而我今天搞的这个 M1 卡属于ISO14443-TypeA。

上面是卡内的存储结构,分为 16 个扇区,每个扇区 4 个块,一共 64 个块。其中第0 块存储了厂家的信息。

先列出我找了张白卡读取的实际值:

M1 block0:          0xBF 0xBE 0x3B 0x83 0xB9 0x08 0x04 0x00 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69M1 block[01]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[02]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[03]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[04]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[05]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[06]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[07]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[08]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[09]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[10]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[11]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[12]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[13]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[14]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[15]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[16]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[17]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[18]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[19]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[20]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[21]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[22]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[23]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[24]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[25]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[26]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[27]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[28]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[29]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[30]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[31]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[32]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[33]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[34]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[35]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[36]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[37]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[38]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[39]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[40]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[41]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[42]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[43]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[44]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[45]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[46]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[47]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[48]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[49]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[50]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[51]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[52]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[53]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[54]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[55]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[56]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[57]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[58]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[59]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFFM1 block[60]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[61]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[62]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00M1 block[63]:data:  0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

可以看到,只有第0块有数据,其他的都是只有每个扇区的最后一个块有数据。我们先分析 第 0 块的数据:

0xBF 0xBE 0x3B 0x83 0xB9 0x08 0x04 0x00 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69

其中前面的 4 个字节就是卡的 UID :0xBF 0xBE 0x3B 0x83

第 5 个字节其实是前面 UID 的异或值 :0xBF^0xBE^0x3B^0x83 = 0xB9,这个主要是让我们读取完 UID 后校验一下读的对不对。

其余的数据是厂商数据,并且这个段在出厂之前就会被设置了写入保护,只能读取不能修改。

凡事都有例外,有种叫UID卡的特殊卡,UID是没有设置保护的,其实就是厂家不按规范生产的卡,M1卡出厂是要求要锁死UID的,对于不规范的破解之道在此不学他。

数据读到这一步,我们已经按到了 UID 卡号,对于大多数门禁卡,也就是只用了个 UID 而已。如果我们要安全性稍高一点的,就需要研究其余的扇区,我们需要在上面存储一些密码。

既然存密码,这个密码就不能让别人轻易的拿到,我上面能达到数据,是因为白卡,也就是出厂的那些卡的密码默认都是 0xFF 0xFF 0xFF 0xFF

从哪里可以看出来呢?可以看每个扇区的最后一块数据,粘贴在下面:

0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x07 0x80 0x69 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

这个数据整体上很容易理解,我们掐头去尾各 6 个字节,他们就变成了三段

开头的Key A :0x00 0x00 0x00 0x00 0x00 0x00

结尾的 Key B:0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

中间的存取控制位:0xFF 0x07 0x80 0x69

在读取的时候,我发现无论我如何设置 KeyA,用正确的 KeyA 再去回读信息,返回的 KeyA 都是 00,这里应该是 M1 内部的规范,也就是每个扇区的最后一个块在读取时,对应的密码部分都是回复 00。KeyB 同理,也就是密码输对了,也不能返回密码。所以设置了密码后,我们一定要自己牢牢记住。

这里有两个密码,可以对两个密码配置不同的权限,KeyA 只能读取,KeyB 既能读取,也能写入,这样方面发卡机构进行独立密钥的操作。

好了,哪些位上的信息决定 KeyA 和 KeyB 的作用呢?就靠中间那几个存取控制位了(其中最后一个 0x69 暂时不知道干嘛的,忽略它)。

0xFF 0x07 0x80

控制块很复杂,看我上面引用的文章的最后面部分。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录