]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
add: "lf t55xx info" option to use data from Graphbuffer.
authoriceman1001 <iceman@iuse.se>
Thu, 16 Oct 2014 20:25:38 +0000 (22:25 +0200)
committericeman1001 <iceman@iuse.se>
Thu, 16 Oct 2014 20:25:38 +0000 (22:25 +0200)
add:  "lf t55xx trace"  option to use data from Graphbuffer.

client/cmdlft55xx.c
client/cmdlft55xx.h
client/ui.c

index 3820e590b02e6b21e74090f6fc47fe5337923214..9206fd2ad946e635ef70d82efee8ef83a0b1d902 100644 (file)
@@ -60,15 +60,7 @@ int CmdReadBlk(const char *Cmd)
                GraphBuffer[j] = ((int)data[j]) ;\r
        }\r
        GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
-       \r
-       uint8_t bits[1000] = {0x00};\r
-       uint8_t * bitstream = bits;\r
-       \r
-       manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);\r
-       \r
-       uint32_t bl0     = PackBits(5, 32, bitstream);\r
-       PrintAndLog("     Block %d  : 0x%08X  %s", Block, bl0, sprint_bin(bitstream+5,32) );\r
-       \r
+       CmdIceManchester(Cmd);\r
        RepaintGraphWindow();\r
   return 0;\r
 }\r
@@ -106,13 +98,7 @@ int CmdReadBlkPWD(const char *Cmd)
        }\r
        GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
 \r
-       uint8_t bits[1000] = {0x00};\r
-       uint8_t * bitstream = bits;\r
-       \r
-       manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);  \r
-       \r
-       uint32_t bl0     = PackBits(5, 32, bitstream);\r
-       PrintAndLog("     Block %d  : 0x%08X  %s", Block, bl0, sprint_bin(bitstream+5,32) );\r
+       CmdIceManchester(Cmd);\r
        \r
        RepaintGraphWindow();\r
   return 0;\r
@@ -169,20 +155,32 @@ int CmdWriteBlkPWD(const char *Cmd)
 \r
 int CmdReadTrace(const char *Cmd)\r
 {\r
-       UsbCommand c = {CMD_T55XX_READ_TRACE, {0, 0, 0}};\r
-       SendCommand(&c);\r
-       WaitForResponse(CMD_ACK, NULL);\r
+       char cmdp = param_getchar(Cmd, 0);\r
 \r
-       uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00};\r
+       if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {\r
+               PrintAndLog("Usage:  lf t55xx trace  [use data from Graphbuffer]");\r
+               PrintAndLog("     [use data from Graphbuffer], if not set, try reading data from tag.");\r
+               PrintAndLog("");\r
+               PrintAndLog("        sample: lf t55xx trace");\r
+               PrintAndLog("        sample: lf t55xx trace 1");\r
+               return 0;\r
+       }\r
 \r
-       GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560);  //3560 -- should be offset..\r
-       WaitForResponseTimeout(CMD_ACK,NULL, 1500);\r
+       if ( strlen(Cmd)==0){\r
+               UsbCommand c = {CMD_T55XX_READ_TRACE, {0, 0, 0}};\r
+               SendCommand(&c);\r
+               WaitForResponse(CMD_ACK, NULL);\r
 \r
-       for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) {\r
-               GraphBuffer[j] = ((int)data[j]);\r
-               //GraphBuffer[j] = ((int)data[j]) - 128;\r
+               uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00};\r
+\r
+               GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560);  //3560 -- should be offset..\r
+               WaitForResponseTimeout(CMD_ACK,NULL, 1500);\r
+\r
+               for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) {\r
+                       GraphBuffer[j] = ((int)data[j]);\r
+               }\r
+               GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
        }\r
-       GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
        \r
        uint8_t bits[1000] = {0x00};\r
        uint8_t * bitstream = bits;\r
