]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
mf 1k sim reader attack cleanup
authormarshmellow42 <marshmellowrf@gmail.com>
Sat, 25 Jun 2016 04:53:53 +0000 (00:53 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Sat, 25 Jun 2016 04:53:53 +0000 (00:53 -0400)
add abort options - keyboard & button press.

armsrc/iso14443a.c
client/cmdhfmf.c

index 6216fc4acc51f28b36160b5a5f8858a9c684a6d5..d76bddd51a176c722b33f796ed40dd484358d0d9 100644 (file)
@@ -2504,7 +2504,8 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
        set_tracing(TRUE);
 
        bool finished = FALSE;
-       while (!BUTTON_PRESS() && !finished && !usb_poll_validate_length()) {
+       bool button_pushed = BUTTON_PRESS();
+       while (!button_pushed && !finished && !usb_poll_validate_length()) {
                WDT_HIT();
 
                // find reader field
@@ -2956,6 +2957,7 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
                                break;
                        }
                }
+               button_pushed = BUTTON_PRESS();
        }
 
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@@ -2996,7 +2998,7 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
        if(flags & FLAG_INTERACTIVE)// Interactive mode flag, means we need to send ACK
        {
                //Send the collected ar_nr in the response
-               cmd_send(CMD_ACK,CMD_SIMULATE_MIFARE_CARD,0,0,&ar_nr_resp,sizeof(ar_nr_resp));
+               cmd_send(CMD_ACK,CMD_SIMULATE_MIFARE_CARD,button_pushed,0,&ar_nr_resp,sizeof(ar_nr_resp));
        }
        
 }
index 05202ac5fb34f5a599554813056a1f2e0ab9f764..07d2ab2666173ecddef4c8ba7237e717d2b27bc3 100644 (file)
@@ -1100,7 +1100,7 @@ int usage_hf14_mf1ksim(void) {
        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
@@ -1109,6 +1109,7 @@ int usage_hf14_mf1ksim(void) {
 }\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
@@ -1182,12 +1183,9 @@ int CmdHF14AMf1kSim(const char *Cmd) {
        //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
@@ -1197,7 +1195,8 @@ int CmdHF14AMf1kSim(const char *Cmd) {
                        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
@@ -1208,43 +1207,47 @@ int CmdHF14AMf1kSim(const char *Cmd) {
                                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
@@ -1256,6 +1259,7 @@ int CmdHF14AMf1kSim(const char *Cmd) {
                                                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
Impressum, Datenschutz