X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/74c7ff47703eca6711e29fff5a8c7d1aaa55eeef..d26849d4aec0064880f2ab31c756cc1ef4f134f5:/client/cmdhf.c diff --git a/client/cmdhf.c b/client/cmdhf.c index 16b19f27..1a088676 100644 --- a/client/cmdhf.c +++ b/client/cmdhf.c @@ -36,7 +36,6 @@ int CmdHFTune(const char *Cmd) return 0; } - void annotateIso14443a(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize) { switch(cmd[0]) @@ -87,15 +86,21 @@ void annotateIso14443a(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize) case MIFARE_MAGICWIPEC: snprintf(exp,size,"MAGIC WIPEC"); break; case MIFARE_ULC_AUTH_1 : snprintf(exp,size,"AUTH "); break; case MIFARE_ULC_AUTH_2 : snprintf(exp,size,"AUTH_ANSW"); break; - case MIFARE_ULEV1_AUTH : snprintf(exp,size,"PWD-AUTH"); break; + case MIFARE_ULEV1_AUTH : + if ( cmdsize == 7 ) + snprintf(exp,size,"PWD-AUTH KEY: 0x%02x%02x%02x%02x", cmd[1], cmd[2], cmd[3], cmd[4] ); + else + snprintf(exp,size,"PWD-AUTH"); + break; + case MIFARE_ULEV1_FASTREAD : { - if ( cmdsize >=3 && cmd[2] < 0x21) + if ( cmdsize >=3 && cmd[2] <= 0xE6) snprintf(exp,size,"READ RANGE (%d-%d)",cmd[1],cmd[2]); else snprintf(exp,size,"?"); break; } - case MIFARE_ULEV1_WRITE : { + case MIFARE_ULC_WRITE : { if ( cmd[1] < 0x21 ) snprintf(exp,size,"WRITEBLOCK(%d)",cmd[1]); else @@ -449,11 +454,11 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui if (data_len > 2) { switch (protocol) { case ICLASS: - crcStatus = iclass_CRC_check(isResponse, frame, data_len); + crcStatus = iclass_CRC_check(isResponse, frame, data_len); break; case ISO_14443B: case TOPAZ: - crcStatus = iso14443B_CRC_check(isResponse, frame, data_len); + crcStatus = iso14443B_CRC_check(isResponse, frame, data_len); break; case ISO_14443A: crcStatus = iso14443A_CRC_check(isResponse, frame, data_len); @@ -467,7 +472,6 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui //2 Not crc-command //--- Draw the data column - //char line[16][110]; char line[16][110]; for (int j = 0; j < data_len && j/16 < 16; j++) { @@ -484,27 +488,22 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui } else { snprintf(line[j/16]+(( j % 16) * 4),110, "%02x ", frame[j]); } - } if (markCRCBytes) { - if(crcStatus == 0 || crcStatus == 1) - {//CRC-command + //CRC-command + if(crcStatus == 0 || crcStatus == 1) { char *pos1 = line[(data_len-2)/16]+(((data_len-2) % 16) * 4); - (*pos1) = '['; + (*pos1) = '['; char *pos2 = line[(data_len)/16]+(((data_len) % 16) * 4); sprintf(pos2, "%c", ']'); } } - if(data_len == 0) - { - if(data_len == 0){ - sprintf(line[0],""); - } + if(data_len == 0){ + sprintf(line[0],""); } //--- Draw the CRC column - char *crc = (crcStatus == 0 ? "!crc" : (crcStatus == 1 ? " ok " : " ")); EndOfTransmissionTimestamp = timestamp + duration; @@ -531,9 +530,9 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui (j == num_lines-1) ? crc : " ", (j == num_lines-1) ? explanation : ""); } else { - PrintAndLog(" | | | %-64s| %s| %s", + PrintAndLog(" | | |%-64s | %s| %s", line[j], - (j == num_lines-1)?crc:" ", + (j == num_lines-1) ? crc : " ", (j == num_lines-1) ? explanation : ""); } } @@ -542,7 +541,7 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui if (showWaitCycles && !isResponse && next_record_is_response(tracepos, trace)) { uint32_t next_timestamp = *((uint32_t *)(trace + tracepos)); - PrintAndLog(" %9d | %9d | %s | fdt (Frame Delay Time): %d", + PrintAndLog(" %10d | %10d | %s |fdt (Frame Delay Time): %d", (EndOfTransmissionTimestamp - first_timestamp), (next_timestamp - first_timestamp), " ", @@ -656,6 +655,32 @@ int CmdHFList(const char *Cmd) return 0; } +int CmdHFSearch(const char *Cmd){ + int ans = 0; + PrintAndLog(""); + ans = CmdHF14AReader("s"); + if (ans > 0) { + PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n"); + return ans; + } + ans = HFiClassReader("", false, false); + if (ans) { + PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n"); + return ans; + } + ans = HF15Reader("", false); + if (ans) { + PrintAndLog("\nValid ISO15693 Tag Found - Quiting Search\n"); + return ans; + } + + + //14b has issues currently... + //ans = CmdHF14BRead(Cmd); + //if (ans > 0) return ans; + + return 0; +} static command_t CommandTable[] = { @@ -672,6 +697,7 @@ static command_t CommandTable[] = {"topaz", CmdHFTopaz, 1, "{ TOPAZ (NFC Type 1) RFIDs... }"}, {"tune", CmdHFTune, 0, "Continuously measure HF antenna tuning"}, {"list", CmdHFList, 1, "List protocol data in trace buffer"}, + {"search", CmdHFSearch, 1, "Search for known HF tags [preliminary]"}, {NULL, NULL, 0, NULL} };