]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/mifarehost.c
Fix comparison error in fpga_compress
[proxmark3-svn] / client / mifarehost.c
index 7f784850841095713a0a54284259bf9e1b552d05..237979c1bfaaefc13ca0940093c2a47d5b954f40 100644 (file)
@@ -231,28 +231,31 @@ int mfEmlSetMem(uint8_t *data, int blockNum, int blocksCount) {
 \r
 // "MAGIC" CARD\r
 \r
-int mfCSetUID(uint8_t *uid, uint8_t *oldUID, bool wantWipe) {\r
-       \r
+int mfCSetUID(uint8_t *uid, uint8_t *atqa, uint8_t *sak, uint8_t *oldUID, bool wantWipe) {\r
        uint8_t oldblock0[16] = {0x00};\r
        uint8_t block0[16] = {0x00};\r
-       memcpy(block0, uid, 4); \r
-       block0[4] = block0[0]^block0[1]^block0[2]^block0[3]; // Mifare UID BCC\r
-       // mifare classic SAK(byte 5) and ATQA(byte 6 and 7)\r
-       //block0[5] = 0x08;\r
-       //block0[6] = 0x04;\r
-       //block0[7] = 0x00;\r
-       \r
-       block0[5] = 0x01;  //sak\r
-       block0[6] = 0x01;\r
-       block0[7] = 0x0f;\r
-       \r
+\r
        int old = mfCGetBlock(0, oldblock0, CSETBLOCK_SINGLE_OPER);\r
-       if ( old == 0) {\r
-               memcpy(block0+8, oldblock0+8, 8);\r
-               PrintAndLog("block 0:  %s", sprint_hex(block0,16));\r
+       if (old == 0) {\r
+               memcpy(block0, oldblock0, 16);\r
+               PrintAndLog("old block 0:  %s", sprint_hex(block0,16));\r
        } else {\r
-               PrintAndLog("Couldn't get olddata. Will write over the last bytes of Block 0.");\r
+               PrintAndLog("Couldn't get old data. Will write over the last bytes of Block 0.");\r
+       }\r
+\r
+       // fill in the new values\r
+       // UID\r
+       memcpy(block0, uid, 4); \r
+       // Mifare UID BCC\r
+       block0[4] = block0[0]^block0[1]^block0[2]^block0[3];\r
+       // mifare classic SAK(byte 5) and ATQA(byte 6 and 7, reversed)\r
+       if (sak!=NULL)\r
+               block0[5]=sak[0];\r
+       if (atqa!=NULL) {\r
+               block0[6]=atqa[1];\r
+               block0[7]=atqa[0];\r
        }\r
+       PrintAndLog("new block 0:  %s", sprint_hex(block0,16));\r
        return mfCSetBlock(0, block0, oldUID, wantWipe, CSETBLOCK_SINGLE_OPER);\r
 }\r
 \r
@@ -351,10 +354,7 @@ int loadTraceCard(uint8_t *tuid) {
        FillFileNameByUID(traceFileName, tuid, ".eml", 7);\r
 \r
        f = fopen(traceFileName, "r");\r
-       if (!f) {\r
-               fclose(f);\r
-               return 1;\r
-       }\r
+       if (!f) return 1;\r
        \r
        blockNum = 0;\r
                \r
@@ -391,10 +391,7 @@ int saveTraceCard(void) {
        if ((!strlen(traceFileName)) || (isTraceCardEmpty())) return 0;\r
        \r
        f = fopen(traceFileName, "w+");\r
-       if ( !f ) {\r
-               fclose(f);\r
-               return 1;\r
-       }\r
+       if ( !f ) return 1;\r
        \r
        for (int i = 0; i < 64; i++) {  // blocks\r
                for (int j = 0; j < 16; j++)  // bytes\r
Impressum, Datenschutz