首页 > 编程知识 正文

m1卡0扇区0块数据解析,uid卡

时间:2023-05-05 21:35:08 阅读:183968 作者:766

在淘宝买的UID白卡,可以使用特殊指令写0扇区0块,达到修改卡号的目的。

一开始淘宝白卡各类繁多,没搞明白,查了查以下几个关键词:

IC卡:普通的S50卡,0扇区0块不可更改。

UID: 0扇区0块可以更改(使用特殊指令)。

CUID:0扇区0块可以更改(使用标准扇区读写指令)。

FUID:0扇区0块可以更改(与UID类似,但只能写一次)。

S50资料参考:https://www.cnblogs.com/SCPlatform/p/5116180.html

手上刚好有一块SI522的板子,SI522据说完全兼容MFRC522,拿来测试。

通过查阅资料,得知写UID的流程是这样的:

#1.寻卡send:26 recv:04 00 #2.防冲突send:93 20 recv:B0 6A BC 3B 5D #3.选卡send:93 70 B0 6A BC 3B 5D D9 36 recv:08 B6 DD #4.休眠send:50 00 57 CD #5.写0块后门指令1(7bit模式)send:40recv:0A #6.写0块后门指令2send:43 recv:0A #7.写块数据send:A0 00 5F B1 recv:0A #8.写入16字节的块数据send:75 C5 48 37 CF 08 04 00 62 63 64 65 66 67 68 69 5C BB recv:0A #块0数据注解75 C5 48 37: 4字节卡号CF : XOR卡号校验08 : 卡容量04 00 : 卡类型62 63 64 65: 其它66 67 68 69: 其它

那么,搞清楚通信数据流程后,如何实现这个流程呢?

第1步寻卡,SI522库函数已提供:PICC_IsNewCardPresent();

第2步3步,Si522库函数已提供:PICC_Select() ;

第4步休眠,Si522库函数已提供:PICC_HaltA();

第5,6步,没有现成的函数,但可以用PCD_TransceiveData()函数实现;

第7步,写数据有库函数:MIFARE_Write(0, block, 16);

下面是第5,6步的参考代码:

uint8_t validBits;uint8_t send_data[8];uint8_t recv_data[8];uint8_t recv_size;//第5步,发送0x40指令validBits = 7;send_data[0] = 0x40;status = PCD_TransceiveData(send_data, 1, recv_data, &recv_size, &validBits, 0, false);if(status != STATUS_OK){return 0;}//第6步发送0x43指令send_data[0] = 0x43;status = PCD_TransceiveData(send_data, 1, recv_data, &recv_size, NULL, 0, false);if(status != STATUS_OK){return 0;}

最后,成功地使用SI522修改了UID卡的卡号。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。