Отличить Mifare Ultralight от Mifare Ultralight C

есть ли надежный способ узнать, является ли RFID-карта Mifare Ultralight или Mifare Ultralight C?

единственный способ, который я нашел до сих пор, - это использовать разницу в размере этих двух карт, выдающих команду чтения за пределами меньшего. Но это похоже на взлом, и я предполагаю, что команда read может потерпеть неудачу, если карта использует механизм аутентификации Ultralight C.

const char* mifare_ultralight_identification(const nfc_target_info_t nti)
{
  byte_t abtCmd[2];
  byte_t abtRx[265];
  size_t szRxLen;

  abtCmd[0] = 0x30;  // MIFARE Ultralight READ command
  abtCmd[1] = 0x10;  // block address (1K=0x00..0x39, 4K=0x00..0xff)

  if (!nfc_initiator_transceive_dep_bytes(pnd,abtCmd,2,abtRx,&szRxLen)) {
    // READ command of 0x10 failed, we consider that Ultralight does have 0x10 address, so it's a "simple" Ultralight (i.e. not a Ultralight C)
    // When a READ failed, the tag returns in HALT state, so we need to reselect tag
    nfc_initiator_select_passive_target(pnd, NM_ISO14443A_106, nti.nai.abtUid, nti.nai.szUidLen, NULL);
    return "";
  }
  return " C";
}

источник

2 ответов


Да, это возможно, если у вас есть документация о том, как работает механизм аутентификации Mifare Ultralight C. Mifare Ultralight не поддерживает это, поэтому он поднимет условие ошибки.


Как только вы окажетесь под NDA и получите доступ к полным листам данных, вы увидите раздел, в котором описывается, как отличить Mifare Ultralight C от других тегов Mifare.