]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlft55xx.c
lf t5xx - icemans update
[proxmark3-svn] / client / cmdlft55xx.c
index 64c999d679427e62f4fb46a54b27f289aa6a5413..1a0c0f584cb6b0db0762039ecc098cc860f2bd64 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdio.h>\r
 #include <string.h>\r
 #include <inttypes.h>\r
+#include <time.h>\r
 #include "proxmark3.h"\r
 #include "ui.h"\r
 #include "graph.h"\r
@@ -261,7 +262,7 @@ int CmdT55xxReadBlock(const char *Cmd) {
 \r
 bool DecodeT55xxBlock(){\r
        \r
-       char buf[8] = {0x00};\r
+       char buf[10] = {0x00};\r
        char *cmdStr = buf;\r
        int ans = 0;\r
        uint8_t bitRate[8] = {8,16,32,40,50,64,100,128};\r
@@ -270,46 +271,46 @@ bool DecodeT55xxBlock(){
 \r
        switch( config.modulation ){\r
                case DEMOD_FSK:\r
-                       sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
+                       snprintf(cmdStr, sizeof(buf),"%d", bitRate[config.bitrate]/2 );\r
                        CmdLtrim(cmdStr);                       \r
-                       sprintf(cmdStr,"%d %d", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d", bitRate[config.bitrate], config.inverted );\r
                        ans = FSKrawDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_FSK1:\r
                case DEMOD_FSK1a:\r
-                       sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
+                       snprintf(cmdStr, sizeof(buf),"%d", bitRate[config.bitrate]/2 );\r
                        CmdLtrim(cmdStr);                       \r
-                       sprintf(cmdStr,"%d %d 8 5", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 8 5", bitRate[config.bitrate], config.inverted );\r
                        ans = FSKrawDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_FSK2:\r
                case DEMOD_FSK2a:\r
-                       sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
+                       snprintf(cmdStr, sizeof(buf),"%d", bitRate[config.bitrate]/2 );\r
                        CmdLtrim(cmdStr);                       \r
-                       sprintf(cmdStr,"%d %d 10 8", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 10 8", bitRate[config.bitrate], config.inverted );\r
                        ans = FSKrawDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_ASK:\r
-                       sprintf(cmdStr,"%d %d 0", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
                        ans = ASKmanDemod(cmdStr, FALSE, FALSE);\r
                        break;\r
                case DEMOD_PSK1:\r
-                       sprintf(cmdStr,"%d %d 0", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
                        ans = PSKDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_PSK2: //inverted won't affect this\r
                case DEMOD_PSK3: //not fully implemented\r
-                       sprintf(cmdStr,"%d 0 1", bitRate[config.bitrate] );\r
+                       snprintf(cmdStr, sizeof(buf),"%d 0 1", bitRate[config.bitrate] );\r
                        ans = PSKDemod(cmdStr, FALSE);\r
                        psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
                        break;\r
                case DEMOD_NRZ:\r
-                       sprintf(cmdStr,"%d %d 1", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"%d %d 1", bitRate[config.bitrate], config.inverted );\r
                        ans = NRZrawDemod(cmdStr, FALSE);\r
                        break;\r
                case DEMOD_BI:\r
                case DEMOD_BIa:\r
-                       sprintf(cmdStr,"0 %d %d 0", bitRate[config.bitrate], config.inverted );\r
+                       snprintf(cmdStr, sizeof(buf),"0 %d %d 0", bitRate[config.bitrate], config.inverted );\r
                        ans = ASKbiphaseDemod(cmdStr, FALSE);\r
                        break;\r
                default:\r
@@ -578,7 +579,7 @@ bool test(uint8_t mode, uint8_t *offset){
        return FALSE;\r
 }\r
 \r
-void printT55xxBlock(const char *demodStr){\r
+void printT55xxBlock(const char *blockNum){\r
        \r
        uint8_t i = config.offset;\r
        uint8_t endpos = 32 + i;\r
@@ -596,7 +597,7 @@ void printT55xxBlock(const char *demodStr){
                bits[i - config.offset]=DemodBuffer[i];\r
 \r
        blockData = PackBits(0, 32, bits);\r
-       PrintAndLog("0x%08X  %s [%s]", blockData, sprint_bin(bits,32), demodStr);\r
+       PrintAndLog("[%s] 0x%08X  %s", blockNum, blockData, sprint_bin(bits,32));\r
 }\r
 \r
 int special(const char *Cmd) {\r
@@ -688,16 +689,28 @@ int CmdT55xxReadTrace(const char *Cmd)
        uint32_t bl0     = PackBits(si, 32, DemodBuffer);\r
        uint32_t bl1     = PackBits(si+32, 32, DemodBuffer);\r
        \r
-       uint32_t acl     = PackBits(si,  8, DemodBuffer); si += 8;\r
-       uint32_t mfc     = PackBits(si, 8, DemodBuffer); si += 8;\r
-       uint32_t cid     = PackBits(si, 5, DemodBuffer); si += 5;\r
-       uint32_t icr     = PackBits(si, 3, DemodBuffer); si += 3;\r
-       uint32_t year    = PackBits(si, 4, DemodBuffer); si += 4;\r
-       uint32_t quarter = PackBits(si, 2, DemodBuffer); si += 2;\r
-       uint32_t lotid    = PackBits(si, 14, DemodBuffer); si += 14;\r
-       uint32_t wafer   = PackBits(si, 5, DemodBuffer); si += 5;\r
+       uint32_t acl     = PackBits(si, 8,  DemodBuffer); si += 8;\r
+       uint32_t mfc     = PackBits(si, 8,  DemodBuffer); si += 8;\r
+       uint32_t cid     = PackBits(si, 5,  DemodBuffer); si += 5;\r
+       uint32_t icr     = PackBits(si, 3,  DemodBuffer); si += 3;\r
+       uint32_t year    = PackBits(si, 4,  DemodBuffer); si += 4;\r
+       uint32_t quarter = PackBits(si, 2,  DemodBuffer); si += 2;\r
+       uint32_t lotid   = PackBits(si, 14, DemodBuffer); si += 14;\r
+       uint32_t wafer   = PackBits(si, 5,  DemodBuffer); si += 5;\r
        uint32_t dw      = PackBits(si, 15, DemodBuffer); \r
        \r
+       time_t t = time(NULL);\r
+       struct tm tm = *localtime(&t);\r
+       if ( year > tm.tm_year-110)\r
+               year += 2000;\r
+       else\r
+               year += 2010;\r
+\r
+       if ( acl != 0xE0 ) {\r
+               PrintAndLog("The modulation is most likely wrong since the ACL is not 0xE0. ");\r
+               return 1;\r
+       }\r
+\r
        PrintAndLog("");\r
        PrintAndLog("-- T55xx Trace Information ----------------------------------");\r
        PrintAndLog("-------------------------------------------------------------");\r
@@ -716,8 +729,6 @@ int CmdT55xxReadTrace(const char *Cmd)
        PrintAndLog("     Block 1  : 0x%08X  %s", bl1, sprint_bin(DemodBuffer+config.offset+repeat+32,32) );\r
        PrintAndLog("-------------------------------------------------------------");\r
 \r
-       if ( acl != 0xE0 )\r
-               PrintAndLog("The modulation is most likely wrong since the ACL is not 0xE0. ");\r
        /*\r
        TRACE - BLOCK O\r
                Bits    Definition                                                              HEX\r
@@ -967,8 +978,8 @@ char * GetModelStrFromCID(uint32_t cid){
        static char buf[10];\r
        char *retStr = buf;\r
        \r
-       if (cid == 1) sprintf(retStr,"ATA5577M1");\r
-       if (cid == 2) sprintf(retStr,"ATA5577M2");      \r
+       if (cid == 1) snprintf(retStr, sizeof(buf),"ATA5577M1");\r
+       if (cid == 2) snprintf(retStr, sizeof(buf),"ATA5577M2");        \r
        return buf;\r
 }\r
 \r
Impressum, Datenschutz