]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
CHG: 'hf iclass replay' added help text.
authoriceman1001 <iceman@iuse.se>
Tue, 10 Jan 2017 21:21:16 +0000 (22:21 +0100)
committericeman1001 <iceman@iuse.se>
Tue, 10 Jan 2017 21:21:16 +0000 (22:21 +0100)
CHG: 'hf iclass snoop'  added help text.
CHG: 'hf iclass reader' added help text.
ADD: 'hf iclass reader' added the possibility to read only one tag instead of looping.
CHG: 'sprint_hex_ascii' function now replaces unprintable chars with '.',   added this call to printIclassDumpInfo

client/cmdhficlass.c
client/util.c

index 020ee51ae576e6f1b98cbb777f6949e6b726b9da..acf3de8769c2edfa2f6124f981e12c8c1bb6319f 100644 (file)
@@ -172,6 +172,33 @@ int usage_hf_iclass_managekeys(void) {
        PrintAndLog(" print keys   : hf iclass managekeys p\n");
        return 0;
 }
+int usage_hf_iclass_reader(void) {
+       PrintAndLog("HELP :  Act as a Iclass reader:\n");
+       PrintAndLog("Usage:  hf iclass reader [h] [1]\n");
+       PrintAndLog("Options:");
+       PrintAndLog("    h   This help text");
+       PrintAndLog("    1   read only 1 tag");
+       PrintAndLog("Samples:");
+       PrintAndLog("        hf iclass reader 1");
+       return 0;
+}
+int usage_hf_iclass_replay(void){
+       PrintAndLog("HELP:   Replay a collected mac message");
+       PrintAndLog("Usage:  hf iclass replay [h] <mac>");
+       PrintAndLog("Options:");
+       PrintAndLog("    h       This help text");
+       PrintAndLog("    <mac>   Mac bytes to replay (8 hexsymbols)");
+       PrintAndLog("Samples:");
+       PrintAndLog("        hf iclass replay 00112233");       
+       return 0;
+}
+int usage_hf_iclass_snoop(void){
+       PrintAndLog("HELP:   Snoops the communication between reader and tag");
+       PrintAndLog("Usage:  hf iclass snoop [h]");
+       PrintAndLog("Samples:");
+       PrintAndLog("            hf iclass snoop");     
+       return 0;
+}
 
 int xorbits_8(uint8_t val) {
        uint8_t res = val ^ (val >> 1); //1st pass
@@ -188,6 +215,9 @@ int CmdHFiClassList(const char *Cmd) {
 }
 
 int CmdHFiClassSnoop(const char *Cmd) {
+       char cmdp = param_getchar(Cmd, 0);
+       if (cmdp == 'h' || cmdp == 'H') return usage_hf_iclass_snoop();
+
        UsbCommand c = {CMD_SNOOP_ICLASS};
        SendCommand(&c);
        return 0;
@@ -318,19 +348,18 @@ int HFiClassReader(const char *Cmd, bool loop, bool verbose) {
        return 0;
 }
 
-int CmdHFiClassReader(const char *Cmd) {
-       return HFiClassReader(Cmd, true, true);
+int CmdHFiClassReader(const char *Cmd) {       
+       char cmdp = param_getchar(Cmd, 0);
+       if (cmdp == 'h' || cmdp == 'H') return usage_hf_iclass_reader();
+       bool findone = (cmdp == '1') ? FALSE : TRUE;
+       return HFiClassReader(Cmd, findone, true);
 }
 
 int CmdHFiClassReader_Replay(const char *Cmd) {
        uint8_t readerType = 0;
        uint8_t MAC[4]={0x00, 0x00, 0x00, 0x00};
 
-       if (strlen(Cmd)<1) {
-               PrintAndLog("Usage:  hf iclass replay <MAC>");
-               PrintAndLog("        sample: hf iclass replay 00112233");
-               return 0;
-       }
+       if (strlen(Cmd)<1) return usage_hf_iclass_replay();
 
        if (param_gethex(Cmd, 0, MAC, 8)) {
                PrintAndLog("MAC must include 8 HEX symbols");
@@ -437,12 +466,14 @@ static int readKeyfile(const char *filename, size_t len, uint8_t* buffer) {
 }
 
 int CmdHFiClassDecrypt(const char *Cmd) {
+
+       char opt = param_getchar(Cmd, 0);
+       if (strlen(Cmd)<1 || opt == 'h' || opt == 'H') return usage_hf_iclass_decrypt();
+       
        uint8_t key[16] = { 0 };
        if(readKeyfile("iclass_decryptionkey.bin", 16, key)) return usage_hf_iclass_decrypt();
        
-       PrintAndLog("Decryption file found... ");
-       char opt = param_getchar(Cmd, 0);
-       if (strlen(Cmd)<1 || opt == 'h' || opt == 'H') return usage_hf_iclass_decrypt();
+       PrintAndLog("Decryption file found...");
 
        //Open the tagdump-file
        FILE *f;
@@ -1304,7 +1335,7 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
        printf("------+--+-------------------------+\n");
        while (i <= endblock){
                uint8_t *blk = iclass_dump + (i * 8);
-               printf("Block |%02X| %s|\n", i, sprint_hex(blk, 8) );   
+               printf("Block |%02X| %s\n", i, sprint_hex_ascii(blk, 8) );      
                i++;
        }
        printf("------+--+-------------------------+\n");
index f70b5aed8600a9c0d510d529ae7dd28a56fc28e0..c07981fed90769d93bde3de9802e37a4e8cd4835 100644 (file)
@@ -181,7 +181,18 @@ char *sprint_hex_ascii(const uint8_t *data, const size_t len) {
        char *tmp = buf;
        memset(buf, 0x00, 1024);
        size_t max_len = (len > 1010) ? 1010 : len;
-       sprintf(tmp, "%s| %s", sprint_hex(data, max_len) , data);       
+
+       sprintf(tmp, "%s| ", sprint_hex(data, max_len) );
+       
+       size_t i = 0;
+       size_t pos = (max_len * 3)+2;
+       while(i < max_len){
+               char c = data[i];
+               if ( (c < 32) || (c == 127))
+                       c = '.';
+               sprintf(tmp+pos+i, "%c",  c);
+               ++i;
+       }
        return buf;
 }
 
@@ -284,9 +295,7 @@ int param_getptr(const char *line, int *bg, int *en, int paramnum)
 char param_getchar(const char *line, int paramnum)
 {
        int bg, en;
-       
        if (param_getptr(line, &bg, &en, paramnum)) return 0x00;
-
        return line[bg];
 }
 
@@ -327,7 +336,6 @@ uint8_t param_isdec(const char *line, int paramnum)
 uint8_t param_get8ex(const char *line, int paramnum, int deflt, int base)
 {
        int bg, en;
-
        if (!param_getptr(line, &bg, &en, paramnum)) 
                return strtoul(&line[bg], NULL, base) & 0xff;
        else
@@ -337,7 +345,6 @@ uint8_t param_get8ex(const char *line, int paramnum, int deflt, int base)
 uint32_t param_get32ex(const char *line, int paramnum, int deflt, int base)
 {
        int bg, en;
-
        if (!param_getptr(line, &bg, &en, paramnum)) 
                return strtoul(&line[bg], NULL, base);
        else
@@ -347,7 +354,6 @@ uint32_t param_get32ex(const char *line, int paramnum, int deflt, int base)
 uint64_t param_get64ex(const char *line, int paramnum, int deflt, int base)
 {
        int bg, en;
-
        if (!param_getptr(line, &bg, &en, paramnum)) 
                return strtoull(&line[bg], NULL, base);
        else
@@ -398,7 +404,6 @@ int param_gethex_ex(const char *line, int paramnum, uint8_t * data, int *hexcnt)
 int param_getstr(const char *line, int paramnum, char * str)
 {
        int bg, en;
-
        if (param_getptr(line, &bg, &en, paramnum)) return 0;
        
        memcpy(str, line + bg, en - bg + 1);
Impressum, Datenschutz