fix nested loop with cards that do not NACK

This commit is contained in:
LW 2019-12-14 01:41:16 -08:00
commit 9b6d1f74da
3 changed files with 13 additions and 2 deletions

View file

@ -895,6 +895,13 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
target_nt[i] = 0;
while(target_nt[i] == 0) { // continue until we have an unambiguous nonce
// break out of the loop on button press or new usb data as
// cards that do not NACK bad keys will get stuck here
if(BUTTON_PRESS() || usb_poll_validate_length()) {
isOK = -2;
break;
}
// prepare next select. No need to power down the card.
if(mifare_classic_halt(pcs, cuid)) {
if (MF_DBGLEVEL >= 1) Dbprintf("Nested: Halt error");

View file

@ -679,7 +679,7 @@ int CmdSriWrite(const char *Cmd) {
uint8_t blockno = -1;
uint8_t data[4] = {0x00};
bool isSrix4k = true;
char str[20];
char str[22];
if (strlen(Cmd) < 1 || cmdp == 'h' || cmdp == 'H') {
PrintAndLog("Usage: hf 14b write <1|2> <BLOCK> <DATA>");

View file

@ -335,7 +335,11 @@ int mfnested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBlockNo,
memcpy(c.d.asBytes, key, 6);
SendCommand(&c);
if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {
if (!WaitForResponseTimeout(CMD_ACK, &resp, 2500)) {
// cards that do not NACK bad keys cause it to get stuck in a loop, so break it out
UsbCommand c = {CMD_PING};
SendCommand(&c);
(void)WaitForResponseTimeout(CMD_ACK,NULL,500);
return -1;
}