]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhficlass.c
Merge branch 'master' of https://github.com/Proxmark/proxmark3
[proxmark3-svn] / client / cmdhficlass.c
index b945e12b4c2b850360113533a8c7bf41f0210c63..31f7ba973f8d2a956194d9152fdf65584b3f76a7 100644 (file)
@@ -29,6 +29,7 @@
 #include "loclass/ikeys.h"
 #include "loclass/elite_crack.h"
 #include "loclass/fileutils.h"
+#include "protocols.h"
 
 static int CmdHelp(const char *Cmd);
 
@@ -75,10 +76,9 @@ int CmdHFiClassSim(const char *Cmd)
        uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 
        if (strlen(Cmd)<1) {
-               usage_hf_iclass_sim();
+               return usage_hf_iclass_sim();
        }
-
-       simType = param_get8(Cmd, 0);
+       simType = param_get8ex(Cmd, 0, 0, 10);
 
        if(simType == 0)
        {
@@ -322,7 +322,7 @@ int CmdHFiClassReader_Dump(const char *Cmd)
        PrintAndLog("Hash0, a.k.a diversified key, that is computed using Ksel and stored in the card (Block 3):");
        printvar("Div key", div_key, 8);
        printvar("CC_NR:",CCNR,12);
-       doMAC(CCNR,12,div_key, MAC);
+       doMAC(CCNR,div_key, MAC);
        printvar("MAC", MAC, 4);
 
        uint8_t iclass_data[32000] = {0};
@@ -364,6 +364,8 @@ int CmdHFiClassReader_Dump(const char *Cmd)
                                        snprintf(filename, 100,"iclass_tagdump-%02x%02x%02x%02x%02x%02x%02x%02x",
                                                         CSN[0],CSN[1],CSN[2],CSN[3],
                                                        CSN[4],CSN[5],CSN[6],CSN[7]);
+                                       //Place the div_key in block 3
+                                       memcpy(iclass_data+(3*8), div_key, 8);
                                        saveFile(filename,"bin",iclass_data, iclass_datalen );
                                }
                                //Aaaand we're finished
@@ -419,9 +421,12 @@ int CmdHFiClassELoad(const char *Cmd)
        fseek(f, 0, SEEK_SET);
 
        uint8_t *dump = malloc(fsize);
+
+
        size_t bytes_read = fread(dump, 1, fsize, f);
        fclose(f);
 
+       printIclassDumpInfo(dump);
        //Validate
 
        if (bytes_read < fsize)
@@ -451,11 +456,12 @@ int usage_hf_iclass_decrypt()
 {
        PrintAndLog("Usage: hf iclass decrypt f <tagdump> o ");
        PrintAndLog("");
-       PrintAndLog("In order to use this function, the file 'iclass_decryptionkey.bin must reside");
+       PrintAndLog("OBS! In order to use this function, the file 'iclass_decryptionkey.bin' must reside");
        PrintAndLog("in the working directory. The file should be 16 bytes binary data");
-       PrintAndLog("example: hf iclass decrypt tagdump_12312342343.bin");
        PrintAndLog("");
-       PrintAndLog("OBS! This is pretty stupid implementation, it tries to decrypt every block after block 5. ");
+       PrintAndLog("example: hf iclass decrypt f tagdump_12312342343.bin");
+       PrintAndLog("");
+       PrintAndLog("OBS! This is pretty stupid implementation, it tries to decrypt every block after block 6. ");
        PrintAndLog("Correct behaviour would be to decrypt only the application areas where the key is valid,");
        PrintAndLog("which is defined by the configuration block.");
        return 1;
@@ -527,7 +533,7 @@ int CmdHFiClassDecrypt(const char *Cmd)
        size_t blocknum =0;
        while(bytes_read == 8)
        {
-               if(blocknum < 6)
+               if(blocknum < 7)
                {
                        memcpy(decrypted+(blocknum*8), enc_dump, 8);
                }else{
@@ -601,7 +607,7 @@ int CmdHFiClass_iso14443A_write(const char *Cmd)
        diversifyKey(CSN,KEY, div_key);
 
        PrintAndLog("Div Key: %s",sprint_hex(div_key,8));
-       doMAC(CCNR, 12,div_key, MAC);
+       doMAC(CCNR, div_key, MAC);
 
        UsbCommand c2 = {CMD_ICLASS_ISO14443A_WRITE, {readerType,blockNo}};
        memcpy(c2.d.asBytes, bldata, 8);
Impressum, Datenschutz