]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhf.c
Merge pull request #462 from pwpiwi/fix_hfmfsim
[proxmark3-svn] / client / cmdhf.c
index caae08e5dba137c1c96529e3a0fbd6e86fa60b19..168296baf0d5e3bb1a30a3cc96211e3366f3e6c8 100644 (file)
@@ -8,11 +8,16 @@
 // High frequency commands
 //-----------------------------------------------------------------------------
 
 // High frequency commands
 //-----------------------------------------------------------------------------
 
+#include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include "proxmark3.h"
 #include <stdio.h>
 #include <string.h>
 #include "proxmark3.h"
-#include "graph.h"
+#include "util.h"
+#include "data.h"
 #include "ui.h"
 #include "ui.h"
+#include "iso14443crc.h"
+#include "parity.h"
+#include "cmdmain.h"
 #include "cmdparser.h"
 #include "cmdhf.h"
 #include "cmdhf14a.h"
 #include "cmdparser.h"
 #include "cmdhf.h"
 #include "cmdhf14a.h"
@@ -477,14 +482,8 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
 
        for (int j = 0; j < data_len && j/16 < 16; j++) {
 
 
        for (int j = 0; j < data_len && j/16 < 16; j++) {
 
-               int oddparity = 0x01;
-               int k;
-
-               for (k=0 ; k<8 ; k++) {
-                       oddparity ^= (((frame[j] & 0xFF) >> k) & 0x01);
-               }
                uint8_t parityBits = parityBytes[j>>3];
                uint8_t parityBits = parityBytes[j>>3];
-               if (protocol != ISO_14443B && (isResponse || protocol == ISO_14443A) && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
+               if (protocol != ISO_14443B && (isResponse || protocol == ISO_14443A) && (oddparity8(frame[j]) != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
                        snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
                } else {
                        snprintf(line[j/16]+(( j % 16) * 4), 110, " %02x ", frame[j]);
                        snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
                } else {
                        snprintf(line[j/16]+(( j % 16) * 4), 110, " %02x ", frame[j]);
@@ -547,7 +546,7 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui
        
        if (showWaitCycles && !isResponse && next_record_is_response(tracepos, trace)) {
                uint32_t next_timestamp = *((uint32_t *)(trace + tracepos));
        
        if (showWaitCycles && !isResponse && next_record_is_response(tracepos, trace)) {
                uint32_t next_timestamp = *((uint32_t *)(trace + tracepos));
-               PrintAndLog(" %9d | %9d | %s | fdt (Frame Delay Time): %d",
+               PrintAndLog(" %10d | %10d | %s | fdt (Frame Delay Time): %d",
                        (EndOfTransmissionTimestamp - first_timestamp),
                        (next_timestamp - first_timestamp),
                        "   ",
                        (EndOfTransmissionTimestamp - first_timestamp),
                        (next_timestamp - first_timestamp),
                        "   ",
@@ -664,16 +663,11 @@ int CmdHFList(const char *Cmd)
 int CmdHFSearch(const char *Cmd){
        int ans = 0;
        PrintAndLog("");
 int CmdHFSearch(const char *Cmd){
        int ans = 0;
        PrintAndLog("");
-       ans = CmdHF14AReader("s");
+       ans = CmdHF14AInfo("s");
        if (ans > 0) {
                PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n");
                return ans;
        }
        if (ans > 0) {
                PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n");
                return ans;
        }
-       ans = HF14BInfo(false);
-       if (ans) {
-               PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
-               return ans;
-       }
        ans = HFiClassReader("", false, false);
        if (ans) {
                PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
        ans = HFiClassReader("", false, false);
        if (ans) {
                PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
@@ -684,10 +678,24 @@ int CmdHFSearch(const char *Cmd){
                PrintAndLog("\nValid ISO15693 Tag Found - Quiting Search\n");
                return ans;
        }
                PrintAndLog("\nValid ISO15693 Tag Found - Quiting Search\n");
                return ans;
        }
+       //14b is longest test currently (and rarest chip type) ... put last
+       ans = HF14BInfo(false);
+       if (ans) {
+               PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
+               return ans;
+       }
        PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
        return 0;
 }
 
        PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
        return 0;
 }
 
+int CmdHFSnoop(const char *Cmd)
+{
+       char * pEnd;
+       UsbCommand c = {CMD_HF_SNIFFER, {strtol(Cmd, &pEnd,0),strtol(pEnd, &pEnd,0),0}};
+       SendCommand(&c);
+       return 0;
+}
+
 static command_t CommandTable[] = 
 {
        {"help",        CmdHelp,                1, "This help"},
 static command_t CommandTable[] = 
 {
        {"help",        CmdHelp,                1, "This help"},
@@ -703,6 +711,7 @@ static command_t CommandTable[] =
        {"tune",        CmdHFTune,              0, "Continuously measure HF antenna tuning"},
        {"list",        CmdHFList,              1, "List protocol data in trace buffer"},
        {"search",      CmdHFSearch,    1, "Search for known HF tags [preliminary]"},
        {"tune",        CmdHFTune,              0, "Continuously measure HF antenna tuning"},
        {"list",        CmdHFList,              1, "List protocol data in trace buffer"},
        {"search",      CmdHFSearch,    1, "Search for known HF tags [preliminary]"},
+       {"snoop",   CmdHFSnoop,     0, "<samples to skip (10000)> <triggers to skip (1)> Generic HF Snoop"},
        {NULL,          NULL,                   0, NULL}
 };
 
        {NULL,          NULL,                   0, NULL}
 };
 
Impressum, Datenschutz