PrintAndLog(" i (Optional) Interactive, means that console will not be returned until simulation finishes or is aborted");\r
PrintAndLog(" x (Optional) Crack, performs the 'reader attack', nr/ar attack against a legitimate reader, fishes out the key(s)");\r
PrintAndLog(" e (Optional) set keys found from 'reader attack' to emulator memory");\r
- PrintAndLog(" f (Optional) get UIDs to use for 'reader attack' from file 'f <filename.txt>'");\r
+ PrintAndLog(" f (Optional) get UIDs to use for 'reader attack' from file 'f <filename.txt>' (implies x and i)");\r
PrintAndLog("samples:");\r
PrintAndLog(" hf mf sim u 0a0a0a0a");\r
PrintAndLog(" hf mf sim u 11223344556677");\r
}\r
\r
int CmdHF14AMf1kSim(const char *Cmd) {\r
+ UsbCommand resp;\r
uint8_t uid[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};\r
uint8_t exitAfterNReads = 0;\r
uint8_t flags = 0;\r
//Validations\r
if(errors) return usage_hf14_mf1ksim();\r
\r
- // attack from file implies nr ar attack...\r
- if (!(flags & FLAG_NR_AR_ATTACK) && attackFromFile) flags |= FLAG_NR_AR_ATTACK;\r
+ // attack from file implies nr ar attack and interactive...\r
+ if (!(flags & FLAG_NR_AR_ATTACK) && attackFromFile) flags |= FLAG_NR_AR_ATTACK | FLAG_INTERACTIVE;\r
\r
- UsbCommand c = {CMD_SIMULATE_MIFARE_CARD, {flags, exitAfterNReads,0}};\r
- UsbCommand resp;\r
-\r
//get uid from file\r
if (attackFromFile) {\r
int count = 0;\r
PrintAndLog("File %s not found or locked", filename);\r
return 1;\r
}\r
- while(!feof(f)){\r
+ PrintAndLog("Loading file and simulating. Press keyboard to abort");\r
+ while(!feof(f) && !ukbhit()){\r
memset(buf, 0, sizeof(buf));\r
memset(uidBuffer, 0, sizeof(uidBuffer));\r
\r
fclose(f);\r
return 2;\r
}\r
- \r
- if (strlen(buf) < uidlen) {\r
- if(strlen(buf) && feof(f))\r
- break;\r
- PrintAndLog("File content error. Block data must include %d HEX symbols", uidlen);\r
- fclose(f);\r
- return 2;\r
+ if(strlen(buf) && feof(f)) break;\r
+\r
+ uidlen = strlen(buf);\r
+ switch(uidlen) {\r
+ case 20: flags = FLAG_10B_UID_IN_DATA; break; //not complete\r
+ case 14: flags = FLAG_7B_UID_IN_DATA; break;\r
+ case 8: flags = FLAG_4B_UID_IN_DATA; break;\r
+ default: \r
+ PrintAndLog("uid in file wrong length at %d",count);\r
+ fclose(f);\r
+ return 2;\r
}\r
- \r
+\r
for (uint8_t i = 0; i < uidlen; i += 2) {\r
sscanf(&buf[i], "%02x", (unsigned int *)&uidBuffer[i / 2]);\r
}\r
\r
- PrintAndLog("mf 1k sim uid: %s, numreads:%d, flags:%d (0x%02x) ",\r
+ PrintAndLog("mf 1k sim uid: %s, numreads:%d, flags:%d (0x%02x) - press button to abort",\r
flags & FLAG_4B_UID_IN_DATA ? sprint_hex(uid,4):\r
flags & FLAG_7B_UID_IN_DATA ? sprint_hex(uid,7): \r
flags & FLAG_10B_UID_IN_DATA ? sprint_hex(uid,10): "N/A"\r
, exitAfterNReads, flags, flags);\r
\r
+ UsbCommand c = {CMD_SIMULATE_MIFARE_CARD, {flags, exitAfterNReads,0}};\r
memcpy(c.d.asBytes, uid, sizeof(uid));\r
clearCommandBuffer();\r
SendCommand(&c);\r
\r
- if(flags & FLAG_INTERACTIVE) {\r
- PrintAndLog("Press pm3-button to abort simulation");\r
- while(! WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
- //We're waiting only 1.5 s at a time, otherwise we get the\r
- // annoying message about "Waiting for a response... "\r
- }\r
- //got a response\r
- if (flags & FLAG_NR_AR_ATTACK) {\r
- nonces_t ar_resp[ATTACK_KEY_COUNT*2];\r
- memcpy(ar_resp, resp.d.asBytes, sizeof(ar_resp));\r
- readerAttack(ar_resp, setEmulatorMem);\r
- }\r
+ while(! WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
+ //We're waiting only 1.5 s at a time, otherwise we get the\r
+ // annoying message about "Waiting for a response... "\r
+ }\r
+ //got a response\r
+ nonces_t ar_resp[ATTACK_KEY_COUNT*2];\r
+ memcpy(ar_resp, resp.d.asBytes, sizeof(ar_resp));\r
+ readerAttack(ar_resp, setEmulatorMem);\r
+ if (resp.arg[1]) {\r
+ PrintAndLog("Device button pressed - quitting");\r
+ fclose(f);\r
+ return 4;\r
}\r
-\r
count++;\r
}\r
fclose(f);\r
flags & FLAG_10B_UID_IN_DATA ? sprint_hex(uid,10): "N/A"\r
, exitAfterNReads, flags, flags);\r
\r
+ UsbCommand c = {CMD_SIMULATE_MIFARE_CARD, {flags, exitAfterNReads,0}};\r
memcpy(c.d.asBytes, uid, sizeof(uid));\r
clearCommandBuffer();\r
SendCommand(&c);\r