X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a11ca2f3057416c07ca03b24ff16229f67d1b3f8..a0a61c91ccefed75187e810cca0e3bcb319ecdcf:/client/cmdhficlass.c diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index a46b7741..89c0f758 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -672,9 +672,9 @@ int CmdHFiClassReader_Dump(const char *Cmd) { return 0; } - if( readStatus & (FLAG_ICLASS_READER_CSN|FLAG_ICLASS_READER_CONF|FLAG_ICLASS_READER_CC)){ + if( readStatus & (FLAG_ICLASS_READER_CSN | FLAG_ICLASS_READER_CONF | FLAG_ICLASS_READER_CC)){ memcpy(tag_data, data, 8*3); - blockno+=2; // 2 to force re-read of block 2 later. (seems to respond differently..) + blockno += 2; // 2 to force re-read of block 2 later. (seems to respond differently..) numblks = data[8]; getMemConfig(data[13], data[12], &maxBlk, &app_areas, &kb); // large memory - not able to dump pages currently @@ -768,10 +768,14 @@ int CmdHFiClassReader_Dump(const char *Cmd) { // add diversified keys to dump if (have_debit_key) memcpy(tag_data+(3*8),div_key,8); if (have_credit_key) memcpy(tag_data+(4*8),c_div_key,8); + + printf("Num of bytes: %u\n", gotBytes); + // print the dump - printf("CSN |00| %s |\n", sprint_hex(tag_data, 8)); - printf("CSN |00| %s |\n", sprint_hex(tag_data, 8)); - printIclassDumpContents(tag_data, 1, (gotBytes/8)-1, gotBytes-8); + printf("------+--+-------------------------+\n"); + printf("CSN |00| %s|\n", sprint_hex(tag_data, 8)); + //printIclassDumpContents(tag_data, 1, (gotBytes/8)-1, gotBytes-8); + printIclassDumpContents(tag_data, 1, (gotBytes/8), gotBytes); if (filename[0] == 0){ snprintf(filename, FILE_PATH_SIZE,"iclass_tagdump-%02x%02x%02x%02x%02x%02x%02x%02x", @@ -1240,17 +1244,16 @@ int CmdHFiClass_loclass(const char *Cmd) { } void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t endblock, size_t filesize) { - uint8_t blockdata[8]; uint8_t mem_config; memcpy(&mem_config, iclass_dump + 13,1); uint8_t maxmemcount; + uint8_t filemaxblock = filesize / 8; if (mem_config & 0x80) maxmemcount = 255; else maxmemcount = 31; - //PrintAndLog ("endblock: %d, filesize: %d, maxmemcount: %d, filemaxblock: %d", endblock,filesize, maxmemcount, filemaxblock); if (startblock == 0) startblock = 6; @@ -1258,19 +1261,20 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e if ((endblock > maxmemcount) || (endblock == 0)) endblock = maxmemcount; - if (endblock > filemaxblock) - endblock = filemaxblock; + // remember endblock needs to relate to zero-index arrays. + if (endblock > filemaxblock-1) + endblock = filemaxblock-1; + + //PrintAndLog ("startblock: %d, endblock: %d, filesize: %d, maxmemcount: %d, filemaxblock: %d",startblock, endblock,filesize, maxmemcount, filemaxblock); int i = startblock; - int j; + printf("------+--+-------------------------+\n"); while (i <= endblock){ - printf("Block |%02X| ",i); - memcpy(blockdata, iclass_dump + (i * 8), 8); - for (j = 0;j < 8;j++) - printf("%02X ", blockdata[j]); - printf("|\n"); + uint8_t *blk = iclass_dump + (i * 8); + printf("Block |%02X| %s|\n", i, sprint_hex(blk, 8) ); i++; } + printf("------+--+-------------------------+\n"); } int usage_hf_iclass_readtagfile() { @@ -1318,8 +1322,9 @@ int CmdHFiClassReadTagFile(const char *Cmd) { fclose(f); uint8_t *csn = dump; - printf("CSN [00] | %s |\n", sprint_hex(csn, 8) ); - printIclassDumpContents(dump,startblock,endblock,bytes_read); + printf("------+--+-------------------------+\n"); + printf("CSN |00| %s|\n", sprint_hex(csn, 8) ); + printIclassDumpContents(dump, startblock, endblock, bytes_read); free(dump); return 0; } @@ -1377,9 +1382,9 @@ static void HFiClassCalcNewKey(uint8_t *CSN, uint8_t *OLDKEY, uint8_t *NEWKEY, u xor_div_key[i] = old_div_key[i] ^ new_div_key[i]; } if (verbose) { - printf("Old Div Key : %s\n",sprint_hex(old_div_key,8)); - printf("New Div Key : %s\n",sprint_hex(new_div_key,8)); - printf("Xor Div Key : %s\n",sprint_hex(xor_div_key,8)); + printf("Old div key : %s\n",sprint_hex(old_div_key,8)); + printf("New div key : %s\n",sprint_hex(new_div_key,8)); + printf("Xor div key : %s\n",sprint_hex(xor_div_key,8)); } } @@ -1397,7 +1402,6 @@ int usage_hf_iclass_calc_newkey(void) { PrintAndLog(" std key to e key read csn: hf iclass calcnewkey o 1122334455667788 n 2233445566778899 e"); PrintAndLog(" std to std read csn : hf iclass calcnewkey o 1122334455667788 n 2233445566778899"); PrintAndLog("NOTE: * = required\n"); - return 1; } @@ -1520,9 +1524,9 @@ static int loadKeys(char *filename) { return 0; } uint8_t i = 0; - for (; i < bytes_read/8; i++){ + for (; i < bytes_read/8; i++) memcpy(iClass_Key_Table[i],dump+(i*8),8); - } + free(dump); PrintAndLog("%u keys loaded", i); return 1; @@ -1547,9 +1551,8 @@ static int saveKeys(char *filename) { static int printKeys(void) { PrintAndLog(""); - for (uint8_t i = 0; i < ICLASS_KEYS_MAX; i++){ + for (uint8_t i = 0; i < ICLASS_KEYS_MAX; i++) PrintAndLog("%u: %s", i, sprint_hex(iClass_Key_Table[i],8)); - } PrintAndLog(""); return 0; } @@ -1666,7 +1669,7 @@ int CmdHFiClassManageKeys(const char *Cmd) { } static command_t CommandTable[] = { - {"help", CmdHelp, 1, "This help"}, + {"help", CmdHelp, 1, "This help"}, {"calcnewkey", CmdHFiClassCalcNewKey, 1, "[options..] Calc Diversified keys (blocks 3 & 4) to write new keys"}, {"clone", CmdHFiClassCloneTag, 0, "[options..] Authenticate and Clone from iClass bin file"}, {"decrypt", CmdHFiClassDecrypt, 1, "[f ] Decrypt tagdump" }, @@ -1677,7 +1680,7 @@ static command_t CommandTable[] = { {"loclass", CmdHFiClass_loclass, 1, "[options..] Use loclass to perform bruteforce of reader attack dump"}, {"managekeys", CmdHFiClassManageKeys, 1, "[options..] Manage the keys to use with iClass"}, {"readblk", CmdHFiClass_ReadBlock, 0, "[options..] Authenticate and Read iClass block"}, - {"reader",CmdHFiClassReader, 0, "Read an iClass tag"}, + {"reader", CmdHFiClassReader, 0, "Read an iClass tag"}, {"readtagfile", CmdHFiClassReadTagFile, 1, "[options..] Display Content from tagfile"}, {"replay", CmdHFiClassReader_Replay, 0, " Read an iClass tag via Reply Attack"}, {"sim", CmdHFiClassSim, 0, "[options..] Simulate iClass tag"},