]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge pull request #257 from marshmellow42/master
authorIceman <iceman@iuse.se>
Tue, 28 Mar 2017 14:04:27 +0000 (16:04 +0200)
committerGitHub <noreply@github.com>
Tue, 28 Mar 2017 14:04:27 +0000 (16:04 +0200)
split lf paradox/nexwatch into own files

CHANGELOG.md
client/Makefile
client/cmddata.c
client/cmddata.h
client/cmdlf.c
client/cmdlfnexwatch.c [new file with mode: 0644]
client/cmdlfnexwatch.h [new file with mode: 0644]
client/cmdlfparadox.c [new file with mode: 0644]
client/cmdlfparadox.h [new file with mode: 0644]

index 7994c987f2302ecdcd3842933b35eb205076ac4c..19c6f6c82585ba6aef45690bdbdd7b0a79f565b9 100644 (file)
@@ -5,6 +5,8 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 ## [unreleased][unreleased]
 
 ### Added
+- Added lf nexwatch read - reads a nexwatch tag from the antenna
+- Added lf paradox read - reads a paradox tag from the antenna
 - Added lf fdx sim (iceman)
 - Added lf fdx clone - clones an fdx-b animal tag to t55x7 or q5 (iceman)
 - Added lf fdx read - reads a fdx-b tag from the antenna (iceman)
@@ -50,6 +52,8 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 - Added option c to 'hf list' (mark CRC bytes) (piwi)
 
 ### Changed
