]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmf.c
Add Mifare Classic EV1 set load modulation command
[proxmark3-svn] / client / cmdhfmf.c
index ede88cb7996d01d6acf1b73ae59ba5e4e72110a8..13cbee68587b9c321b50fa645d2ea9704b47192b 100644 (file)
@@ -340,7 +340,7 @@ int CmdHF14AMfRdBl(const char *Cmd) {
        SendCommand(&c);\r
 \r
        UsbCommand resp;\r
-       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
+       if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {\r
                uint8_t isOK  = resp.arg[0] & 0xff;\r
                uint8_t *data = resp.d.asBytes;\r
 \r
@@ -721,7 +721,7 @@ int CmdHF14AMfRestore(const char *Cmd) {
 \r
 int CmdHF14AMfNested(const char *Cmd) {\r
        int i, j, res, iterations;\r
-       sector *e_sector = NULL;\r
+       sector_t *e_sector = NULL;\r
        uint8_t blockNo = 0;\r
        uint8_t keyType = 0;\r
        uint8_t trgBlockNo = 0;\r
@@ -823,7 +823,7 @@ int CmdHF14AMfNested(const char *Cmd) {
                time_t start, end;\r
                time(&start);\r
                \r
-               e_sector = calloc(SectorsCnt, sizeof(sector));\r
+               e_sector = calloc(SectorsCnt, sizeof(sector_t));\r
                if (e_sector == NULL) return 1;\r
                \r
                //test current key and additional standard keys first\r
@@ -1083,7 +1083,7 @@ int CmdHF14AMfChk(const char *Cmd) {
        uint8_t *keyBlock = NULL, *p;\r
        uint8_t stKeyBlock = 20;\r
        \r
-       sector *e_sector = NULL;\r
+       sector_t *e_sector = NULL;\r
        \r
        int i, res;\r
        int     keycnt = 0;\r
@@ -1230,7 +1230,7 @@ int CmdHF14AMfChk(const char *Cmd) {
        }\r
        \r
        // initialize storage for found keys\r
-       e_sector = calloc(SectorsCnt, sizeof(sector));\r
+       e_sector = calloc(SectorsCnt, sizeof(sector_t));\r
        if (e_sector == NULL) {\r
                free(keyBlock);\r
                return 1;\r
@@ -1362,13 +1362,13 @@ int CmdHF14AMfChk(const char *Cmd) {
        return 0;\r
 }\r
 \r
-sector *k_sector = NULL;\r
+sector_t *k_sector = NULL;\r
 uint8_t k_sectorsCount = 16;\r
 static void emptySectorTable(){\r
 \r
        // initialize storage for found keys\r
        if (k_sector == NULL)\r
-               k_sector = calloc(k_sectorsCount, sizeof(sector));\r
+               k_sector = calloc(k_sectorsCount, sizeof(sector_t));\r
        if (k_sector == NULL) \r
                return;\r
                \r
@@ -1720,7 +1720,7 @@ int CmdHF14AMfKeyBrute(const char *Cmd) {
        return 0;       \r
 }\r
 \r
-void printKeyTable( uint8_t sectorscnt, sector *e_sector ){\r
+void printKeyTable( uint8_t sectorscnt, sector_t *e_sector ){\r
        PrintAndLog("|---|----------------|---|----------------|---|");\r
        PrintAndLog("|sec|key A           |res|key B           |res|");\r
        PrintAndLog("|---|----------------|---|----------------|---|");\r
@@ -2451,6 +2451,43 @@ int CmdHf14MfDecryptBytes(const char *Cmd){
        return tryDecryptWord( nt, ar_enc, at_enc, data, len);\r
 }\r
 \r
+int CmdHf14AMfSetMod(const char *Cmd) {\r
+       uint8_t key[6] = {0, 0, 0, 0, 0, 0};\r
+       uint8_t mod = 2;\r
+\r
+       char ctmp = param_getchar(Cmd, 0);\r
+       if (ctmp == '0') {\r
+               mod = 0;\r
+       } else if (ctmp == '1') {\r
+               mod = 1;\r
+       }\r
+       int gethexfail = param_gethex(Cmd, 1, key, 12);\r
+       if (mod == 2 || gethexfail) {\r
+               PrintAndLog("Sets the load modulation strength of a MIFARE Classic EV1 card.");\r
+               PrintAndLog("Usage: hf mf setmod <0/1> <block 0 key A>");\r
+               PrintAndLog("       0 = normal modulation");\r
+               PrintAndLog("       1 = strong modulation (default)");\r
+               return 1;\r
+       }\r
+\r
+       UsbCommand c = {CMD_MIFARE_SETMOD, {mod, 0, 0}};\r
+       memcpy(c.d.asBytes, key, 6);\r
+       clearCommandBuffer();\r
+       SendCommand(&c);\r
+\r
+       UsbCommand resp;\r
+       if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {\r
+               uint8_t ok = resp.arg[0] & 0xff;\r
+               PrintAndLog("isOk:%02x", ok);\r
+               if (!ok) {\r
+                       PrintAndLog("Failed.");\r
+               }\r
+       } else {\r
+               PrintAndLog("Command execute timeout");\r
+       }\r
+       return 0;\r
+}\r
+\r
 static command_t CommandTable[] = {\r
        {"help",                CmdHelp,                                1, "This help"},\r
        {"dbg",                 CmdHF14AMfDbg,                  0, "Set default debug mode"},\r
@@ -2480,6 +2517,7 @@ static command_t CommandTable[] = {
        {"cload",               CmdHF14AMfCLoad,                0, "Load dump into magic Chinese card"},\r
        {"csave",               CmdHF14AMfCSave,                0, "Save dump from magic Chinese card into file or emulator"},\r
        {"decrypt",             CmdHf14MfDecryptBytes,  1, "[nt] [ar_enc] [at_enc] [data] - to decrypt snoop or trace"},\r
+       {"setmod",              CmdHf14AMfSetMod,               0, "Set MIFARE Classic EV1 load modulation strength"},\r
        {NULL, NULL, 0, NULL}\r
 };\r
 \r
Impressum, Datenschutz