+int CmdHF14AFuzz(const char *Cmd) {
+ char formatstr[256] = {0},sendbuf[256] = {0};
+ uint32_t start=0,end=0;
+
+ if (param_getchar(Cmd, 0) == 0) {
+ PrintAndLog("fuzz raw hex data to the card and show response <ONLY for develepers>");
+ PrintAndLog("Usage: hf 14a fuzz <FORMAT> [<start index> <end index>]");
+ PrintAndLog("FORMAT controls the output as in C printf");
+ PrintAndLog("sample: hf 14a fuzz 909F");
+ PrintAndLog(" hf 14a fuzz 00%02x00000000 0 0xFF");
+ return 0;
+ }
+
+ start = param_get8ex(Cmd, 1, 0,16);
+ end = param_get8ex(Cmd, 2, 0,16);
+ param_getstr(Cmd, 0, formatstr);
+
+ for( int i=start;i<=end;++i)
+ {
+ snprintf(sendbuf, sizeof(sendbuf), formatstr, i);
+
+ int len = strlen(sendbuf)/2;
+
+ UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_APDU|ISO14A_NO_DISCONNECT, len, 0}};
+ param_gethex(sendbuf, 0, c.d.asBytes, len*2);
+ PrintAndLog("len:%d raw:",len);
+ PrintAndLog("%s",sprint_hex(c.d.asBytes, len));
+ SendCommand(&c);
+
+ UsbCommand * resp = WaitForResponse(CMD_ACK);
+ PrintAndLog("res:%d",resp->arg[0]);
+
+ while(resp->arg[0] > sizeof(resp->d))
+ {
+ PrintAndLog("%s", sprint_hex(resp->d.asBytes,sizeof(resp->d)));
+
+ resp = WaitForResponse(CMD_ACK);
+ }
+ PrintAndLog("%s", sprint_hex(resp->d.asBytes,resp->arg[0]));
+
+ PrintAndLog("");
+
+ msleep(100);
+ }
+
+ return 0;
+}
+