}
WDT_HIT();
}
- if (samples) *samples = (c + *wait) << 3;
+ if (samples && wait) *samples = (c + *wait) << 3;
}
#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();
}
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");
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;
int crc = 0;
int wrp = 0;
int wrc = 0;
- uint8_t data_buf[1024]; // receiver buffer
+ uint8_t data_buf[1052]; // receiver buffer
char out_string[3076]; // just use big buffer - bad practice
char token_type[4];
#include "cmdlfem4x.h"
#include "lfdemod.h"
-#define llx PRIx64
-
char *global_em410xId;
static int CmdHelp(const char *Cmd);
return 0;
}
char id[12] = {0x00};
- sprintf(id, "%010llx",lo);
+ sprintf(id, "%010"PRIx64,lo);
global_em410xId = id;
return 1;
#include <stdio.h>\r
#include <string.h>\r
#include <inttypes.h>\r
-//#include <time.h> //not used - marshmellow\r
#include "proxmark3.h"\r
#include "ui.h"\r
#include "graph.h"\r
#include "util.h"\r
#include "data.h"\r
#include "lfdemod.h"\r
-//#include "../common/crc.h" //not used - marshmellow\r
-//#include "../common/iso14443crc.h" //not used - marshmellow\r
#include "cmdhf14a.h" //for getTagInfo\r
\r
#define T55x7_CONFIGURATION_BLOCK 0x00\r
char buf[9];\r
char filename[FILE_PATH_SIZE]={0};\r
int keycnt = 0;\r
+ int ch;\r
uint8_t stKeyBlock = 20;\r
- uint8_t *keyBlock = NULL, *p;\r
- keyBlock = calloc(stKeyBlock, 6);\r
- if (keyBlock == NULL) return 1;\r
-\r
+ uint8_t *keyBlock = NULL, *p = NULL;\r
uint32_t start_password = 0x00000000; //start password\r
uint32_t end_password = 0xFFFFFFFF; //end password\r
bool found = false;\r
char cmdp = param_getchar(Cmd, 0);\r
if (cmdp == 'h' || cmdp == 'H') return usage_t55xx_bruteforce();\r
\r
+ keyBlock = calloc(stKeyBlock, 6);\r
+ if (keyBlock == NULL) return 1;\r
+\r
if (cmdp == 'i' || cmdp == 'I') {\r
\r
int len = strlen(Cmd+2);\r
if (!p) {\r
PrintAndLog("Cannot allocate memory for defaultKeys");\r
free(keyBlock);\r
+ fclose(f);\r
return 2;\r
}\r
keyBlock = p;\r
\r
if (keycnt == 0) {\r
PrintAndLog("No keys found in file");\r
+ free(keyBlock);\r
return 1;\r
}\r
PrintAndLog("Loaded %d keys", keycnt);\r
for (uint16_t c = 0; c < keycnt; ++c ) {\r
\r
if (ukbhit()) {\r
- getchar();\r
+ ch = getchar();\r
+ (void)ch;\r
printf("\naborted via keyboard!\n");\r
+ free(keyBlock);\r
return 0;\r
}\r
\r
\r
if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, TRUE, testpwd)) {\r
PrintAndLog("Aquireing data from device failed. Quitting");\r
+ free(keyBlock);\r
return 0;\r
}\r
\r
\r
if ( found ) {\r
PrintAndLog("Found valid password: [%08X]", testpwd);\r
+ free(keyBlock);\r
return 0;\r
}\r
}\r
PrintAndLog("Password NOT found.");\r
+ free(keyBlock);\r
return 0;\r
}\r
\r
start_password = param_get32ex(Cmd, 0, 0, 16);\r
end_password = param_get32ex(Cmd, 1, 0, 16);\r
\r
- if ( start_password >= end_password ) return usage_t55xx_bruteforce();\r
-\r
+ if ( start_password >= end_password ) {\r
+ free(keyBlock);\r
+ return usage_t55xx_bruteforce();\r
+ }\r
PrintAndLog("Search password range [%08X -> %08X]", start_password, end_password);\r
\r
uint32_t i = start_password;\r
printf(".");\r
fflush(stdout);\r
if (ukbhit()) {\r
- getchar();\r
+ ch = getchar();\r
+ (void)ch;\r
printf("\naborted via keyboard!\n");\r
+ free(keyBlock);\r
return 0;\r
}\r
\r
if (!AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, TRUE, i)) {\r
PrintAndLog("Aquireing data from device failed. Quitting");\r
+ free(keyBlock);\r
return 0;\r
}\r
found = tryDetectModulation();\r
PrintAndLog("Found valid password: [%08x]", i);\r
else\r
PrintAndLog("Password NOT found. Last tried: [%08x]", --i);\r
+\r
+ free(keyBlock);\r
return 0;\r
}\r
\r
uint64_t rawID = 0;
bool Q5 = false;
char cmdp = param_getchar(Cmd, 0);
- if (strlen(Cmd) < 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_clone();
+ if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_clone();
id = param_get32ex(Cmd, 0, 0, 16);
if (id == 0) return usage_lf_viking_clone();
uint8_t clk = 32, encoding = 1, separator = 0, invert = 0;
char cmdp = param_getchar(Cmd, 0);
- if (strlen(Cmd) < 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_sim();
+ if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_sim();
id = param_get32ex(Cmd, 0, 0, 16);
if (id == 0) return usage_lf_viking_sim();
switch(UC->cmd) {
// First check if we are handling a debug message
case CMD_DEBUG_PRINT_STRING: {
- char s[USB_CMD_DATA_SIZE+1] = {0x00};
+ char s[USB_CMD_DATA_SIZE+1];
+ memset(s, 0x00, sizeof(s));
size_t len = MIN(UC->arg[0],USB_CMD_DATA_SIZE);
memcpy(s,UC->d.asBytes,len);
- PrintAndLog("#db# %s ", s);
+ PrintAndLog("#db# %s", s);
return;
} break;
for(uint16_t j = 0; j < num_infiles; j++) {
fclose(infile[j]);
}
+ free(fpga_config);
return(EXIT_FAILURE);
}
compressed_fpga_stream.avail_in = i;
compressed_fpga_stream.zalloc = fpga_deflate_malloc;
compressed_fpga_stream.zfree = fpga_deflate_free;
-
+ compressed_fpga_stream.opaque = Z_NULL;
ret = deflateInit2(&compressed_fpga_stream,
COMPRESS_LEVEL,
Z_DEFLATED,
compressed_fpga_stream.avail_out = DECOMPRESS_BUF_SIZE;
compressed_fpga_stream.zalloc = fpga_deflate_malloc;
compressed_fpga_stream.zfree = fpga_deflate_free;
+ compressed_fpga_stream.opaque = Z_NULL;
ret = inflateInit2(&compressed_fpga_stream, 0);
compressed_fpga_stream.next_in = inbuf;
uint16_t i = 0;
do {
- uint8_t c = fgetc(infile);
+ int c = fgetc(infile);
if (!feof(infile)) {
- inbuf[i++] = c;
+ inbuf[i++] = c & 0xFF;
compressed_fpga_stream.avail_in++;
} else {
break;
errors += bruteforceItem(*attack, keytable);
}
free(attack);
- clock_t t2 = clock();
- float diff = (((float)t2 - (float)t1) / CLOCKS_PER_SEC );
+ t1 = clock() - t1;
+ float diff = ((float)t1 / CLOCKS_PER_SEC );
prnlog("\nPerformed full crack in %f seconds",diff);
// Pick out the first 16 bytes of the keytable.
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
+ if (fsize < 0) {
+ prnlog("Error, when getting fsize");
+ fclose(f);
+ return 1;
+ }
+
uint8_t *dump = malloc(fsize);
size_t bytes_read = fread(dump, 1, fsize, f);
fclose(f);
- if (bytes_read < fsize)
- {
- prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize );
- }
- return bruteforceDump(dump,fsize,keytable);
+ if (bytes_read < fsize) {
+ prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize );
+ }
+
+ uint8_t res = bruteforceDump(dump,fsize,keytable);
+ free(dump);
+ return res;
}
/**
*
#include <inttypes.h>
#define llx PRIx64
#define lli PRIi64
+#define llu PRIu64
#define hhu PRIu8
#include "usb_cmd.h"
static struct termios Otty, Ntty;
- tcgetattr( 0, &Otty);
+ if ( tcgetattr( 0, &Otty) == -1 ) return -1;
Ntty = Otty;
Ntty.c_iflag = 0; /* input mode */
size_t in_index = 0;
// loop through the out_index to make sure we don't go too far
for (size_t out_index=0; out_index < max_len; out_index++) {
- // set character
- sprintf(tmp++, "%u", data[in_index]);
+ // set character - (should be binary but verify it isn't more than 1 digit)
+ if (data[in_index]<10)
+ sprintf(tmp++, "%u", data[in_index]);
// check if a line break is needed and we have room to print it in our array
if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
// increment and print line break