]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhflegic.c
CHG: free the malloc:d memory in the crc8 function.
[proxmark3-svn] / client / cmdhflegic.c
index 7b58567fe10d6b503bb65c24eedefa7d9524d0ba..0262f81c5560a7e1160b9dde859d7fb9f8d26e04 100644 (file)
@@ -38,9 +38,20 @@ int usage_legic_load(void){
        return 0;
 }
 
+int usage_legic_read(void){    
+       PrintAndLog("Read data from a legic tag.");
+       PrintAndLog("Usage:  hf legic read <offset> <num of bytes>");
+       PrintAndLog("Options :");
+       PrintAndLog("  <offset>        : offset in data array to start download from");
+       PrintAndLog("  <num of bytes>  : number of bytes to download");
+       PrintAndLog("");
+       PrintAndLog(" sample: hf legic read");
+       return 0;
+}
+
 /*
  *  Output BigBuf and deobfuscate LEGIC RF tag data.
- *   This is based on information given in the talk held
+ *  This is based on information given in the talk held
  *  by Henryk Ploetz and Karsten Nohl at 26c3
  */
 int CmdLegicDecode(const char *Cmd) {
@@ -53,11 +64,11 @@ int CmdLegicDecode(const char *Cmd) {
        int crc = 0;
        int wrp = 0;
        int wrc = 0;
-       uint8_t data_buf[1200]; // receiver buffer,  should be 1024..
+       uint8_t data_buf[1024]; // receiver buffer,  should be 1024..
        char token_type[4];
 
-       // copy data from proxmark into buffer
-       GetFromBigBuf(data_buf, sizeof(data_buf), 0);
+       // download EML memory, where the "legic read" command puts the data.
+       GetEMLFromBigBuf(data_buf, sizeof(data_buf), 0);
        if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2000)){
                PrintAndLog("Command execute timeout");
                return 1;
@@ -132,6 +143,8 @@ int CmdLegicDecode(const char *Cmd) {
 
        print_hex_break( data_buf, 33, 16);
        
+       return 0;
+       
        PrintAndLog("\nADF: User Area");
        PrintAndLog("------------------------------------------------------");
        i = 22;  
@@ -236,6 +249,13 @@ int CmdLegicDecode(const char *Cmd) {
 }
 
 int CmdLegicRFRead(const char *Cmd) {
+       
+       // params:
+       // offset in data
+       // number of bytes.
+       char cmdp = param_getchar(Cmd, 0);
+       if ( cmdp == 'H' || cmdp == 'h' ) return usage_legic_read();
+       
        int byte_count=0, offset=0;
        sscanf(Cmd, "%i %i", &offset, &byte_count);
        if(byte_count == 0) byte_count = -1;
Impressum, Datenschutz