X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/cb8c358f4d31fdc7a388136c7036d57ec431c7ca..7ea7465bbb65045d05fa82b6c31e65d7027c111d:/client/cmdhf14b.c diff --git a/client/cmdhf14b.c b/client/cmdhf14b.c index a6cf7d57..cf865875 100644 --- a/client/cmdhf14b.c +++ b/client/cmdhf14b.c @@ -145,11 +145,25 @@ demodError: int CmdHF14BList(const char *Cmd) { - uint8_t got[TRACE_BUFFER_SIZE]; - GetFromBigBuf(got,sizeof(got),0); - WaitForResponse(CMD_ACK,NULL); - - PrintAndLog("recorded activity:"); + uint8_t *got = malloc(USB_CMD_DATA_SIZE); + + // Query for the actual size of the trace + UsbCommand response; + GetFromBigBuf(got, USB_CMD_DATA_SIZE, 0); + WaitForResponse(CMD_ACK, &response); + uint16_t traceLen = response.arg[2]; + if (traceLen > USB_CMD_DATA_SIZE) { + uint8_t *p = realloc(got, traceLen); + if (p == NULL) { + PrintAndLog("Cannot allocate memory for trace"); + free(got); + return 2; + } + got = p; + GetFromBigBuf(got, traceLen, 0); + WaitForResponse(CMD_ACK,NULL); + } + PrintAndLog("recorded activity: (TraceLen = %d bytes)", traceLen); PrintAndLog(" time :rssi: who bytes"); PrintAndLog("---------+----+----+-----------"); @@ -158,7 +172,7 @@ int CmdHF14BList(const char *Cmd) for(;;) { - if(i >= TRACE_BUFFER_SIZE) { break; } + if(i >= traceLen) { break; } bool isResponse; int timestamp = *((uint32_t *)(got+i)); @@ -175,7 +189,7 @@ int CmdHF14BList(const char *Cmd) if(len > 100) { break; } - if(i + len >= TRACE_BUFFER_SIZE) { + if(i + len >= traceLen) { break; } @@ -218,6 +232,7 @@ int CmdHF14BList(const char *Cmd) prev = timestamp; i += (len + 9); } + free(got); return 0; } @@ -275,11 +290,11 @@ int CmdHF14BCmdRaw (const char *cmd) { UsbCommand resp; uint8_t *recv; UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}}; // len,recv? - uint8_t reply = 1; - uint8_t crc = 0; - uint8_t power = 0; - char buf[5] = ""; - int i = 0; + uint8_t reply=1; + uint8_t crc=0; + uint8_t power=0; + char buf[5]=""; + int i=0; uint8_t data[100] = {0x00}; unsigned int datalen=0, temp; char *hexout; @@ -301,15 +316,15 @@ int CmdHF14BCmdRaw (const char *cmd) { switch (cmd[i+1]) { case 'r': case 'R': - reply = 0; + reply=0; break; case 'c': case 'C': - crc = 1; + crc=1; break; case 'p': case 'P': - power = 1; + power=1; break; default: PrintAndLog("Invalid option"); @@ -336,13 +351,13 @@ int CmdHF14BCmdRaw (const char *cmd) { PrintAndLog("Invalid char on input"); return 1; } - - if (datalen == 0) { + if (datalen == 0) + { PrintAndLog("Missing data input"); - return 1; + return 0; } - - if(crc) { + if(crc) + { uint8_t first, second; ComputeCrc14443(CRC_14443_B, data, datalen, &first, &second); data[datalen++] = first;