* ignore standard iso15693 INVENTORY commands silently
* make iso15693 command decoder more strict (prevent decoding rubbish)
* re-enable sim 3
// Otherwise, we should answer 8bytes (block) + 2bytes CRC
}
// Otherwise, we should answer 8bytes (block) + 2bytes CRC
}
+ } else if (receivedCmd[0] == 0x26 && len == 5) {
+ // standard ISO15693 INVENTORY command. Ignore.
+
} else {
// don't know how to handle this command
char debug_message[250]; // should be enough
} else {
// don't know how to handle this command
char debug_message[250]; // should be enough
break;
case STATE_READER_RECEIVE_DATA_1_OUT_OF_4:
break;
case STATE_READER_RECEIVE_DATA_1_OUT_OF_4:
DecodeReader->posCount++;
if (DecodeReader->posCount == 1) {
DecodeReader->sum1 = bit;
DecodeReader->posCount++;
if (DecodeReader->posCount == 1) {
DecodeReader->sum1 = bit;
}
if (DecodeReader->posCount == 8) {
DecodeReader->posCount = 0;
}
if (DecodeReader->posCount == 8) {
DecodeReader->posCount = 0;
- int corr10 = DecodeReader->sum1 - DecodeReader->sum2;
- int corr01 = DecodeReader->sum2 - DecodeReader->sum1;
- int corr11 = (DecodeReader->sum1 + DecodeReader->sum2) / 2;
- if (corr01 > corr11 && corr01 > corr10) { // EOF
+ if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF
LED_B_OFF(); // Finished receiving
DecodeReaderReset(DecodeReader);
if (DecodeReader->byteCount != 0) {
return true;
}
}
LED_B_OFF(); // Finished receiving
DecodeReaderReset(DecodeReader);
if (DecodeReader->byteCount != 0) {
return true;
}
}
- if (corr10 > corr11) { // detected a 2bit position
+ if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected a 2bit position
DecodeReader->shiftReg >>= 2;
DecodeReader->shiftReg |= (DecodeReader->bitCount << 6);
}
DecodeReader->shiftReg >>= 2;
DecodeReader->shiftReg |= (DecodeReader->bitCount << 6);
}
break;
case STATE_READER_RECEIVE_DATA_1_OUT_OF_256:
break;
case STATE_READER_RECEIVE_DATA_1_OUT_OF_256:
DecodeReader->posCount++;
if (DecodeReader->posCount == 1) {
DecodeReader->sum1 = bit;
DecodeReader->posCount++;
if (DecodeReader->posCount == 1) {
DecodeReader->sum1 = bit;
}
if (DecodeReader->posCount == 8) {
DecodeReader->posCount = 0;
}
if (DecodeReader->posCount == 8) {
DecodeReader->posCount = 0;
- int corr10 = DecodeReader->sum1 - DecodeReader->sum2;
- int corr01 = DecodeReader->sum2 - DecodeReader->sum1;
- int corr11 = (DecodeReader->sum1 + DecodeReader->sum2) / 2;
- if (corr01 > corr11 && corr01 > corr10) { // EOF
+ if (DecodeReader->sum1 <= 1 && DecodeReader->sum2 >= 3) { // EOF
LED_B_OFF(); // Finished receiving
DecodeReaderReset(DecodeReader);
if (DecodeReader->byteCount != 0) {
return true;
}
}
LED_B_OFF(); // Finished receiving
DecodeReaderReset(DecodeReader);
if (DecodeReader->byteCount != 0) {
return true;
}
}
- if (corr10 > corr11) { // detected the bit position
+ if (DecodeReader->sum1 >= 3 && DecodeReader->sum2 <= 1) { // detected the bit position
DecodeReader->shiftReg = DecodeReader->bitCount;
}
if (DecodeReader->bitCount == 255) { // we have a full byte
DecodeReader->shiftReg = DecodeReader->bitCount;
}
if (DecodeReader->bitCount == 255) { // we have a full byte
uint8_t simType = 0;
uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint8_t simType = 0;
uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0};
return usage_hf_iclass_sim();
}
simType = param_get8ex(Cmd, 0, 0, 10);
return usage_hf_iclass_sim();
}
simType = param_get8ex(Cmd, 0, 0, 10);
PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8));
}
PrintAndLog("--simtype:%02x csn:%s", simType, sprint_hex(CSN, 8));
}
- uint8_t numberOfCSNs = 0;
if (simType == ICLASS_SIM_MODE_READER_ATTACK) {
UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType, NUM_CSNS}};
UsbCommand resp = {0};
if (simType == ICLASS_SIM_MODE_READER_ATTACK) {
UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType, NUM_CSNS}};
UsbCommand resp = {0};
saveFile("iclass_mac_attack", "bin", dump,datalen);
free(dump);
saveFile("iclass_mac_attack", "bin", dump,datalen);
free(dump);
- } else if (simType == ICLASS_SIM_MODE_CSN || simType == ICLASS_SIM_MODE_CSN_DEFAULT) {
- UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType, numberOfCSNs}};
+ } else if (simType == ICLASS_SIM_MODE_CSN || simType == ICLASS_SIM_MODE_CSN_DEFAULT || simType == ICLASS_SIM_MODE_FULL) {
+ UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType, 0}};
memcpy(c.d.asBytes, CSN, 8);
SendCommand(&c);
memcpy(c.d.asBytes, CSN, 8);
SendCommand(&c);