diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index bb20e5b3a..966762cb3 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -2806,16 +2806,18 @@ int readIclass(bool loop, bool verbose) { FLAG_ICLASS_READER_ONE_TRY; // loop in client not device - else on windows have a communication error - PacketResponseNG resp; while (!kbd_enter_pressed()) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_ACK, &resp, 4500)) { + uint8_t readStatus = resp.oldarg[0] & 0xff; uint8_t *data = resp.data.asBytes; - if (verbose) PrintAndLogEx(INFO, "Readstatus:%02x", readStatus); +// if (verbose) PrintAndLogEx(INFO, "Readstatus:%02x", readStatus); // no tag found or button pressed if ((readStatus == 0 && !loop) || readStatus == 0xFF) { @@ -2837,18 +2839,27 @@ int readIclass(bool loop, bool verbose) { printIclassDumpInfo(data); } + // if CSN ends with FF12E0, it's inside HID CSN range. + bool isHidRange = (memcmp((uint8_t *)(data + 5), "\xFF\x12\xE0", 3) == 0); + if (readStatus & FLAG_ICLASS_READER_AIA) { bool legacy = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\xff\xff\xff\xff\xff", 8) == 0); bool se_enabled = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\x00\x06\xff\xff\xff", 8) == 0); PrintAndLogEx(NORMAL, " App IA: %s", sprint_hex(data + 8 * 5, 8)); - if (legacy) - PrintAndLogEx(SUCCESS, " : Possible iClass (legacy credential tag)"); - else if (se_enabled) - PrintAndLogEx(SUCCESS, " : Possible iClass (SE credential tag)"); - else - PrintAndLogEx(WARNING, " : Possible iClass (NOT legacy tag)"); + + if (legacy && isHidRange) + PrintAndLogEx(SUCCESS, " : Possible iClass - legacy credential tag"); + + if (se_enabled & isHidRange) + PrintAndLogEx(SUCCESS, " : Possible iClass - SE credential tag"); + + if (isHidRange) { + PrintAndLogEx(SUCCESS, " : Tag is "_YELLOW_("iClass")", CSN is in HID range"); + } else { + PrintAndLogEx(SUCCESS, " : Tag is "_YELLOW_("PicoPass")", CSN is not in HID range"); + } } if (tagFound && !loop) {