]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlfem4x.c
FIXED: Merged all Holimans code-review issues which should fix a lot of memoryleaks.
[proxmark3-svn] / client / cmdlfem4x.c
index 1ce937d97e58350508d28c5b90dd46ef5ceac260..d371bf279067bc3fe2cd829d60860588de60ee3a 100644 (file)
@@ -1,4 +1,4 @@
-//-----------------------------------------------------------------------------
+ //-----------------------------------------------------------------------------
 // Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
 //
 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
@@ -57,7 +57,8 @@ int CmdEM410xRead(const char *Cmd)
 
   /* get clock */
   clock = GetClock(Cmd, high, 0);
-
+  
   /* parity for our 4 columns */
   parity[0] = parity[1] = parity[2] = parity[3] = 0;
   header = rows = 0;
@@ -195,15 +196,33 @@ retest:
  *   0                     <-- stop bit, end of tag
  */
 int CmdEM410xSim(const char *Cmd)
-{
-  int i, n, j, h, binary[4], parity[4];
+{      
+       int i, n, j, h, binary[4], parity[4];
+
+       char cmdp = param_getchar(Cmd, 0);
+       uint8_t uid[5] = {0x00};
 
+       if (cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  lf em4x sim <UID>");
+               PrintAndLog("");
+               PrintAndLog("     sample: lf em4x sim 0F0368568B");
+               return 0;
+       }
+
+       if (param_gethex(Cmd, 0, uid, 10)) {
+               PrintAndLog("UID must include 10 HEX symbols");
+               return 0;
+       }
+       
+       PrintAndLog("Starting simulating with UID %02X %02X %02X %02X %02X", uid[0],uid[1],uid[2],uid[3],uid[4]);
+       
+  
   /* clock is 64 in EM410x tags */
   int clock = 64;
 
   /* clear our graph */
-  ClearGraph(0);
-
+  ClearGraph(1);
+  
   /* write it out a few times */
   for (h = 0; h < 4; h++)
   {
@@ -247,7 +266,7 @@ int CmdEM410xSim(const char *Cmd)
   }
 
   /* modulate that biatch */
-  CmdManchesterMod("");
+  CmdManchesterMod("64");
 
   /* booyah! */
   RepaintGraphWindow();
@@ -271,8 +290,14 @@ int CmdEM410xWatch(const char *Cmd)
        int read_h = (*Cmd == 'h');
        do
        {
+               if (ukbhit()) {
+                       printf("\naborted via keyboard!\n");
+                       break;
+               }
+               
                CmdLFRead(read_h ? "h" : "");
-               CmdSamples("16000");    
+               CmdSamples("16000");
+               
        } while (
                !CmdEM410xRead("") 
        );
@@ -338,7 +363,7 @@ int CmdEM4x50Read(const char *Cmd)
       ++i;
     while ((GraphBuffer[i] > low) && (i<GraphTraceLen))
       ++i;
-    if (j>(MAX_GRAPH_TRACE_LEN/64)) {
+    if (j>=(MAX_GRAPH_TRACE_LEN/64)) {
       break;
     }
     tmpbuff[j++]= i - start;
@@ -591,7 +616,7 @@ int CmdWriteWord(const char *Cmd)
     return 1;
   }
   
-  PrintAndLog("Writting word %d with data %08X", Word, Data);
+  PrintAndLog("Writing word %d with data %08X", Word, Data);
   
   c.cmd = CMD_EM4X_WRITE_WORD;
   c.d.asBytes[0] = 0x0; //Normal mode
@@ -604,7 +629,7 @@ int CmdWriteWord(const char *Cmd)
 
 int CmdWriteWordPWD(const char *Cmd)
 {
-  int Word = 8; //default to invalid word
+  int Word = 16; //default to invalid word
   int Data = 0xFFFFFFFF; //default to blank data
   int Password = 0xFFFFFFFF; //default to blank password
   UsbCommand c;
@@ -616,7 +641,7 @@ int CmdWriteWordPWD(const char *Cmd)
     return 1;
   }
   
-  PrintAndLog("Writting word %d with data %08X and password %08X", Word, Data, Password);
+  PrintAndLog("Writing word %d with data %08X and password %08X", Word, Data, Password);
   
   c.cmd = CMD_EM4X_WRITE_WORD;
   c.d.asBytes[0] = 0x1; //Password mode
Impressum, Datenschutz