From cbdcc89ae7404ac1c71a9e3824f8ee28ffb3724a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 10 Apr 2016 13:18:11 +0200 Subject: [PATCH] CHG: free the malloc:d memory in the crc8 function. CHG: use the new GetEMLfrombigbuff method. ADD: added a usage_legic_read --- client/cmdhflegic.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/client/cmdhflegic.c b/client/cmdhflegic.c index 7b58567fe..0262f81c5 100644 --- a/client/cmdhflegic.c +++ b/client/cmdhflegic.c @@ -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 "); + PrintAndLog("Options :"); + PrintAndLog(" : offset in data array to start download from"); + PrintAndLog(" : 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;