Distinguish Mifare Ultralight from Mifare Ultralight C

Is there any reliable way to find out if the RFID card is either Mifare Ultralight or Mifare Ultralight C?

The only way I have found so far is to use the difference in size between the two cards, giving the read command beyond the smaller. But it looks like a hack, and I assume that the read command may fail if the card uses the Ultralight C authentication mechanism.

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 a "simple" Ultralight (ie 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"; } 

A source

+6
source share
2 answers

Yes, it is possible if you have documentation on how the MIFARE Ultralight C authentication mechanism works. MIFARE Ultralight does not support this, so this will cause an error condition.

+5
source

Once you get under the NDA and gain access to a complete list of data, you will see a section that describes how to distinguish Mifare Ultralight C from other Mifare tags.

-1
source

Source: https://habr.com/ru/post/922554/


All Articles