From fc8c5cdd12428f39dbb67b7e744b2dfdd59b5f23 Mon Sep 17 00:00:00 2001 From: "roel@libnfc.org" Date: Mon, 10 Dec 2012 15:12:32 +0000 Subject: [PATCH] fixed hitag2 dump if one or more blocks are locked --- armsrc/hitag2.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 6f5557f6..05ac1f5e 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -524,11 +524,27 @@ bool hitag2_crypto(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) { case 0: { // Stop if there is no answer while we are in crypto mode (after sending NrAr) if (bCrypto) { - DbpString("Authentication failed!"); - return false; - } - *txlen = 5; - memcpy(tx,"\xc0",nbytes(*txlen)); + // Failed during authentication + if (bAuthenticating) { + DbpString("Authentication failed!"); + return false; + } else { + // Failed reading a block, could be (read/write) locked, skip block and re-authenticate + if (blocknr == 1) { + memcpy(tag.sectors[1],key+2,4); + } else if (blocknr == 2) { + tag.sectors[2][0] = 0x00; + tag.sectors[2][1] = 0x00; + tag.sectors[2][2] = key[0]; + tag.sectors[2][3] = key[1]; + } + blocknr++; + bCrypto = false; + } + } else { + *txlen = 5; + memcpy(tx,"\xc0",nbytes(*txlen)); + } } break; // Received UID, crypto tag answer -- 2.39.2