From f1170fa79ec3db0bf66eeb91bf77d6e9859fce35 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 18 Mar 2015 20:34:17 +0100 Subject: [PATCH] ADD: "HF MFU CRDBL", Started to add the password for reading blocks. Wasn't used before :( --- client/cmdhfmfu.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/client/cmdhfmfu.c b/client/cmdhfmfu.c index 8dfb9a3b..75080f25 100644 --- a/client/cmdhfmfu.c +++ b/client/cmdhfmfu.c @@ -601,12 +601,16 @@ int CmdTestDES(const char * cmd) // int CmdHF14AMfUCRdBl(const char *Cmd) { + bool hasPwd = FALSE; uint8_t blockNo = -1; + unsigned char key[16]; char cmdp = param_getchar(Cmd, 0); if (strlen(Cmd) < 1 || cmdp == 'h' || cmdp == 'H') { - PrintAndLog("Usage: hf mfu crdbl "); - PrintAndLog(" sample: hf mfu crdbl 0"); + PrintAndLog("Usage: hf mfu crdbl "); + PrintAndLog(""); + PrintAndLog("sample: hf mfu crdbl 0"); + PrintAndLog(" hf mfu crdbl 0 1122334455667788"); return 0; } @@ -621,15 +625,32 @@ int CmdHF14AMfUCRdBl(const char *Cmd) return 1; } - PrintAndLog("--block no: 0x%02X (%d)", (int)blockNo, blockNo); + // key + if ( strlen(Cmd) > 3){ + if (param_gethex(Cmd, 1, key, 16)) { + PrintAndLog("Key must include %d HEX symbols", 16); + return 1; + } else { + hasPwd = TRUE; + } + } + + if ( hasPwd ) + PrintAndLog("--block no: 0x%02X (%d) PWD: %s", (int)blockNo, blockNo, key); + else + PrintAndLog("--block no: 0x%02X (%d)", (int)blockNo, blockNo); //Read Block - UsbCommand e = {CMD_MIFAREU_READBL, {blockNo}}; - SendCommand(&e); - UsbCommand resp_c; - if (WaitForResponseTimeout(CMD_ACK,&resp_c,1500)) { - uint8_t isOK = resp_c.arg[0] & 0xff; - uint8_t *data = resp_c.d.asBytes; + UsbCommand c = {CMD_MIFAREU_READBL, {blockNo}}; + if ( hasPwd ) { + c.arg[1] = 1; + memcpy(c.d.asBytes,key,16); + } + SendCommand(&c); + UsbCommand resp; + if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) { + uint8_t isOK = resp.arg[0] & 0xff; + uint8_t *data = resp.d.asBytes; PrintAndLog("isOk: %02x", isOK); if (isOK) -- 2.39.2