]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
added automatically saving the hitag2 memory content to file
authorroel@libnfc.org <roel@libnfc.org@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Sun, 9 Dec 2012 21:25:29 +0000 (21:25 +0000)
committerroel@libnfc.org <roel@libnfc.org@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Sun, 9 Dec 2012 21:25:29 +0000 (21:25 +0000)
armsrc/hitag2.c
client/cmdlfhitag.c
client/proxmark3.c

index 37eb211c821fec35f7bf82d19b0f127185dcb5bc..6f5557f61b04472f48aaad5c18d0759129cdc72e 100644 (file)
@@ -27,6 +27,7 @@ static bool bQuiet;
 bool bCrypto;
 bool bAuthenticating;
 bool bPwd;
 bool bCrypto;
 bool bAuthenticating;
 bool bPwd;
+bool bSuccessful;
 
 struct hitag2_tag {
        uint32_t uid;
 
 struct hitag2_tag {
        uint32_t uid;
@@ -477,8 +478,8 @@ bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen)
                                *txlen = 32;
                                memcpy(tx,password,4);
                                bPwd = true;
                                *txlen = 32;
                                memcpy(tx,password,4);
                                bPwd = true;
-                                memcpy(tag.sectors[blocknr],rx,4);
-                                blocknr++;
+        memcpy(tag.sectors[blocknr],rx,4);
+        blocknr++;
                        } else {
                                
                        if(blocknr == 1){
                        } else {
                                
                        if(blocknr == 1){
@@ -491,7 +492,7 @@ bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen)
                        blocknr++;
                        if (blocknr > 7) {
                          DbpString("Read succesful!");
                        blocknr++;
                        if (blocknr > 7) {
                          DbpString("Read succesful!");
-                         // We are done... for now
+        bSuccessful = true;
                          return false;
                        }
                        *txlen = 10;
                          return false;
                        }
                        *txlen = 10;
@@ -553,7 +554,7 @@ bool hitag2_crypto(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) {
         }
         if (blocknr > 7) {
           DbpString("Read succesful!");
         }
         if (blocknr > 7) {
           DbpString("Read succesful!");
-          // We are done... for now
+          bSuccessful = true;
           return false;
         }
         *txlen = 10;
           return false;
         }
         *txlen = 10;
@@ -1074,7 +1075,10 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
        int t_wait = HITAG_T_WAIT_MAX;
        bool bStop;
        bool bQuitTraceFull = false;
        int t_wait = HITAG_T_WAIT_MAX;
        bool bStop;
        bool bQuitTraceFull = false;
-       
+  
+  // Reset the return status
+  bSuccessful = false;
+  
        // Clean up trace and prepare it for storing frames
   iso14a_set_tracing(TRUE);
   iso14a_clear_trace();
        // Clean up trace and prepare it for storing frames
   iso14a_set_tracing(TRUE);
   iso14a_clear_trace();
@@ -1172,26 +1176,26 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
        lastbit = 1;
        bStop = false;
 
        lastbit = 1;
        bStop = false;
 
-       // Tag specific configuration settings (sof, timings, etc.)
-       if (htf < 10){
-               // hitagS settings
-               reset_sof = 1;
-               t_wait = 200;
-               DbpString("Configured for hitagS reader");
-       } else if (htf < 20) {
-               // hitag1 settings
-               reset_sof = 1;
-               t_wait = 200;
-               DbpString("Configured for hitag1 reader");
-       } else if (htf < 30) {
-               // hitag2 settings
-               reset_sof = 4;
-               t_wait = HITAG_T_WAIT_2;
-               DbpString("Configured for hitag2 reader");
+  // Tag specific configuration settings (sof, timings, etc.)
+  if (htf < 10){
+    // hitagS settings
+    reset_sof = 1;
+    t_wait = 200;
+    DbpString("Configured for hitagS reader");
+  } else if (htf < 20) {
+    // hitag1 settings
+    reset_sof = 1;
+    t_wait = 200;
+    DbpString("Configured for hitag1 reader");
+  } else if (htf < 30) {
+    // hitag2 settings
+    reset_sof = 4;
+    t_wait = HITAG_T_WAIT_2;
+    DbpString("Configured for hitag2 reader");
        } else {
        } else {
-        Dbprintf("Error, unknown hitag reader type: %d",htf);
-        return;
-    }
+    Dbprintf("Error, unknown hitag reader type: %d",htf);
+    return;
+  }
                
        while(!bStop && !BUTTON_PRESS()) {
                // Watchdog hit
                
        while(!bStop && !BUTTON_PRESS()) {
                // Watchdog hit
@@ -1336,7 +1340,7 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
        AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;
        AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
        AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;
        AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-       
-//     Dbprintf("frame received: %d",frame_count);
-//     DbpString("All done");
+       Dbprintf("frame received: %d",frame_count);
+  DbpString("All done");
+  cmd_send(CMD_ACK,bSuccessful,0,0,(byte_t*)tag.sectors,48);
 }
 }
index 2541ce59fd7abea6efc8b61333720e040a4e23f6..1ee884017da9615c3f51460f03848775cdf5f31c 100644 (file)
@@ -30,18 +30,6 @@ int CmdLFHitagList(const char *Cmd)
   GetFromBigBuf(got,sizeof(got),0);
   WaitForResponse(CMD_ACK,NULL);
 
   GetFromBigBuf(got,sizeof(got),0);
   WaitForResponse(CMD_ACK,NULL);
 
-  char filename[256];
-  FILE* pf = NULL;
-
-  if (param_getstr(Cmd,0,filename)) {
-    if (strlen(filename) > 0) {
-      if ((pf = fopen(filename,"w")) == NULL) {
-        PrintAndLog("Error: Could not open file [%s]",filename);
-        return 1;
-      }
-    }
-  }
-
   PrintAndLog("recorded activity:");
   PrintAndLog(" ETU     :rssi: who bytes");
   PrintAndLog("---------+----+----+-----------");
   PrintAndLog("recorded activity:");
   PrintAndLog(" ETU     :rssi: who bytes");
   PrintAndLog("---------+----+----+-----------");
@@ -49,6 +37,9 @@ int CmdLFHitagList(const char *Cmd)
   int i = 0;
   int prev = -1;
 
   int i = 0;
   int prev = -1;
 
+  char filename[256];
+  FILE* pf = NULL;
+  
   for (;;) {
     if(i >= 1900) {
       break;
   for (;;) {
     if(i >= 1900) {
       break;
@@ -198,14 +189,14 @@ int CmdLFHitagReader(const char *Cmd) {
                } break;
                default: {
                        PrintAndLog("Error: unkown reader function %d",htf);
                } break;
                default: {
                        PrintAndLog("Error: unkown reader function %d",htf);
-                       PrintAndLog("Hitag reader functions",htf);
-                       PrintAndLog(" HitagS (0*)",htf);
-                       PrintAndLog(" Hitag1 (1*)",htf);
-                       PrintAndLog(" Hitag2 (2*)",htf);
-                       PrintAndLog("  21 <password> (password mode)",htf);
-                       PrintAndLog("  22 <nr> <ar> (authentication)",htf);
-                       PrintAndLog("  23 <key> (authentication) key is in format: ISK high + ISK low",htf);
-                       PrintAndLog("  25 (test recorded authentications)",htf);
+                       PrintAndLog("Hitag reader functions");
+                       PrintAndLog(" HitagS (0*)");
+                       PrintAndLog(" Hitag1 (1*)");
+                       PrintAndLog(" Hitag2 (2*)");
+                       PrintAndLog("  21 <password> (password mode)");
+                       PrintAndLog("  22 <nr> <ar> (authentication)");
+                       PrintAndLog("  23 <key> (authentication) key is in format: ISK high + ISK low");
+                       PrintAndLog("  25 (test recorded authentications)");
                        return 1;
                } break;
        }
                        return 1;
                } break;
        }
@@ -213,7 +204,31 @@ int CmdLFHitagReader(const char *Cmd) {
        // Copy the hitag2 function into the first argument
        c.arg[0] = htf;
 
        // Copy the hitag2 function into the first argument
        c.arg[0] = htf;
 
+  // Send the command to the proxmark
   SendCommand(&c);
   SendCommand(&c);
+  
+  UsbCommand resp;
+  WaitForResponse(CMD_ACK,&resp);
+  
+  // Check the return status, stored in the first argument
+  if (resp.arg[0] == false) return 1;
+    
+  uint32_t id = bytes_to_num(resp.d.asBytes,4);
+  char filename[256];
+  FILE* pf = NULL;
+
+  sprintf(filename,"%08x_%04x.ht2",id,(rand() & 0xffff));
+  if ((pf = fopen(filename,"wb")) == NULL) {
+    PrintAndLog("Error: Could not open file [%s]",filename);
+    return 1;
+  }
+  
+  // Write the 48 tag memory bytes to file and finalize
+  fwrite(resp.d.asBytes,1,48,pf);
+  fclose(pf);
+
+  PrintAndLog("Succesfully saved tag memory to [%s]",filename);
+  
   return 0;
 }
 
   return 0;
 }
 
index 949013ecb975e9fd796fa062f98042a110cbae0e..db37780d2dcdd88a3a4a6a88b9ff33cde48d7477 100644 (file)
@@ -196,7 +196,8 @@ static void *main_loop(void *targ) {
 }
 
 int main(int argc, char* argv[]) {
 }
 
 int main(int argc, char* argv[]) {
-  
+  srand(time(0));
+
   if (argc < 2) {
     printf("syntax: %s <port>\n\n",argv[0]);
     return 1;
   if (argc < 2) {
     printf("syntax: %s <port>\n\n",argv[0]);
     return 1;
Impressum, Datenschutz