用python在中文(应该是可写的)MIFARE 1K卡上重新写入uid和block 0

2024-04-19 20:55:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是我的问题:我的RC522模块通过SPI连接到我的Pi2,我能够使用MFRC522 python和pi-RC522库读取所有[64个块/16个扇区]。此外,我还可以编写和更改所有块(63个块),除了从易趣购买的中国Mifare 1K卡的块0(包括UID),它应该是块0/UID可写的。

问题是:使用可用的python库(如上所述),是否有可能在中文可写Mifare 1K卡上写入块0。

注意:当我收到卡时,扇区尾访问位处于传输配置(FF 07 80->;001用于扇区尾,000用于数据块),这意味着通常我可以使用KeyA或KeyB更改数据块(包括块0),但我不能。我将访问位更改为(7F 0F 88->;对于数据块)和使用KeyA/KeyB,它不起作用,块0保持不变。我还尝试了使用KeyA或KeyB(数据块为787788->;000),结果相同。

同样,通过设置适当的访问位,我可以读取/写入除块0以外的所有其他块。

谢谢,A


Tags: 模块数据gtspiuidpirc522ff
2条回答

我也在尝试同样的方法,但在我的例子中,我使用的是Arduino,它带有一个RFID-RC522写入器/读取器和this library。在我的例子中,我通过修改UnbrickUid示例解决了这个问题。在我的案例中,我打开了library文件夹:“\Documents\Arduino\libraries\rfid master\src\MFRC522Hack.cpp”,并更改了缓冲区(第190行)。

默认代码是:

byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

在这里你可以把这个十六进制数改成你需要的。请记住,前4个字节是UID(01,02,03,04),后一个是BCC(04)。因此,如果更改块0,请小心相应地更改BCC。

修改后,运行“FixBrickedUID”示例,它将更改整个块0。

有两种类型的UID writeble卡:

  1. 块0可写卡:您可以随时写入块0
  2. 后门卡

如果写入块0不起作用,则可能有一张后门卡: 要启用后门,您需要将以下序列发送到卡: (都是十六进制)

  1. RC522>;卡:50 00 57 cd(HLTA+CRC)
  2. RC522>;卡:40(仅7位)
  3. 卡>;RC522:A(仅4位)
  4. RC522卡:43
  5. 卡>;RC522:A(仅4位)

然后您可以在不进行身份验证的情况下写入到块0。 如果仍然不起作用,您的卡可能无法更改UID。

要回答您的问题:Python库没有理由拒绝写入块0。 如果你的库可以写除块0以外的任何块,那就是你的卡拒绝写块。

您的卡在尝试写入数据块0时是否会发送回NACK或不发送NACK?

相关问题 更多 >