mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
remove tabs
This commit is contained in:
parent
468f59684c
commit
c0eb19acb1
19 changed files with 1480 additions and 1447 deletions
|
@ -42,30 +42,36 @@ static bool IsTrailerAccessAllowed(uint8_t blockNo, uint8_t keytype, uint8_t act
|
||||||
| ((sector_trailer[8] >> 7) & 0x01);
|
| ((sector_trailer[8] >> 7) & 0x01);
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case AC_KEYA_READ: {
|
case AC_KEYA_READ: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_KEYA_READ");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_KEYA_READ");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case AC_KEYA_WRITE: {
|
case AC_KEYA_WRITE: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_KEYA_WRITE");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_KEYA_WRITE");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x01))
|
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x01))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x04 || AC == 0x03)));
|
|| (keytype == AUTHKEYB && (AC == 0x04 || AC == 0x03)));
|
||||||
}
|
}
|
||||||
case AC_KEYB_READ: {
|
case AC_KEYB_READ: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_KEYB_READ");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_KEYB_READ");
|
||||||
return (keytype == AUTHKEYA && (AC == 0x00 || AC == 0x02 || AC == 0x01));
|
return (keytype == AUTHKEYA && (AC == 0x00 || AC == 0x02 || AC == 0x01));
|
||||||
}
|
}
|
||||||
case AC_KEYB_WRITE: {
|
case AC_KEYB_WRITE: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_KEYB_WRITE");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_KEYB_WRITE");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x01))
|
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x01))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x04 || AC == 0x03)));
|
|| (keytype == AUTHKEYB && (AC == 0x04 || AC == 0x03)));
|
||||||
}
|
}
|
||||||
case AC_AC_READ: {
|
case AC_AC_READ: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_AC_READ");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_AC_READ");
|
||||||
return ((keytype == AUTHKEYA)
|
return ((keytype == AUTHKEYA)
|
||||||
|| (keytype == AUTHKEYB && !(AC == 0x00 || AC == 0x02 || AC == 0x01)));
|
|| (keytype == AUTHKEYB && !(AC == 0x00 || AC == 0x02 || AC == 0x01)));
|
||||||
}
|
}
|
||||||
case AC_AC_WRITE: {
|
case AC_AC_WRITE: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsTrailerAccessAllowed: AC_AC_WRITE");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsTrailerAccessAllowed: AC_AC_WRITE");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x01))
|
return ((keytype == AUTHKEYA && (AC == 0x01))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x03 || AC == 0x05)));
|
|| (keytype == AUTHKEYB && (AC == 0x03 || AC == 0x05)));
|
||||||
}
|
}
|
||||||
|
@ -93,46 +99,54 @@ static bool IsDataAccessAllowed(uint8_t blockNo, uint8_t keytype, uint8_t action
|
||||||
AC = ((sector_trailer[7] >> 2) & 0x04)
|
AC = ((sector_trailer[7] >> 2) & 0x04)
|
||||||
| ((sector_trailer[8] << 1) & 0x02)
|
| ((sector_trailer[8] << 1) & 0x02)
|
||||||
| ((sector_trailer[8] >> 4) & 0x01);
|
| ((sector_trailer[8] >> 4) & 0x01);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed: case 0x00 - %02x", AC);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed: case 0x00 - %02x", AC);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x01: {
|
case 0x01: {
|
||||||
AC = ((sector_trailer[7] >> 3) & 0x04)
|
AC = ((sector_trailer[7] >> 3) & 0x04)
|
||||||
| ((sector_trailer[8] >> 0) & 0x02)
|
| ((sector_trailer[8] >> 0) & 0x02)
|
||||||
| ((sector_trailer[8] >> 5) & 0x01);
|
| ((sector_trailer[8] >> 5) & 0x01);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed: case 0x01 - %02x", AC);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed: case 0x01 - %02x", AC);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x02: {
|
case 0x02: {
|
||||||
AC = ((sector_trailer[7] >> 4) & 0x04)
|
AC = ((sector_trailer[7] >> 4) & 0x04)
|
||||||
| ((sector_trailer[8] >> 1) & 0x02)
|
| ((sector_trailer[8] >> 1) & 0x02)
|
||||||
| ((sector_trailer[8] >> 6) & 0x01);
|
| ((sector_trailer[8] >> 6) & 0x01);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed: case 0x02 - %02x", AC);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed: case 0x02 - %02x", AC);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed: Error");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed: Error");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case AC_DATA_READ: {
|
case AC_DATA_READ: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed - AC_DATA_READ: OK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed - AC_DATA_READ: OK");
|
||||||
return ((keytype == AUTHKEYA && !(AC == 0x03 || AC == 0x05 || AC == 0x07))
|
return ((keytype == AUTHKEYA && !(AC == 0x03 || AC == 0x05 || AC == 0x07))
|
||||||
|| (keytype == AUTHKEYB && !(AC == 0x07)));
|
|| (keytype == AUTHKEYB && !(AC == 0x07)));
|
||||||
}
|
}
|
||||||
case AC_DATA_WRITE: {
|
case AC_DATA_WRITE: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed - AC_DATA_WRITE: OK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed - AC_DATA_WRITE: OK");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x00))
|
return ((keytype == AUTHKEYA && (AC == 0x00))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x04 || AC == 0x06 || AC == 0x03)));
|
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x04 || AC == 0x06 || AC == 0x03)));
|
||||||
}
|
}
|
||||||
case AC_DATA_INC: {
|
case AC_DATA_INC: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("IsDataAccessAllowed - AC_DATA_INC: OK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("IsDataAccessAllowed - AC_DATA_INC: OK");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x00))
|
return ((keytype == AUTHKEYA && (AC == 0x00))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x06)));
|
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x06)));
|
||||||
}
|
}
|
||||||
case AC_DATA_DEC_TRANS_REST: {
|
case AC_DATA_DEC_TRANS_REST: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("AC_DATA_DEC_TRANS_REST: OK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("AC_DATA_DEC_TRANS_REST: OK");
|
||||||
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x06 || AC == 0x01))
|
return ((keytype == AUTHKEYA && (AC == 0x00 || AC == 0x06 || AC == 0x01))
|
||||||
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x06 || AC == 0x01)));
|
|| (keytype == AUTHKEYB && (AC == 0x00 || AC == 0x06 || AC == 0x01)));
|
||||||
}
|
}
|
||||||
|
@ -257,7 +271,8 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, tag_response_info_t *
|
||||||
if ((flags & FLAG_4B_UID_IN_DATA) == FLAG_4B_UID_IN_DATA) { // get UID from datain
|
if ((flags & FLAG_4B_UID_IN_DATA) == FLAG_4B_UID_IN_DATA) { // get UID from datain
|
||||||
memcpy(rUIDBCC1, datain, 4);
|
memcpy(rUIDBCC1, datain, 4);
|
||||||
*uid_len = 4;
|
*uid_len = 4;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MifareSimInit - FLAG_4B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_4B_UID_IN_DATA, flags, rUIDBCC1);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MifareSimInit - FLAG_4B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_4B_UID_IN_DATA, flags, rUIDBCC1);
|
||||||
|
|
||||||
|
|
||||||
// save CUID
|
// save CUID
|
||||||
|
@ -275,7 +290,8 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, tag_response_info_t *
|
||||||
memcpy(&rUIDBCC1[1], datain, 3);
|
memcpy(&rUIDBCC1[1], datain, 3);
|
||||||
memcpy(rUIDBCC2, datain + 3, 4);
|
memcpy(rUIDBCC2, datain + 3, 4);
|
||||||
*uid_len = 7;
|
*uid_len = 7;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MifareSimInit - FLAG_7B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_7B_UID_IN_DATA, flags, rUIDBCC1);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MifareSimInit - FLAG_7B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_7B_UID_IN_DATA, flags, rUIDBCC1);
|
||||||
|
|
||||||
// save CUID
|
// save CUID
|
||||||
*cuid = bytes_to_num(rUIDBCC2, 4);
|
*cuid = bytes_to_num(rUIDBCC2, 4);
|
||||||
|
@ -297,7 +313,8 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, tag_response_info_t *
|
||||||
memcpy(&rUIDBCC2[1], datain + 3, 3);
|
memcpy(&rUIDBCC2[1], datain + 3, 3);
|
||||||
memcpy(rUIDBCC3, datain + 6, 4);
|
memcpy(rUIDBCC3, datain + 6, 4);
|
||||||
*uid_len = 10;
|
*uid_len = 10;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MifareSimInit - FLAG_10B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_10B_UID_IN_DATA, flags, rUIDBCC1);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MifareSimInit - FLAG_10B_UID_IN_DATA => Get UID from datain: %02X - Flag: %02X - UIDBCC1: %02X", FLAG_10B_UID_IN_DATA, flags, rUIDBCC1);
|
||||||
|
|
||||||
// save CUID
|
// save CUID
|
||||||
*cuid = bytes_to_num(rUIDBCC3, 4);
|
*cuid = bytes_to_num(rUIDBCC3, 4);
|
||||||
|
@ -520,18 +537,21 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
if (res == 2) { //Field is off!
|
if (res == 2) { //Field is off!
|
||||||
LEDsoff();
|
LEDsoff();
|
||||||
cardSTATE = MFEMUL_NOFIELD;
|
cardSTATE = MFEMUL_NOFIELD;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("cardSTATE = MFEMUL_NOFIELD");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("cardSTATE = MFEMUL_NOFIELD");
|
||||||
continue;
|
continue;
|
||||||
} else if (res == 1) { // button pressed
|
} else if (res == 1) { // button pressed
|
||||||
button_pushed = true;
|
button_pushed = true;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Button pressed");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("Button pressed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WUPA in HALTED state or REQA or WUPA in any other state
|
// WUPA in HALTED state or REQA or WUPA in any other state
|
||||||
if (receivedCmd_len == 1 && ((receivedCmd[0] == ISO14443A_CMD_REQA && cardSTATE != MFEMUL_HALTED) || receivedCmd[0] == ISO14443A_CMD_WUPA)) {
|
if (receivedCmd_len == 1 && ((receivedCmd[0] == ISO14443A_CMD_REQA && cardSTATE != MFEMUL_HALTED) || receivedCmd[0] == ISO14443A_CMD_WUPA)) {
|
||||||
selTimer = GetTickCount();
|
selTimer = GetTickCount();
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("EmSendPrecompiledCmd(&responses[ATQA]);");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("EmSendPrecompiledCmd(&responses[ATQA]);");
|
||||||
EmSendPrecompiledCmd(&responses[ATQA]);
|
EmSendPrecompiledCmd(&responses[ATQA]);
|
||||||
|
|
||||||
// init crypto block
|
// init crypto block
|
||||||
|
@ -550,12 +570,15 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
|
|
||||||
switch (cardSTATE) {
|
switch (cardSTATE) {
|
||||||
case MFEMUL_NOFIELD:
|
case MFEMUL_NOFIELD:
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_NOFIELD");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MFEMUL_NOFIELD");
|
||||||
case MFEMUL_HALTED:
|
case MFEMUL_HALTED:
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_HALTED");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MFEMUL_HALTED");
|
||||||
case MFEMUL_IDLE: {
|
case MFEMUL_IDLE: {
|
||||||
LogTrace(uart->output, uart->len, uart->startTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->endTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->parity, true);
|
LogTrace(uart->output, uart->len, uart->startTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->endTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->parity, true);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_IDLE");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MFEMUL_IDLE");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,7 +672,8 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
// WORK
|
// WORK
|
||||||
case MFEMUL_WORK: {
|
case MFEMUL_WORK: {
|
||||||
|
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] Enter in case");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] Enter in case");
|
||||||
|
|
||||||
if (receivedCmd_len == 0) {
|
if (receivedCmd_len == 0) {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] NO CMD received");
|
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] NO CMD received");
|
||||||
|
@ -898,7 +922,8 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
LED_C_OFF();
|
LED_C_OFF();
|
||||||
cardSTATE = MFEMUL_HALTED;
|
cardSTATE = MFEMUL_HALTED;
|
||||||
cardAUTHKEY = AUTHKEYNONE;
|
cardAUTHKEY = AUTHKEYNONE;
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] cardSTATE = MFEMUL_HALTED");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] cardSTATE = MFEMUL_HALTED");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -911,10 +936,12 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
EmSendCmdPar(response, rats_len, response_par);
|
EmSendCmdPar(response, rats_len, response_par);
|
||||||
} else
|
} else
|
||||||
EmSendCmd(rats, rats_len);
|
EmSendCmd(rats, rats_len);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] RCV RATS => ACK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] RCV RATS => ACK");
|
||||||
} else {
|
} else {
|
||||||
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] RCV RATS => NACK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] RCV RATS => NACK");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -929,28 +956,33 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain) {
|
||||||
EmSendCmdPar(response, receivedCmd_len, response_par);
|
EmSendCmdPar(response, receivedCmd_len, response_par);
|
||||||
} else
|
} else
|
||||||
EmSendCmd(receivedCmd_dec, receivedCmd_len);
|
EmSendCmd(receivedCmd_dec, receivedCmd_len);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] RCV NXP DESELECT => ACK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] RCV NXP DESELECT => ACK");
|
||||||
} else {
|
} else {
|
||||||
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] RCV NXP DESELECT => NACK");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_WORK] RCV NXP DESELECT => NACK");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// case MFEMUL_WORK => command not allowed
|
// case MFEMUL_WORK => command not allowed
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Received command not allowed, nacking");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("Received command not allowed, nacking");
|
||||||
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
EmSend4bit(encrypted_data ? mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA) : CARD_NACK_NA);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// AUTH1
|
// AUTH1
|
||||||
case MFEMUL_AUTH1: {
|
case MFEMUL_AUTH1: {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_AUTH1] Enter case");
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("[MFEMUL_AUTH1] Enter case");
|
||||||
|
|
||||||
if (receivedCmd_len != 8) {
|
if (receivedCmd_len != 8) {
|
||||||
cardSTATE_TO_IDLE();
|
cardSTATE_TO_IDLE();
|
||||||
LogTrace(uart->output, uart->len, uart->startTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->endTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->parity, true);
|
LogTrace(uart->output, uart->len, uart->startTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->endTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->parity, true);
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_AUTH1: receivedCmd_len != 8 (%d) => cardSTATE_TO_IDLE())", receivedCmd_len);
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("MFEMUL_AUTH1: receivedCmd_len != 8 (%d) => cardSTATE_TO_IDLE())", receivedCmd_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -602,10 +602,12 @@ void emlClearMem(void) {
|
||||||
|
|
||||||
uint8_t SectorTrailer(uint8_t blockNo) {
|
uint8_t SectorTrailer(uint8_t blockNo) {
|
||||||
if (blockNo <= MIFARE_2K_MAXBLOCK) {
|
if (blockNo <= MIFARE_2K_MAXBLOCK) {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Sector Trailer for block %d : %d", blockNo, (blockNo | 0x03));
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("Sector Trailer for block %d : %d", blockNo, (blockNo | 0x03));
|
||||||
return (blockNo | 0x03);
|
return (blockNo | 0x03);
|
||||||
} else {
|
} else {
|
||||||
if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Sector Trailer for block %d : %d", blockNo, (blockNo | 0x0f));
|
if (DBGLEVEL >= DBG_EXTENDED)
|
||||||
|
Dbprintf("Sector Trailer for block %d : %d", blockNo, (blockNo | 0x0f));
|
||||||
return (blockNo | 0x0f);
|
return (blockNo | 0x0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,7 +243,7 @@ void printEM410x(uint32_t hi, uint64_t id) {
|
||||||
|
|
||||||
if (!id && !hi) return;
|
if (!id && !hi) return;
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "EM410x%s pattern found", (hi) ? " XL " : "");
|
PrintAndLogEx(SUCCESS, "EM410x%s pattern found", (hi) ? " XL" : "");
|
||||||
|
|
||||||
uint64_t n = 1;
|
uint64_t n = 1;
|
||||||
uint64_t id2lo = 0;
|
uint64_t id2lo = 0;
|
||||||
|
|
|
@ -10,7 +10,6 @@ $1 ~ /^[A-Fa-f0-9]+/ { sub(/\r/, ""); print " '"substr($1,1,12)"'," }
|
||||||
|
|
||||||
END {
|
END {
|
||||||
print "}"
|
print "}"
|
||||||
|
|
||||||
print "---"
|
print "---"
|
||||||
print "-- The keys above have just been pasted in, for completeness sake. They contain duplicates. "
|
print "-- The keys above have just been pasted in, for completeness sake. They contain duplicates. "
|
||||||
print "-- We need to weed the duplicates out before we expose the list to someone who actually wants to use them"
|
print "-- We need to weed the duplicates out before we expose the list to someone who actually wants to use them"
|
||||||
|
|
|
@ -162,7 +162,7 @@ be connected.
|
||||||
2. The adapter button can be used to delete memory so that other add-on
|
2. The adapter button can be used to delete memory so that other add-on
|
||||||
can be searched and connected.<p align='center'>
|
can be searched and connected.<p align='center'>
|
||||||
<img src="https://sneaktechnology.com/wp-content/uploads/2019/06/Button.png" alt="Image of blue shark add-on HC-06 white dongle button" width="200">
|
<img src="https://sneaktechnology.com/wp-content/uploads/2019/06/Button.png" alt="Image of blue shark add-on HC-06 white dongle button" width="200">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
3. After the connection is established, the blue state LED on add-on will
|
3. After the connection is established, the blue state LED on add-on will
|
||||||
turn on solid.
|
turn on solid.
|
||||||
|
@ -212,5 +212,5 @@ The red LED will be extinguished when charging is completed.
|
||||||
|
|
||||||
#### (4) Get better signals
|
#### (4) Get better signals
|
||||||
For the better heat dissipation, we have used a cast metal enclosure for the add-on. As a result Bluetooth wireless signals are sacrificed. For example, if the back of add-on is facing the Bluetooth host, the signal is very bad and the distance will be reduced. The best signal strength can be obtained when the front glass faces the Bluetooth host.
|
For the better heat dissipation, we have used a cast metal enclosure for the add-on. As a result Bluetooth wireless signals are sacrificed. For example, if the back of add-on is facing the Bluetooth host, the signal is very bad and the distance will be reduced. The best signal strength can be obtained when the front glass faces the Bluetooth host.
|
||||||
If the Proxmark3 is not responding, it may be due to a poor Bluetooth connection. To improve performance, try repositioning the Proxmark3 so the glass face is directed toward the host.
|
If the Proxmark3 is not responding, it may be due to a poor Bluetooth connection. To improve performance, try repositioning the Proxmark3 so the glass face is directed toward the host.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue