mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-20 13:23:25 -07:00
Add EM410x bruteforcing error checks
This commit is contained in:
parent
50acfd37e2
commit
47af8c5fa9
1 changed files with 108 additions and 108 deletions
|
@ -301,27 +301,31 @@ int usage_lf_em410x_brute(void) {
|
||||||
int CmdEM410xBrute(const char *Cmd)
|
int CmdEM410xBrute(const char *Cmd)
|
||||||
{
|
{
|
||||||
char filename[FILE_PATH_SIZE]={0};
|
char filename[FILE_PATH_SIZE]={0};
|
||||||
|
FILE *f = NULL;
|
||||||
char buf[11];
|
char buf[11];
|
||||||
int i, n, j, binary[4], parity[4];
|
int i, n, j, binary[4], parity[4];
|
||||||
|
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
uint8_t uid[5] = {0x00};
|
uint8_t uid[5] = {0x00};
|
||||||
|
|
||||||
if (cmdp == 'h' || cmdp == 'H') return usage_lf_em410x_sim();
|
if (cmdp == 'h' || cmdp == 'H') return usage_lf_em410x_sim();
|
||||||
/* clock is 64 in EM410x tags */
|
/* clock is 64 in EM410x tags */
|
||||||
uint8_t clock = 64;
|
uint8_t clock = 64;
|
||||||
|
|
||||||
param_getdec(Cmd,1, &clock);
|
param_getdec(Cmd,1, &clock);
|
||||||
|
|
||||||
param_getstr(Cmd, 0, filename);
|
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) ) {
|
while( fgets(buf, sizeof(buf), f) ) {
|
||||||
msleep(1000);
|
msleep(1000);
|
||||||
|
@ -334,67 +338,63 @@ int CmdEM410xBrute(const char *Cmd)
|
||||||
buf[10] = 0;
|
buf[10] = 0;
|
||||||
//PrintAndLog("ID: %s", buf);
|
//PrintAndLog("ID: %s", buf);
|
||||||
|
|
||||||
if (param_gethex(buf, 0, uid, 10)) {
|
if (param_gethex(buf, 0, uid, 10)) {
|
||||||
PrintAndLog("UID must include 10 HEX symbols");
|
PrintAndLog("UID must include 10 HEX symbols");
|
||||||
return 0;
|
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 */
|
/* write 9 start bits */
|
||||||
ClearGraph(0);
|
for (i = 0; i < 9; i++)
|
||||||
|
AppendGraph(0, clock, 1);
|
||||||
|
|
||||||
/* write 9 start bits */
|
/* for each hex char */
|
||||||
for (i = 0; i < 9; i++)
|
parity[0] = parity[1] = parity[2] = parity[3] = 0;
|
||||||
AppendGraph(0, clock, 1);
|
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 */
|
/* append each bit */
|
||||||
parity[0] = parity[1] = parity[2] = parity[3] = 0;
|
AppendGraph(0, clock, binary[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]);
|
|
||||||
AppendGraph(0, clock, binary[1]);
|
AppendGraph(0, clock, binary[1]);
|
||||||
AppendGraph(0, clock, binary[2]);
|
AppendGraph(0, clock, binary[2]);
|
||||||
AppendGraph(0, clock, binary[3]);
|
AppendGraph(0, clock, binary[3]);
|
||||||
|
|
||||||
/* append parity bit */
|
/* append parity bit */
|
||||||
AppendGraph(0, clock, binary[0] ^ binary[1] ^ binary[2] ^ binary[3]);
|
AppendGraph(0, clock, binary[0] ^ binary[1] ^ binary[2] ^ binary[3]);
|
||||||
|
|
||||||
/* keep track of column parity */
|
/* keep track of column parity */
|
||||||
parity[0] ^= binary[0];
|
parity[0] ^= binary[0];
|
||||||
parity[1] ^= binary[1];
|
parity[1] ^= binary[1];
|
||||||
parity[2] ^= binary[2];
|
parity[2] ^= binary[2];
|
||||||
parity[3] ^= binary[3];
|
parity[3] ^= binary[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* parity columns */
|
/* parity columns */
|
||||||
AppendGraph(0, clock, parity[0]);
|
AppendGraph(0, clock, parity[0]);
|
||||||
AppendGraph(0, clock, parity[1]);
|
AppendGraph(0, clock, parity[1]);
|
||||||
AppendGraph(0, clock, parity[2]);
|
AppendGraph(0, clock, parity[2]);
|
||||||
AppendGraph(0, clock, parity[3]);
|
AppendGraph(0, clock, parity[3]);
|
||||||
|
|
||||||
/* stop bit */
|
/* stop bit */
|
||||||
AppendGraph(1, clock, 0);
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue