【问题标题】:re-writing uid and block 0 on Chinese (supposed to be writable) MIFARE 1K card in python在python中重写中文(应该是可写的)MIFARE 1K卡上的uid和block 0
【发布时间】:2022-04-30 00:43:36
【问题描述】:

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

问题是:使用可用的python库(上面提到),是否可以在中文可写Mifare 1K卡上写Block 0。

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

再次,设置正确的访问位,我可以读取/写入除块 0 之外的所有其他块。

谢谢,A。

【问题讨论】:

    标签: python rfid mifare


    【解决方案1】:

    有两种类型的 UID 可写卡:

    1. Block 0 可写卡片:你可以随时写 Block 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。 如果你的库可以写除block 0以外的任何block,那就是你的卡拒绝写block。

    在尝试写入块 0 时,您的卡是发回 NACK 还是什么都不发?

    【讨论】:

      【解决方案2】:

      我也在尝试相同的方法,但在我的情况下,我使用的是带有 RFID-RC522 写入器/读取器和 this library 的 Arduino。就我而言,我通过修改 UnbrickUid 示例解决了它。我打开了我的库文件夹:“\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,请注意相应地更改密件抄送。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        相关资源
        最近更新 更多