@@ -247,9 +245,22 @@ int CmdInfo(const char *Cmd){
                Normal mode\r
                Extended mode\r
        */\r
-       // läs block 0 -  data finns i graphbuff\r
-       CmdReadBlk("0");\r
+       char cmdp = param_getchar(Cmd, 0);\r
+\r
+       if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {\r
+               PrintAndLog("Usage:  lf t55xx info  [use data from Graphbuffer]");\r
+               PrintAndLog("     [use data from Graphbuffer], if not set, try reading data from tag.");\r
+               PrintAndLog("");\r
+               PrintAndLog("        sample: lf t55xx info");\r
+               PrintAndLog("        sample: lf t55xx info 1");\r
+               return 0;\r
+       }\r
+\r
+       if ( strlen(Cmd)==0){\r
+               CmdReadBlk("0");\r
+       }\r
        \r
+\r
        uint8_t bits[1000] = {0x00};\r
        uint8_t * bitstream = bits;\r
        \r
@@ -333,13 +344,27 @@ int CmdDump(const char *Cmd){
 }\r
 \r
 int CmdIceFsk(const char *Cmd){\r
-       //uint8_t bits[1000] = {0x00};\r
-       //uint8_t * bitstream = bits;\r
        iceFsk3(GraphBuffer, LF_TRACE_BUFF_SIZE);\r
-       \r
        RepaintGraphWindow();\r
        return 0;\r
 }\r
+int CmdIceManchester(const char *Cmd){\r
+\r
+       int  blockNum = -1;\r
+       uint32_t blockData;\r
+       uint8_t  bits[1000] = {0x00};\r
+       uint8_t * bitstream = bits;\r
+       \r
+       manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);  \r
+    blockData = PackBits(5, 32, bitstream);\r
+       sscanf(Cmd, "%d", &blockNum);\r
+       if ( blockNum > -1){\r
+               PrintAndLog("   Block %d  : 0x%08X  %s", blockNum, blockData, sprint_bin(bitstream+5,32) );\r
+       }else{\r
+               PrintAndLog("   Decoded : 0x%08X  %s", blockData, sprint_bin(bitstream+5,32) );\r
+       }\r
+       return 0;\r
+} \r
 \r
 char * GetBitRateStr(uint32_t id){\r
        static char buf[40];\r
@@ -455,10 +480,11 @@ static command_t CommandTable[] =
   {"rdPWD",  CmdReadBlkPWD,  0, "<block> <password> -- Read T55xx block data with password mode"},\r
   {"wr",     CmdWriteBlk,    0, "<data> <block> -- Write T55xx block data (page 0)"},\r
   {"wrPWD",  CmdWriteBlkPWD, 0, "<data> <block> <password> -- Write T55xx block data with password"},\r
-  {"trace",  CmdReadTrace,   0, "Read T55xx traceability data (page 1 / blk 0-1)"},\r
-  {"info",   CmdInfo,        0, "Read T55xx configuration data (page0 /blk 0)"},\r
+  {"trace",  CmdReadTrace,   0, "[1] Read T55xx traceability data (page 1 / blk 0-1) "},\r
+  {"info",   CmdInfo,        0, "[1] Read T55xx configuration data (page0 /blk 0)"},\r
   {"dump",   CmdDump,        0, "[password] Dump T55xx card block 0-7. optional with password"},\r
   {"fsk",    CmdIceFsk,      0, "FSK demod"},\r
+  {"man",    CmdIceManchester,      0, "Manchester demod"},\r
   {NULL, NULL, 0, NULL}\r
 };\r
 \r
index f4fc3640aa6b3d4fe1ca48dc2c6c60b850b010be..d5c55f114774824b1cf0cc4c4fb6f2a2b3be4f7a 100644 (file)
@@ -19,6 +19,7 @@ int CmdWriteBLkPWD(const char *Cmd);
 int CmdReadTrace(const char *Cmd);\r
 int CmdInfo(const char *Cmd);\r
 int CmdIceFsk(const char *Cmd);\r
+int CmdIceManchester(const char *Cmd);\r
 char * GetBitRateStr(uint32_t id);\r
 char * GetSaferStr(uint32_t id);\r
 char * GetModulationStr( uint32_t id);\r
index 1d85cc05f0eaa5e2ac1d6a1c392862baa15c79be..094b8e56e5814210c133b638adb34f4c18940b2b 100644 (file)
@@ -116,17 +116,14 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        clock = GetT55x7Clock( data, len, high );       
        startindex = DetectFirstTransition(data, len, high);
   
-       //PrintAndLog(" Clock       : %d", clock);
-       //PrintAndLog(" startindex  : %d", startindex);
+       // PrintAndLog(" Clock       : %d", clock);
+       // PrintAndLog(" startindex  : %d", startindex);
        
        if (high != 1)
                bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
        else
                bitlength= ManchesterConvertFrom1(data, len, bitStream, clock, startindex);
 
-       //if ( bitlength > 0 )
-       //      PrintPaddedManchester(bitStream, bitlength, clock);
-
        memcpy(dataout, bitStream, bitlength);
        return bitlength;
 }
@@ -558,8 +555,14 @@ void iceFsk3(int * data, const size_t len){
        int stopOne = j-1;
        
        int fieldlen = stopOne-startOne;
-       printf("FIELD Length: %d \n", fieldlen);
        
+       fieldlen = (fieldlen == 39 || fieldlen == 41)? 40 : fieldlen;
+       fieldlen = (fieldlen == 59 || fieldlen == 51)? 50 : fieldlen;
+       if ( fieldlen != 40 && fieldlen != 50){
+               printf("Detected field Length: %d \n", fieldlen);
+               printf("Can only handle len 40 or 50.  Aborting...");
+               return;
+       }
        
        // FSK sequence start == 000111
        int startPos = 0;
Impressum, Datenschutz