#include "usb_cmd.h"
#include "cmdhfmfu.h"
-#define llX PRIx64
-
static int CmdHelp(const char *Cmd);
#define ICLASS_KEYS_MAX 8
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
- uint8_t *dump = malloc(fsize);
+ if (fsize < 0) {
+ PrintAndLog("Error, when getting filesize");
+ fclose(f);
+ return 1;
+ }
+ uint8_t *dump = malloc(fsize);
size_t bytes_read = fread(dump, 1, fsize, f);
fclose(f);
//Open the tagdump-file
FILE *f;
char filename[FILE_PATH_SIZE];
- if(opt == 'f' && param_getstr(Cmd, 1, filename) > 0)
- {
+ if(opt == 'f' && param_getstr(Cmd, 1, filename) > 0) {
f = fopen(filename, "rb");
- }else{
+ if ( f == NULL ) {
+ PrintAndLog("Could not find file %s", filename);
+ return 1;
+ }
+ } else {
return usage_hf_iclass_decrypt();
}
fclose(f);
saveFile(outfilename,"bin", decrypted, blocknum*8);
-
+ free(decrypted);
return 0;
}
errors = param_gethex(tempStr, 0, CreditKEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(CreditKEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
errors = param_gethex(tempStr, 0, KEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(KEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
errors = param_gethex(tempStr, 0, KEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(KEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
}
int CmdHFiClassCloneTag(const char *Cmd) {
- char filename[FILE_PATH_SIZE];
+ char filename[FILE_PATH_SIZE] = {0};
char tempStr[50]={0};
uint8_t KEY[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uint8_t keyNbr = 0;
errors = param_gethex(tempStr, 0, KEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(KEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
if (startblock<5) {
PrintAndLog("You cannot write key blocks this way. yet... make your start block > 4");
+ fclose(f);
return 0;
}
// now read data from the file from block 6 --- 19
// else we have to create a share memory
int i;
fseek(f,startblock*8,SEEK_SET);
- fread(tag_data,sizeof(iclass_block_t),endblock - startblock + 1,f);
+ if ( fread(tag_data,sizeof(iclass_block_t),endblock - startblock + 1,f) == 0 ) {
+ PrintAndLog("File reading error.");
+ fclose(f);
+ return 2;
+ }
uint8_t MAC[4]={0x00,0x00,0x00,0x00};
uint8_t div_key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
errors = param_gethex(tempStr, 0, KEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(KEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
PrintAndLog("f <filename> Bruteforce iclass dumpfile");
PrintAndLog(" An iclass dumpfile is assumed to consist of an arbitrary number of");
PrintAndLog(" malicious CSNs, and their protocol responses");
- PrintAndLog(" The the binary format of the file is expected to be as follows: ");
+ PrintAndLog(" The binary format of the file is expected to be as follows: ");
PrintAndLog(" <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
PrintAndLog(" <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
PrintAndLog(" <8 byte CSN><8 byte CC><4 byte NR><4 byte MAC>");
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
- uint8_t *dump = malloc(fsize);
+ if ( fsize < 0 ) {
+ PrintAndLog("Error, when getting filesize");
+ fclose(f);
+ return 1;
+ }
+ uint8_t *dump = malloc(fsize);
size_t bytes_read = fread(dump, 1, fsize, f);
fclose(f);
for (int i = 0;i < 8;i++)
sprintf(&temp[(i *2)],"%02X",key[i]);
temp[16] = '\0';
- if (sscanf(temp,"%016"llX,&uint_key) < 1)
+ if (sscanf(temp,"%016"llx,&uint_key) < 1)
return 0;
return uint_key;
}
errors = param_gethex(tempStr, 0, NEWKEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(NEWKEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: NewKey Nbr is invalid\n");
errors = param_gethex(tempStr, 0, OLDKEY, dataLen);
} else if (dataLen == 1) {
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr <= ICLASS_KEYS_MAX) {
+ if (keyNbr < ICLASS_KEYS_MAX) {
memcpy(OLDKEY, iClass_Key_Table[keyNbr], 8);
} else {
PrintAndLog("\nERROR: Credit KeyNbr is invalid\n");
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
+ if ( fsize < 0 ) {
+ PrintAndLog("Error, when getting filesize");
+ fclose(f);
+ return 1;
+ }
+
uint8_t *dump = malloc(fsize);
size_t bytes_read = fread(dump, 1, fsize, f);
case 'n':
case 'N':
keyNbr = param_get8(Cmd, cmdp+1);
- if (keyNbr < 0) {
- PrintAndLog("Wrong block number");
+ if (keyNbr >= ICLASS_KEYS_MAX) {
+ PrintAndLog("Invalid block number");
errors = true;
}
cmdp += 2;