立即注册 登录
紫外工控论坛 返回首页

冰糖的个人空间 http://bbs.ziwai.net/?2 [收藏] [复制] [分享] [RSS]

日志

RC522写块0复制S50卡

已有 677 次阅读2019-7-29 18:35 |个人分类:电子技术

1.写在前面
觉得自己做事总是三分热度,今天网上看见个不了解的东西去做,一做遇到问题又搁置在那里,这样真不好。对于RC522这个模块,大学的时候撸了一下,记得当时有个上位机可以读写卡片,配的51的程序,说实话用了stm32后完全忘了怎么用51了,一直也没把那个程序成功移植在stm32上面,毕业后中途弄过一次,也没继续做下去,最近心血来潮,想起来复制一下小区的门禁卡,程序终于移植成功。

既然是复制门禁卡,所以不可避免的要对S50卡的块0进行读写,这过程中也遇到很多问题,上面提到移植的程序就不说了,下面就记录和分享下对块0的读写过程吧。

2.复制的过程
S50卡的基本特性就不说了,正常的S50卡的块0包含卡号以及厂商的基本信息,是固化在扇区0的块0中的,不可修改,但是有一种卡是可以修改的——UID卡,所以你首先得有一张UID卡。最开始我买了一些UID卡,然后我按照正常对S50卡进行读写操作来修改块0,但是总是写入失败,包括后面把那个成功移植到STM32的程序用上位机来操作,还是写入失败,正如其他网友所说的,都要怀疑买到的卡是假的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

3.解释说明
首先安照正常S50卡的操作顺序进行 寻卡->防冲撞->选卡 ,接下来不要验证密码,然后 休眠。下面发送第一条特殊指令,他是16进制的0x40,必须只发送7位,很多朋友就是不清楚这里如何发送0x40以及如何只发送7位,只需要调用下面两个函数就可以了。

Write_MFRC522()
MFRC522_ToCard()
第一个是设置发送7个位,需要设置BitFramingReg为0x07,第二个是写指令函数,不要说你不会调用这两函数,不会的就要好好看下程序中是怎样用到这两函数的。然后发送第二条指令0x43,要发8位,设置BitFramingReg为0x00(好像不设置这个也可以,默认的8位),接下来发送buf[ ]={0xa0,0x00, 0x5f, 0xb1},同样用MFRC522_ToCard()函数(这串指令我也没懂什么意思,就当做是特殊指令吧,如果有人理解这个可以给我说下),这里发送的指令都会应答0x0a(我的好像是0xa0,或许是大小端问题吧),如果没收到说明没有弄对,建议一个一个测试。

通过上述特殊指令后就是写块0了,奇怪的是按照上面说的正常写块0,我是没有成功(或许这样是可以的,我看原理都是一样的),我还是单独调用的MFRC522_ToCard()函数写块0,上面是18个字节,但是正常的块0是16字节,所以这里有个重点,先把要复制的卡的块0字节读出,用CalulateCRC()函数计算出2位校验位放在16字节后面组成18字节一起写入到块0,不可以随便填写块0的数据,因为有校验。到此,块0就可以成功写入。

4.总结
只要按照上面的步骤一步一步来,就可以成功写块0,这样要注意的是上面仅仅是写块0,相当于只是把卡号复制成功,对于有些门禁读卡器要验证其他扇区这样做也是打不开门的,后面的就不多说了,本篇文章只用于学习研究,对造成的后果概不负责。
--------------------- 
作者:遇见好时光 
来源:CSDN 
原文:https://blog.csdn.net/baidu_34570497/article/details/79689778 
版权声明:本文为博主原创文章,转载请附上博文链接!

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-4-19 21:33 , Processed in 0.265627 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

返回顶部