#include <stdbool.h>
#include <string.h>
#include <stdint.h>
-#include "../common/iso14443crc.h"
+#include "iso14443crc.h"
#include "proxmark3.h"
#include "data.h"
#include "graph.h"
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("---------+----+----+-----------");
for(;;) {
- if(i >= TRACE_BUFFER_SIZE) { break; }
+ if(i >= traceLen) { break; }
bool isResponse;
int timestamp = *((uint32_t *)(got+i));
if(len > 100) {
break;
}
- if(i + len >= TRACE_BUFFER_SIZE) {
+ if(i + len >= traceLen) {
break;
}
prev = timestamp;
i += (len + 9);
}
+ free(got);
return 0;
}
uint8_t power=0;
char buf[5]="";
int i=0;
- uint8_t data[100];
+ uint8_t data[100] = {0x00};
unsigned int datalen=0, temp;
char *hexout;
continue;
}
PrintAndLog("Invalid char on input");
- return 0;
+ return 1;
}
if (datalen == 0)
{
else
PrintAndLog("[%s] Write block %02X [ %s ]", (isSrix4k)?"SRIX4K":"SRI512", blockno, sprint_hex(data,4) );
- sprintf(str, "-c -p 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
+ sprintf(str, "-c 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
CmdHF14BCmdRaw(str);
return 0;