mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
hf mf chk/fchk: load dic with searchFile and fail when errors in args
This commit is contained in:
parent
47c6452e94
commit
4ddc3d61d5
3 changed files with 53 additions and 29 deletions
|
@ -179,10 +179,10 @@ static int usage_hf14_chk(void) {
|
||||||
PrintAndLogEx(NORMAL, " t write keys to emulator memory\n");
|
PrintAndLogEx(NORMAL, " t write keys to emulator memory\n");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, " hf mf chk 0 A 1234567890ab -- target block 0, Key A using key 1234567890ab");
|
PrintAndLogEx(NORMAL, " hf mf chk 0 A 1234567890ab -- target block 0, Key A using key 1234567890ab");
|
||||||
PrintAndLogEx(NORMAL, " hf mf chk 0 A default_keys.dic -- target block 0, Key A using default dictionary file");
|
PrintAndLogEx(NORMAL, " hf mf chk 0 A mfc_default_keys.dic -- target block 0, Key A using default dictionary file");
|
||||||
PrintAndLogEx(NORMAL, " hf mf chk *1 ? t -- target all blocks, all keys, 1K, write to emulator memory");
|
PrintAndLogEx(NORMAL, " hf mf chk *1 ? t -- target all blocks, all keys, 1K, write to emulator memory");
|
||||||
PrintAndLogEx(NORMAL, " hf mf chk *1 ? d -- target all blocks, all keys, 1K, write to file");
|
PrintAndLogEx(NORMAL, " hf mf chk *1 ? d -- target all blocks, all keys, 1K, write to file");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static int usage_hf14_chk_fast(void) {
|
static int usage_hf14_chk_fast(void) {
|
||||||
|
@ -200,12 +200,12 @@ static int usage_hf14_chk_fast(void) {
|
||||||
PrintAndLogEx(NORMAL, " m use dictionary from flashmemory\n");
|
PrintAndLogEx(NORMAL, " m use dictionary from flashmemory\n");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, " hf mf fchk 1 1234567890ab -- target 1K using key 1234567890ab");
|
PrintAndLogEx(NORMAL, " hf mf fchk 1 1234567890ab -- target 1K using key 1234567890ab");
|
||||||
PrintAndLogEx(NORMAL, " hf mf fchk 1 default_keys.dic -- target 1K using default dictionary file");
|
PrintAndLogEx(NORMAL, " hf mf fchk 1 mfc_default_keys.dic -- target 1K using default dictionary file");
|
||||||
PrintAndLogEx(NORMAL, " hf mf fchk 1 t -- target 1K, write to emulator memory");
|
PrintAndLogEx(NORMAL, " hf mf fchk 1 t -- target 1K, write to emulator memory");
|
||||||
PrintAndLogEx(NORMAL, " hf mf fchk 1 d -- target 1K, write to file");
|
PrintAndLogEx(NORMAL, " hf mf fchk 1 d -- target 1K, write to file");
|
||||||
if (IfPm3Flash())
|
if (IfPm3Flash())
|
||||||
PrintAndLogEx(NORMAL, " hf mf fchk 1 m -- target 1K, use dictionary from flashmemory");
|
PrintAndLogEx(NORMAL, " hf mf fchk 1 m -- target 1K, use dictionary from flashmemory");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static int usage_hf14_keybrute(void) {
|
static int usage_hf14_keybrute(void) {
|
||||||
|
@ -1575,7 +1575,7 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
sector_t *e_sector = NULL;
|
sector_t *e_sector = NULL;
|
||||||
|
|
||||||
keyBlock = calloc(ARRAYLEN(g_mifare_default_keys), 6);
|
keyBlock = calloc(ARRAYLEN(g_mifare_default_keys), 6);
|
||||||
if (keyBlock == NULL) return 1;
|
if (keyBlock == NULL) return PM3_EMALLOC;
|
||||||
|
|
||||||
for (int cnt = 0; cnt < ARRAYLEN(g_mifare_default_keys); cnt++)
|
for (int cnt = 0; cnt < ARRAYLEN(g_mifare_default_keys); cnt++)
|
||||||
num_to_bytes(g_mifare_default_keys[cnt], 6, keyBlock + cnt * 6);
|
num_to_bytes(g_mifare_default_keys[cnt], 6, keyBlock + cnt * 6);
|
||||||
|
@ -1615,7 +1615,7 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
if (!p) {
|
if (!p) {
|
||||||
PrintAndLogEx(FAILED, "Cannot allocate memory for Keys");
|
PrintAndLogEx(FAILED, "Cannot allocate memory for Keys");
|
||||||
free(keyBlock);
|
free(keyBlock);
|
||||||
return 2;
|
return PM3_EMALLOC;
|
||||||
}
|
}
|
||||||
keyBlock = p;
|
keyBlock = p;
|
||||||
}
|
}
|
||||||
|
@ -1629,14 +1629,24 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
// May be a dic file
|
// May be a dic file
|
||||||
if (param_getstr(Cmd, i, filename, FILE_PATH_SIZE) >= FILE_PATH_SIZE) {
|
if (param_getstr(Cmd, i, filename, FILE_PATH_SIZE) >= FILE_PATH_SIZE) {
|
||||||
PrintAndLogEx(FAILED, "Filename too long");
|
PrintAndLogEx(FAILED, "Filename too long");
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
f = fopen(filename, "r");
|
char *dict_path;
|
||||||
if (!f) {
|
int res = searchFile(&dict_path, DICTIONARIES_SUBDIR, filename, ".dic");
|
||||||
PrintAndLogEx(FAILED, "File: " _YELLOW_("%s") ": not found or locked.", filename);
|
if (res != PM3_SUCCESS) {
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
f = fopen(dict_path, "r");
|
||||||
|
if (!f) {
|
||||||
|
PrintAndLogEx(FAILED, "File: " _YELLOW_("%s") ": not found or locked.", dict_path);
|
||||||
|
free(dict_path);
|
||||||
|
free(keyBlock);
|
||||||
|
return PM3_EFILE;
|
||||||
|
}
|
||||||
|
free(dict_path);
|
||||||
|
|
||||||
// read file
|
// read file
|
||||||
while (fgets(buf, sizeof(buf), f)) {
|
while (fgets(buf, sizeof(buf), f)) {
|
||||||
|
@ -1649,7 +1659,9 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
|
|
||||||
if (!isxdigit(buf[0])) {
|
if (!isxdigit(buf[0])) {
|
||||||
PrintAndLogEx(FAILED, "File content error. '" _YELLOW_("%s")"' must include 12 HEX symbols", buf);
|
PrintAndLogEx(FAILED, "File content error. '" _YELLOW_("%s")"' must include 12 HEX symbols", buf);
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
fclose(f);
|
||||||
|
return PM3_EFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[12] = 0;
|
buf[12] = 0;
|
||||||
|
@ -1659,7 +1671,7 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
PrintAndLogEx(FAILED, "Cannot allocate memory for default keys");
|
PrintAndLogEx(FAILED, "Cannot allocate memory for default keys");
|
||||||
free(keyBlock);
|
free(keyBlock);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return 2;
|
return PM3_EMALLOC;
|
||||||
}
|
}
|
||||||
keyBlock = p;
|
keyBlock = p;
|
||||||
}
|
}
|
||||||
|
@ -1686,7 +1698,7 @@ static int CmdHF14AMfChk_fast(const char *Cmd) {
|
||||||
e_sector = calloc(sectorsCnt, sizeof(sector_t));
|
e_sector = calloc(sectorsCnt, sizeof(sector_t));
|
||||||
if (e_sector == NULL) {
|
if (e_sector == NULL) {
|
||||||
free(keyBlock);
|
free(keyBlock);
|
||||||
return 1;
|
return PM3_EMALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t chunksize = keycnt > (PM3_CMD_DATA_SIZE / 6) ? (PM3_CMD_DATA_SIZE / 6) : keycnt;
|
uint32_t chunksize = keycnt > (PM3_CMD_DATA_SIZE / 6) ? (PM3_CMD_DATA_SIZE / 6) : keycnt;
|
||||||
|
@ -1894,14 +1906,24 @@ static int CmdHF14AMfChk(const char *Cmd) {
|
||||||
// May be a dic file
|
// May be a dic file
|
||||||
if (param_getstr(Cmd, i, filename, sizeof(filename)) >= FILE_PATH_SIZE) {
|
if (param_getstr(Cmd, i, filename, sizeof(filename)) >= FILE_PATH_SIZE) {
|
||||||
PrintAndLogEx(FAILED, "File name too long");
|
PrintAndLogEx(FAILED, "File name too long");
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
f = fopen(filename, "r");
|
char *dict_path;
|
||||||
if (!f) {
|
int res = searchFile(&dict_path, DICTIONARIES_SUBDIR, filename, ".dic");
|
||||||
PrintAndLogEx(FAILED, "File: " _YELLOW_("%s") ": not found or locked.", filename);
|
if (res != PM3_SUCCESS) {
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
return PM3_EFILE;
|
||||||
}
|
}
|
||||||
|
f = fopen(dict_path, "r");
|
||||||
|
if (!f) {
|
||||||
|
PrintAndLogEx(FAILED, "File: " _YELLOW_("%s") ": not found or locked.", dict_path);
|
||||||
|
free(dict_path);
|
||||||
|
free(keyBlock);
|
||||||
|
return PM3_EFILE;
|
||||||
|
}
|
||||||
|
free(dict_path);
|
||||||
|
|
||||||
// load keys from dictionary file
|
// load keys from dictionary file
|
||||||
while (fgets(buf, sizeof(buf), f)) {
|
while (fgets(buf, sizeof(buf), f)) {
|
||||||
|
@ -1915,7 +1937,9 @@ static int CmdHF14AMfChk(const char *Cmd) {
|
||||||
// codesmell, only checks first char?
|
// codesmell, only checks first char?
|
||||||
if (!isxdigit(buf[0])) {
|
if (!isxdigit(buf[0])) {
|
||||||
PrintAndLogEx(FAILED, "File content error. '" _YELLOW_("%s")"' must include 12 HEX symbols", buf);
|
PrintAndLogEx(FAILED, "File content error. '" _YELLOW_("%s")"' must include 12 HEX symbols", buf);
|
||||||
continue;
|
free(keyBlock);
|
||||||
|
fclose(f);
|
||||||
|
return PM3_EFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[12] = 0;
|
buf[12] = 0;
|
||||||
|
|
|
@ -141,7 +141,7 @@ int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Utility function to load data from a DICTIONARY textfile. This method takes a preferred name.
|
* @brief Utility function to load data from a DICTIONARY textfile. This method takes a preferred name.
|
||||||
* E.g. default_keys.dic
|
* E.g. mfc_default_keys.dic
|
||||||
*
|
*
|
||||||
* @param preferredName
|
* @param preferredName
|
||||||
* @param data The data array to store the loaded bytes from file
|
* @param data The data array to store the loaded bytes from file
|
||||||
|
|
|
@ -181,7 +181,7 @@ Options
|
||||||
card memory : 0 - MINI(320 bytes), 1 - 1K, 2 - 2K, 4 - 4K
|
card memory : 0 - MINI(320 bytes), 1 - 1K, 2 - 2K, 4 - 4K
|
||||||
d : write keys to binary file
|
d : write keys to binary file
|
||||||
|
|
||||||
pm3 --> hf mf chk *1 ? d dictionaries/mfc_default_keys.dic
|
pm3 --> hf mf chk *1 ? d mfc_default_keys
|
||||||
```
|
```
|
||||||
|
|
||||||
Check for default keys from local memory
|
Check for default keys from local memory
|
||||||
|
@ -254,7 +254,7 @@ pm3 --> hf mf sim u 353c2aa6
|
||||||
|
|
||||||
Simulate Mifare Sequence
|
Simulate Mifare Sequence
|
||||||
```
|
```
|
||||||
pm3 --> hf mf chk *1 ? d dictionaries/mfc_default_keys.dic
|
pm3 --> hf mf chk *1 ? d mfc_default_keys
|
||||||
pm3 --> hf mf dump 1
|
pm3 --> hf mf dump 1
|
||||||
pm3 --> script run dumptoemul -i dumpdata.bin
|
pm3 --> script run dumptoemul -i dumpdata.bin
|
||||||
pm3 --> hf mf eload 353C2AA6
|
pm3 --> hf mf eload 353C2AA6
|
||||||
|
@ -263,7 +263,7 @@ pm3 --> hf mf sim u 353c2aa6
|
||||||
|
|
||||||
Clone Mifare 1K Sequence
|
Clone Mifare 1K Sequence
|
||||||
```
|
```
|
||||||
pm3 --> hf mf chk *1 ? d dictionaries/mfc_default_keys.dic
|
pm3 --> hf mf chk *1 ? d mfc_default_keys
|
||||||
pm3 --> hf mf dump
|
pm3 --> hf mf dump
|
||||||
pm3 --> hf mf restore 1 u 4A6CE843 k hf-mf-A29558E4-key.bin f hf-mf-A29558E4-data.bin
|
pm3 --> hf mf restore 1 u 4A6CE843 k hf-mf-A29558E4-key.bin f hf-mf-A29558E4-data.bin
|
||||||
```
|
```
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue