用STM32+RC522读取门禁卡块0并复制UID卡 您所在的位置:网站首页 ic卡门禁卡复制 用STM32+RC522读取门禁卡块0并复制UID卡

用STM32+RC522读取门禁卡块0并复制UID卡

2024-02-19 10:33| 来源: 网络整理| 查看: 265

1.写在前面

上大学时接触了单片机,就想着用RC522这个某宝上几块钱的模块复制自己小区里的门禁卡了,可惜捣鼓了几天之后始终把自己的门禁卡的块0信息写不进UID卡的块0中,就放弃了,一眨眼就毕业了,最近没事,又开始重新捣鼓起来了,既然是复制门禁卡,所以不可避免的要对门禁卡(一般是S50卡)的块0进行读写,这过程中也遇到很多问题,还好最后复制成功了。(我会把MI卡中英文资料、RC522中英文资料、还有stm32的程序上传到CSDN上,百度网盘连接容易失效,当然为了防止被乱用程序,我可能会设置需要1积分才能下载,提高门槛,防止恶意滥用,如果你确实需要又没有积分,可在评论区留下你的邮箱,我看见了会发给你的,前提是不做违法犯罪的事)

2.复制过程

好了,回归正题,首先第一个问题要告诉大家的就是,一定要先了解卡片的分类:

M1卡:全称Mifare classic 1K,普通IC卡,0扇区不可修改,其他扇区可以反复擦写。通常我们使用的门禁卡、电梯卡都是M1卡。 UID卡:普通复制卡,可以反复擦写所有扇区,门禁有防火墙则失效。 CUID:升级复制卡,可以反复擦写所有扇区,可以穿透大部分防火墙。

还有一些卡就不介绍了,可以自己去搜索一下,我们复制门禁卡,买些UID卡就行了,当然有些门禁系统有防火墙功能,当你刷卡时,它会尝试向你门禁卡块0里写数据,如果被成功修改了,则证明你这是复制的卡片(UID卡),你的卡片数据也被修改了,没法用了,这时你可以尝试用FUID卡。这些都可以在某宝上买到,我当时就没了解这些,去买了一些M1卡,结果自然没法用。 之后我买了一些UID卡,然后我按照正常对UID卡进行读写操作来修改块0,但是总是写入失败,唉,又遇见上大学时捣鼓RC522时相同的问题了,如其他网友所说的,都要怀疑买到的卡是假的UID卡了,最后想起了以前在网上看了一篇帖子,说对改卡块0操作是有特殊命令的,不能按照正常的步骤去写块0的,于是又去找到那篇帖子:

終於讓我找到一篇,他的流程是這樣: Sent bits: 26 (7 bits) //尋卡 0x26 / 0x52 都可以 Received bits: 04 00 Sent bits: 93 20 //防衝撞 Received bits: 01 23 45 67 00 Sent bits: 93 70 01 23 45 67 00 d0 6f //選卡 Received bits: 08 b6 dd (SAK) 不可以認證密鑰,不然後門打不開,好,重點來了, Sent bits: 50 00 57 cd //休眠,50 00 就是 PcdHalt() Sent bits: 40 (7 bits) (特殊指令)//開後門第一條指令,要設定 BitFramingReg 使 傳送 7 個位元,必須要 7 個 Received bits: a (4 bits) Sent bits: 43 (特殊指令)//開後門第二條指令 Received bits: 0a Sent bits: a0 00 5f b1 //正常的寫區塊第一次交握 Received bits: 0a Sent bits: 00 dc 44 20 b8 08 04 00 46 59 25 58 49 10 23 02 c0 10 //正常的寫 block 0 資料 Received bits: 0a 重點就是要: 1 不可以進行 3 Pass Authenticaiton 2.發 PcdHalt() 3.發 0x40 in 7-bit 4.發 0x43

我当是看到这篇帖子时,说实话,有点懵,主要是对RC522的寄存器不熟悉,在加上这繁体字,更懵了,比如说第一步的发7位的0x26,怎么发?经过一段时间的摸索后,发7位0x26要先将RC522的BitFramingReg寄存器低3位置1,正常发送时(8位)要将RC522的BitFramingReg寄存器低3位清零(默认状态是清零的)。

3.说明

我们先要弄明白上面帖子的大体流程是什么,也就是复制块0的具体顺序是什么,然后再弄懂有些步骤发送的数据是是干什么用的。大体顺序:寻卡->防止卡片冲撞->选卡->休眠->发送0x40(7bit)->发送0x43->发送0xa0等4字节->发送0x00等18字节。 这就是复制块0的基本顺序了,也就是从说休眠这一步开始,我们就不是按照正常的步骤来进行复制块0的,我来一步步讲解从休眠开始的有特殊步骤: 1.休眠,我们调用PcdHalt()函数就可以让卡片进入休眠状态 2.发送0x40(7bit),先用SetBitMask(BitFramingReg,0x07),将BitFramingReg寄存器低3位置1(也就是发送7位),再通过PcdComMF522()发送0x40,但是发送0x40给卡片具体是什么含义,还不明白。 3.发送0x43,先用ClearBitMask(BitFramingReg,0x07),将BitFramingReg寄存器低3位清零(发送8位),再通过PcdComMF522()发送0x43,也不知道是什么含义。 4.发送0xa0 0x00 0x5f 0xb1,通过PcdComMF522()发送0xa0 0x00 0x5f 0xb1,0xa0块写指令,0x00是块号,0x5f 0xb1是前两个字节的CRC校验值。 5.发送0x00等18字节,直接通过PcdComMF522()发送,这18字节中,前16字节是你自己门禁卡的块0里的信息,后面2字节是前16字节的CRC校验位,所以你不要真的把00 dc 44 20 b8 08 04 00 46 59 25 58 49 10 23 02 c0 10 这个数据去给发送到UID卡中啊啊啊啊啊!!!!!你要先读出你自己门禁卡的块0里的16字节信息,再进行CRC校验,合成18字节再发送到UID卡中。块0的16位字节所代表的含义:

#块0数据注解 00 dc 44 20: 4字节卡号 b8 : XOR卡号校验 08 : 卡容量 04 00 : 卡类型 46 59 25 58: 其它 49 10 23 02: 其它 4.stm32的特殊步骤部分代码

直接上我的32上关于特殊部分的代码吧,基本就是这部分代码把大家卡住了,代码注解很详细,printf部分不用管,这是我想在串口调试助手上具体的返回值和进行到哪一步了,data1是个18字节的数组,前16字节我已经提前把门禁卡里块0的信息存进去了:

//此处为写块0的特殊步骤:1.休眠、2.发送0x40(7bit)、3.发送0x43、 //4.发送0xa0 0x00 0x5f 0xb1(第一字节是块写指令,第二字节是块号,三四字节是前两个字节的CRC校验值) //5.将原块0的16字节进行CRC校验,将计算出的2字节CRC校验位加在原块0的16字节后面一起写入到新UID卡中 ucStatusReturn=PcdHalt();//休眠 if (ucStatusReturn == MI_OK) printf ( "Halt Finish\r\n" ); SetBitMask(BitFramingReg,0x07);//将BitFramingReg寄存器低3位置1(发送7位) recive_data[0]=0x40; PcdComMF522 ( PCD_TRANSCEIVE, recive_data, 1, recive_data, & length);//与卡片通信 printf ( "communicate 1 recive_data: %01X\r\n",recive_data[0] ); ClearBitMask(BitFramingReg,0x07); //将BitFramingReg寄存器低3位清零 recive_data[0]=0x43; PcdComMF522 ( PCD_TRANSCEIVE, recive_data, 1, recive_data, & length);//与卡片通信 printf ( "communicate 2 recive_data: %02X\r\n",recive_data[0] ); recive_data[0]=0xa0;recive_data[1]=0x00;recive_data[2]=0x5f;recive_data[3]=0xb1; PcdComMF522 ( PCD_TRANSCEIVE, recive_data, 4, recive_data, & length);//与卡片通信 printf ( "communicate 3 recive_data: %02X\r\n",recive_data[0] ); CalulateCRC ( data1, 16, & data1 [ 16 ] ); //CRC校验 printf ( "data1 CRC is: %02X%02X\r\n",data1[16],data1[17] ); PcdComMF522 ( PCD_TRANSCEIVE, data1, 18, data1, & length );//写块0 5.总结

虽然成功复制了UID卡了,但是对RC522还是不是很了解,很多地方的不是很明白,还是有很多要学的,最后,希望大家都能成功的写入块0。最后重申:本文只用于学习交流,一切后果由使用者自己承担,与本文作者无关!不要干坏事哦!(资源已经上传:下载频道)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有