Add EM410x bruteforcing error checks

This commit is contained in:
Fl0-0 2017-06-30 10:00:03 +02:00
commit 47af8c5fa9

View file

@ -301,27 +301,31 @@ int usage_lf_em410x_brute(void) {
int CmdEM410xBrute(const char *Cmd)
{
char filename[FILE_PATH_SIZE]={0};
FILE *f = NULL;
char buf[11];
int i, n, j, binary[4], parity[4];
char cmdp = param_getchar(Cmd, 0);
uint8_t uid[5] = {0x00};
char cmdp = param_getchar(Cmd, 0);
uint8_t uid[5] = {0x00};
if (cmdp == 'h' || cmdp == 'H') return usage_lf_em410x_sim();
/* clock is 64 in EM410x tags */
uint8_t clock = 64;
if (cmdp == 'h' || cmdp == 'H') return usage_lf_em410x_sim();
/* clock is 64 in EM410x tags */
uint8_t clock = 64;
param_getdec(Cmd,1, &clock);
param_getstr(Cmd, 0, filename);
PrintAndLog("Filename: %s", filename);
FILE *f = fopen(filename, "r");
if (strlen(filename) > 0) {
if ((f = fopen(filename, "r")) == NULL) {
PrintAndLog("Error: Could not open IDs file [%s]",filename);
return 1;
}
} else {
PrintAndLog("Error: Please specify a filename");
return 1;
}
if(!f) {
PrintAndLog("Couldn't open '%s'", Cmd);
return 0;
}
while( fgets(buf, sizeof(buf), f) ) {
msleep(1000);
@ -334,67 +338,63 @@ int CmdEM410xBrute(const char *Cmd)
buf[10] = 0;
//PrintAndLog("ID: %s", buf);
if (param_gethex(buf, 0, uid, 10)) {
PrintAndLog("UID must include 10 HEX symbols");
return 0;
}
if (param_gethex(buf, 0, uid, 10)) {
PrintAndLog("UID must include 10 HEX symbols");
return 0;
}
PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
/* clear our graph */
ClearGraph(0);
/* clear our graph */
ClearGraph(0);
/* write 9 start bits */
for (i = 0; i < 9; i++)
AppendGraph(0, clock, 1);
/* write 9 start bits */
for (i = 0; i < 9; i++)
AppendGraph(0, clock, 1);
/* for each hex char */
parity[0] = parity[1] = parity[2] = parity[3] = 0;
for (i = 0; i < 10; i++)
{
/* read each hex char */
sscanf(&buf[i], "%1x", &n);
for (j = 3; j >= 0; j--, n/= 2)
binary[j] = n % 2;
/* for each hex char */
parity[0] = parity[1] = parity[2] = parity[3] = 0;
for (i = 0; i < 10; i++)
{
/* read each hex char */
sscanf(&buf[i], "%1x", &n);
for (j = 3; j >= 0; j--, n/= 2)
binary[j] = n % 2;
/* append each bit */
AppendGraph(0, clock, binary[0]);
/* append each bit */
AppendGraph(0, clock, binary[0]);
AppendGraph(0, clock, binary[1]);
AppendGraph(0, clock, binary[2]);
AppendGraph(0, clock, binary[3]);
AppendGraph(0, clock, binary[2]);
AppendGraph(0, clock, binary[3]);
/* append parity bit */
AppendGraph(0, clock, binary[0] ^ binary[1] ^ binary[2] ^ binary[3]);
/* append parity bit */
AppendGraph(0, clock, binary[0] ^ binary[1] ^ binary[2] ^ binary[3]);
/* keep track of column parity */
parity[0] ^= binary[0];
parity[1] ^= binary[1];
parity[2] ^= binary[2];
parity[3] ^= binary[3];
}
/* keep track of column parity */
parity[0] ^= binary[0];
parity[1] ^= binary[1];
parity[2] ^= binary[2];
parity[3] ^= binary[3];
}
/* parity columns */
AppendGraph(0, clock, parity[0]);
AppendGraph(0, clock, parity[1]);
AppendGraph(0, clock, parity[2]);
AppendGraph(0, clock, parity[3]);
/* parity columns */
AppendGraph(0, clock, parity[0]);
AppendGraph(0, clock, parity[1]);
AppendGraph(0, clock, parity[2]);
AppendGraph(0, clock, parity[3]);
/* stop bit */
AppendGraph(1, clock, 0);
/* stop bit */
AppendGraph(1, clock, 0);
CmdLFSim("0"); //240 start_gap.
CmdLFSim("0"); //240 start_gap.
memset(buf, 0, sizeof(buf));
memset(buf, 0, sizeof(buf));
}
}
fclose(f);
fclose(f);
return 0;
return 0;
}