+- `data psknexwatchdemod` has been moved to `lf nexwatch demod` (reads from graphbuffer)
+- `data fskparadoxdemod` has been moved to `lf paradox demod` (reads from graphbuffer)
 - `data fdxdemod` has been moved to `lf fdx demod` (reads from graphbuffer)
 - `data askgproxiidemod has been moved to `lf gproxii demod` (reads from graphbuffer)
 - `lf indalaclone` has been moved to `lf indala clone`
index d5bfb08668113971abe22bcc4084f3d9cedbbaa0..c8b7a21379b4d27d6011f3034276633c73124cfa 100644 (file)
@@ -99,6 +99,8 @@ CMDSRCS =     crapto1/crapto1.c\
                        cmdlfhitag.c \
                        cmdlfio.c \
                        cmdlfindala.c \
+                       cmdlfnexwatch.c \
+                       cmdlfparadox.c \
                        cmdlfpcf7931.c\
                        cmdlfpresco.c\
                        cmdlfpyramid.c\
index 2444fb32ba3f6b113f0afff7828bbb81b9e2b193..ef1229c267757ec965ba79680b1257c66a07c3a5 100644 (file)
@@ -801,55 +801,6 @@ int CmdFSKrawdemod(const char *Cmd)
        return FSKrawDemod(Cmd, true);
 }
 
-//by marshmellow
-//Paradox Prox demod - FSK RF/50 with preamble of 00001111 (then manchester encoded)
-//print full Paradox Prox ID and some bit format details if found
-int CmdFSKdemodParadox(const char *Cmd)
-{
-       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-       uint32_t hi2=0, hi=0, lo=0;
-
-       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-       size_t BitLen = getFromGraphBuf(BitStream);
-       if (BitLen==0) return 0;
-       //get binary from fsk wave
-       int idx = ParadoxdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
-       if (idx<0){
-               if (g_debugMode){
-                       if (idx==-1){
-                               PrintAndLog("DEBUG: Just Noise Detected");     
-                       } else if (idx == -2) {
-                               PrintAndLog("DEBUG: Error demoding fsk");
-                       } else if (idx == -3) {
-                               PrintAndLog("DEBUG: Preamble not found");
-                       } else if (idx == -4) {
-                               PrintAndLog("DEBUG: Error in Manchester data");
-                       } else {
-                               PrintAndLog("DEBUG: Error demoding fsk %d", idx);
-                       }
-               }
-               return 0;
-       }
-       if (hi2==0 && hi==0 && lo==0){
-               if (g_debugMode) PrintAndLog("DEBUG: Error - no value found");
-               return 0;
-       }
-       uint32_t fc = ((hi & 0x3)<<6) | (lo>>26);
-       uint32_t cardnum = (lo>>10)&0xFFFF;
-       uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
-       uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
-       uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
-
-       PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
-               hi>>10, (hi & 0x3)<<26 | (lo>>10), fc, cardnum, (lo>>2) & 0xFF, rawHi2, rawHi, rawLo);
-       setDemodBuf(BitStream,BitLen,idx);
-       if (g_debugMode){ 
-               PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx, BitLen);
-               printDemodBuff();
-       }
-       return 1;
-}
-
 //by marshmellow
 //attempt to psk1 demod graph buffer
 int PSKDemod(const char *Cmd, bool verbose)
@@ -898,45 +849,6 @@ int PSKDemod(const char *Cmd, bool verbose)
        return 1;
 }
 
-int CmdPSKNexWatch(const char *Cmd)
-{
-       if (!PSKDemod("", false)) return 0;
-       uint8_t preamble[28] = {0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-       size_t startIdx = 0, size = DemodBufferLen; 
-       bool invert = false;
-       if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)){
-               // if didn't find preamble try again inverting
-               if (!PSKDemod("1", false)) return 0; 
-               size = DemodBufferLen;
-               if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)) return 0;
-               invert = true;
-       } 
-       if (size != 128) return 0;
-       setDemodBuf(DemodBuffer, size, startIdx+4);
-       startIdx = 8+32; //4 = extra i added, 8 = preamble, 32 = reserved bits (always 0)
-       //get ID
-       uint32_t ID = 0;
-       for (uint8_t wordIdx=0; wordIdx<4; wordIdx++){
-               for (uint8_t idx=0; idx<8; idx++){
-                       ID = (ID << 1) | DemodBuffer[startIdx+wordIdx+(idx*4)];
-               }       
-       }
-       //parity check (TBD)
-
-       //checksum check (TBD)
-
-       //output
-       PrintAndLog("NexWatch ID: %d", ID);
-       if (invert){
-               PrintAndLog("Had to Invert - probably NexKey");
-               for (uint8_t idx=0; idx<size; idx++)
-                       DemodBuffer[idx] ^= 1;
-       } 
-
-       CmdPrintDemodBuff("x");
-       return 1;
-}
-
 // by marshmellow
 // takes 3 arguments - clock, invert, maxErr as integers
 // attempts to demodulate nrz only
@@ -1626,7 +1538,6 @@ static command_t CommandTable[] =
        {"dec",             CmdDec,             1, "Decimate samples"},
        {"detectclock",     CmdDetectClockRate, 1, "[modulation] Detect clock rate of wave in GraphBuffer (options: 'a','f','n','p' for ask, fsk, nrz, psk respectively)"},
        //{"fskfcdetect",   CmdFSKfcDetect,     1, "Try to detect the Field Clock of an FSK wave"},
-       {"fskparadoxdemod", CmdFSKdemodParadox, 1, "Demodulate a Paradox FSK tag from GraphBuffer"},
        {"getbitstream",    CmdGetBitStream,    1, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"},
        {"grid",            CmdGrid,            1, "<x> <y> -- overlay grid on graph window, use zero value to turn off either"},
        {"hexsamples",      CmdHexsamples,      0, "<bytes> [<offset>] -- Dump big buffer as hex bytes"},
@@ -1641,7 +1552,6 @@ static command_t CommandTable[] =
        {"norm",            CmdNorm,            1, "Normalize max/min to +/-128"},
        {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
        {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] [o] <offset> [l] <length> -- print the data in the DemodBuffer - 'x' for hex output"},
-       {"psknexwatchdemod",CmdPSKNexWatch,     1, "Demodulate a NexWatch tag (nexkey, quadrakey) (PSK1) from GraphBuffer"},
        {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
        {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
        {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
index 86d905b11cec342d7df7b454432f2f92108005ee..e03ab02cb3d171c358c8c9003b1c3c0607086fbc 100644 (file)
@@ -32,12 +32,9 @@ int CmdBitsamples(const char *Cmd);
 int CmdBuffClear(const char *Cmd);
 int CmdDec(const char *Cmd);
 int CmdDetectClockRate(const char *Cmd);
-int CmdFDXBdemodBI(const char *Cmd);
-int CmdFSKdemodParadox(const char *Cmd);
 int CmdFSKrawdemod(const char *Cmd);
 int CmdPSK1rawDemod(const char *Cmd);
 int CmdPSK2rawDemod(const char *Cmd);
-int CmdPSKNexWatch(const char *Cmd);
 int CmdGrid(const char *Cmd);
 int CmdGetBitStream(const char *Cmd);
 int CmdHexsamples(const char *Cmd);
index d8e78be15eca8b6f67e6772beec889909329be89..341f1fe4a61c478cb4667754fc32c5a5a3ad2c02 100644 (file)
@@ -38,6 +38,8 @@
 #include "cmdlfindala.h" // for indala menu
 #include "cmdlfgproxii.h"// for gproxii menu
 #include "cmdlffdx.h"    // for fdx-b menu
+#include "cmdlfparadox.h"// for paradox menu
+#include "cmdlfnexwatch.h"//for nexwatch menu
 
 bool g_lf_threshold_set = false;
 static int CmdHelp(const char *Cmd);
@@ -1051,6 +1053,8 @@ static command_t CommandTable[] =
        {"hitag",       CmdLFHitag,         1, "{ Hitag CHIPs...             }"},
        {"io",          CmdLFIO,            1, "{ ioProx RFIDs...            }"},
        {"indala",      CmdLFINDALA,        1, "{ Indala RFIDs...            }"},
+       {"nexwatch",    CmdLFNexWatch,      1, "{ NexWatch RFIDs...          }"},
+       {"paradox",     CmdLFParadox,       1, "{ Paradox RFIDs...           }"},
        {"presco",      CmdLFPresco,        1, "{ Presco RFIDs...            }"},
        {"pcf7931",     CmdLFPCF7931,       1, "{ PCF7931 CHIPs...           }"},
        {"pyramid",     CmdLFPyramid,       1, "{ Farpointe/Pyramid RFIDs... }"},
diff --git a/client/cmdlfnexwatch.c b/client/cmdlfnexwatch.c
new file mode 100644 (file)
index 0000000..030c61c
--- /dev/null
@@ -0,0 +1,91 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency Honeywell NexWatch tag commands
+// PSK1 RF/16, RF/2, 128 bits long
+//-----------------------------------------------------------------------------
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <stdbool.h>
+#include "cmdlfnexwatch.h"
+#include "proxmark3.h"
+#include "ui.h"
+#include "util.h"
+#include "graph.h"
+#include "cmdparser.h"
+#include "cmddata.h"
+#include "cmdlf.h"
+#include "lfdemod.h"
+
+static int CmdHelp(const char *Cmd);
+
+int CmdPSKNexWatch(const char *Cmd)
+{
+       if (!PSKDemod("", false)) return 0;
+       uint8_t preamble[28] = {0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       size_t startIdx = 0, size = DemodBufferLen; 
+       bool invert = false;
+       if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)){
+               // if didn't find preamble try again inverting
+               if (!PSKDemod("1", false)) return 0; 
+               size = DemodBufferLen;
+               if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)) return 0;
+               invert = true;
+       }
+       if (size != 128) return 0;
+       setDemodBuf(DemodBuffer, size, startIdx+4);
+       startIdx = 8+32; //4 = extra i added, 8 = preamble, 32 = reserved bits (always 0)
+       //get ID
+       uint32_t ID = 0;
+       for (uint8_t wordIdx=0; wordIdx<4; wordIdx++){
+               for (uint8_t idx=0; idx<8; idx++){
+                       ID = (ID << 1) | DemodBuffer[startIdx+wordIdx+(idx*4)];
+               }       
+       }
+       //parity check (TBD)
+
+       //checksum check (TBD)
+
+       //output
+       PrintAndLog("NexWatch ID: %d", ID);
+       if (invert){
+               PrintAndLog("Had to Invert - probably NexKey");
+               for (uint8_t idx=0; idx<size; idx++)
+                       DemodBuffer[idx] ^= 1;
+       } 
+
+       CmdPrintDemodBuff("x");
+       return 1;
+}
+
+//by marshmellow
+//see ASKDemod for what args are accepted
+int CmdNexWatchRead(const char *Cmd) {
+       // read lf silently
+       CmdLFRead("s");
+       // get samples silently
+       getSamples("10000",false);
+       // demod and output viking ID   
+       return CmdPSKNexWatch(Cmd);
+}
+
+static command_t CommandTable[] = {
+       {"help",  CmdHelp,          1, "This help"},
+       {"demod", CmdPSKNexWatch,   1, "Demodulate a NexWatch tag (nexkey, quadrakey) from the GraphBuffer"},
+       {"read",  CmdNexWatchRead,  0, "Attempt to Read and Extract tag data from the antenna"},
+       {NULL, NULL, 0, NULL}
+};
+
+int CmdLFNexWatch(const char *Cmd) {
+       CmdsParse(CommandTable, Cmd);
+       return 0;
+}
+
+int CmdHelp(const char *Cmd) {
+       CmdsHelp(CommandTable);
+       return 0;
+}
diff --git a/client/cmdlfnexwatch.h b/client/cmdlfnexwatch.h
new file mode 100644 (file)
index 0000000..99d5400
--- /dev/null
@@ -0,0 +1,14 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency Honeywell NexWatch tag commands
+//-----------------------------------------------------------------------------
+#ifndef CMDLFNEXWATCH_H__
+#define CMDLFNEXWATCH_H__
+extern int CmdLFNexWatch(const char *Cmd);
+extern int CmdPSKNexWatch(const char *Cmd);
+extern int CmdNexWatchRead(const char *Cmd);
+#endif
diff --git a/client/cmdlfparadox.c b/client/cmdlfparadox.c
new file mode 100644 (file)
index 0000000..5225820
--- /dev/null
@@ -0,0 +1,97 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency Paradox tag commands
+//-----------------------------------------------------------------------------
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include "cmdlfparadox.h"
+#include "proxmark3.h"
+#include "ui.h"
+#include "util.h"
+#include "graph.h"
+#include "cmdparser.h"
+#include "cmddata.h"
+#include "cmdlf.h"
+#include "lfdemod.h"
+static int CmdHelp(const char *Cmd);
+
+//by marshmellow
+//Paradox Prox demod - FSK RF/50 with preamble of 00001111 (then manchester encoded)
+//print full Paradox Prox ID and some bit format details if found
+int CmdFSKdemodParadox(const char *Cmd)
+{
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       uint32_t hi2=0, hi=0, lo=0;
+
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       //get binary from fsk wave
+       int idx = ParadoxdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
+       if (idx<0){
+               if (g_debugMode){
+                       if (idx==-1){
+                               PrintAndLog("DEBUG: Just Noise Detected");     
+                       } else if (idx == -2) {
+                               PrintAndLog("DEBUG: Error demoding fsk");
+                       } else if (idx == -3) {
+                               PrintAndLog("DEBUG: Preamble not found");
+                       } else if (idx == -4) {
+                               PrintAndLog("DEBUG: Error in Manchester data");
+                       } else {
+                               PrintAndLog("DEBUG: Error demoding fsk %d", idx);
+                       }
+               }
+               return 0;
+       }
+       if (hi2==0 && hi==0 && lo==0){
+               if (g_debugMode) PrintAndLog("DEBUG: Error - no value found");
+               return 0;
+       }
+       uint32_t fc = ((hi & 0x3)<<6) | (lo>>26);
+       uint32_t cardnum = (lo>>10)&0xFFFF;
+       uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
+       uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
+       uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
+
+       PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
+               hi>>10, (hi & 0x3)<<26 | (lo>>10), fc, cardnum, (lo>>2) & 0xFF, rawHi2, rawHi, rawLo);
+       setDemodBuf(BitStream,BitLen,idx);
+       if (g_debugMode){ 
+               PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx, BitLen);
+               printDemodBuff();
+       }
+       return 1;
+}
+//by marshmellow
+//see ASKDemod for what args are accepted
+int CmdParadoxRead(const char *Cmd) {
+       // read lf silently
+       CmdLFRead("s");
+       // get samples silently
+       getSamples("10000",false);
+       // demod and output viking ID   
+       return CmdFSKdemodParadox(Cmd);
+}
+
+static command_t CommandTable[] = {
+       {"help",  CmdHelp,            1, "This help"},
+       {"demod", CmdFSKdemodParadox, 1, "Demodulate a Paradox FSK tag from the GraphBuffer"},
+       {"read",  CmdParadoxRead,     0, "Attempt to read and Extract tag data from the antenna"},
+       {NULL, NULL, 0, NULL}
+};
+
+int CmdLFParadox(const char *Cmd) {
+       CmdsParse(CommandTable, Cmd);
+       return 0;
+}
+
+int CmdHelp(const char *Cmd) {
+       CmdsHelp(CommandTable);
+       return 0;
+}
diff --git a/client/cmdlfparadox.h b/client/cmdlfparadox.h
new file mode 100644 (file)
index 0000000..997787f
--- /dev/null
@@ -0,0 +1,14 @@
+//-----------------------------------------------------------------------------
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Low frequency Paradox tag commands
+//-----------------------------------------------------------------------------
+#ifndef CMDLFPARADOX_H__
+#define CMDLFPARADOX_H__
+extern int CmdLFParadox(const char *Cmd);
+extern int CmdFSKdemodParadox(const char *Cmd);
+extern int CmdParadoxRead(const char *Cmd);
+#endif
Impressum, Datenschutz