mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
loadFile*: accept when suffix is already provided
This commit is contained in:
parent
42933f2e7b
commit
405f24522e
8 changed files with 61 additions and 47 deletions
|
@ -212,7 +212,7 @@ static int CmdFlashMemLoad(const char *Cmd) {
|
|||
switch (d) {
|
||||
case DICTIONARY_MIFARE:
|
||||
start_index = DEFAULT_MF_KEYS_OFFSET;
|
||||
res = loadFileDICTIONARY(filename, "dic", data + 2, &datalen, 6, &keycount);
|
||||
res = loadFileDICTIONARY(filename, data + 2, &datalen, 6, &keycount);
|
||||
if (res || !keycount) {
|
||||
free(data);
|
||||
return 1;
|
||||
|
@ -223,7 +223,7 @@ static int CmdFlashMemLoad(const char *Cmd) {
|
|||
break;
|
||||
case DICTIONARY_T55XX:
|
||||
start_index = DEFAULT_T55XX_KEYS_OFFSET;
|
||||
res = loadFileDICTIONARY(filename, "dic", data + 2, &datalen, 4, &keycount);
|
||||
res = loadFileDICTIONARY(filename, data + 2, &datalen, 4, &keycount);
|
||||
if (res || !keycount) {
|
||||
free(data);
|
||||
return 1;
|
||||
|
@ -234,7 +234,7 @@ static int CmdFlashMemLoad(const char *Cmd) {
|
|||
break;
|
||||
case DICTIONARY_ICLASS:
|
||||
start_index = DEFAULT_ICLASS_KEYS_OFFSET;
|
||||
res = loadFileDICTIONARY(filename, "dic", data + 2, &datalen, 8, &keycount);
|
||||
res = loadFileDICTIONARY(filename, data + 2, &datalen, 8, &keycount);
|
||||
if (res || !keycount) {
|
||||
free(data);
|
||||
return 1;
|
||||
|
@ -244,8 +244,8 @@ static int CmdFlashMemLoad(const char *Cmd) {
|
|||
datalen += 2;
|
||||
break;
|
||||
case DICTIONARY_NONE:
|
||||
res = loadFile(filename, "bin", data, FLASH_MEM_MAX_SIZE, &datalen);
|
||||
//int res = loadFileEML( filename, "eml", data, &datalen);
|
||||
res = loadFile(filename, ".bin", data, FLASH_MEM_MAX_SIZE, &datalen);
|
||||
//int res = loadFileEML( filename, data, &datalen);
|
||||
if (res) {
|
||||
free(data);
|
||||
return 1;
|
||||
|
|
|
@ -2584,8 +2584,8 @@ int CmdHF14AMfELoad(const char *Cmd) {
|
|||
|
||||
uint8_t *data = calloc(4096, sizeof(uint8_t));
|
||||
size_t datalen = 0;
|
||||
//int res = loadFile(filename, "bin", data, maxdatalen, &datalen);
|
||||
int res = loadFileEML(filename, "eml", data, &datalen);
|
||||
//int res = loadFile(filename, ".bin", data, maxdatalen, &datalen);
|
||||
int res = loadFileEML(filename, data, &datalen);
|
||||
if (res) {
|
||||
free(data);
|
||||
return 1;
|
||||
|
@ -2880,12 +2880,12 @@ static int CmdHF14AMfCLoad(const char *Cmd) {
|
|||
size_t datalen = 0;
|
||||
int res = 0;
|
||||
if (fillFromBin) {
|
||||
res = loadFile(fileName, "bin", data, maxdatalen, &datalen);
|
||||
res = loadFile(fileName, ".bin", data, maxdatalen, &datalen);
|
||||
} else {
|
||||
if (fillFromJson) {
|
||||
res = loadFileJSON(fileName, "json", data, maxdatalen, &datalen);
|
||||
res = loadFileJSON(fileName, data, maxdatalen, &datalen);
|
||||
} else {
|
||||
res = loadFileEML(Cmd, "eml", data, &datalen);
|
||||
res = loadFileEML(Cmd, data, &datalen);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -295,7 +295,7 @@ static int CmdLFHitagSim(const char *Cmd) {
|
|||
break;
|
||||
case 'e':
|
||||
param_getstr(Cmd, cmdp + 1, filename, sizeof(filename));
|
||||
res = loadFileEML(filename, "eml", data, &datalen);
|
||||
res = loadFileEML(filename, data, &datalen);
|
||||
if (res > 0 || datalen != maxdatalen) {
|
||||
PrintAndLogDevice(FAILED, "error, bytes read mismatch file size");
|
||||
errors = true;
|
||||
|
@ -306,7 +306,7 @@ static int CmdLFHitagSim(const char *Cmd) {
|
|||
break;
|
||||
case 'j':
|
||||
param_getstr(Cmd, cmdp + 1, filename, sizeof(filename));
|
||||
res = loadFileJSON(filename, "json", data, maxdatalen, &datalen);
|
||||
res = loadFileJSON(filename, data, maxdatalen, &datalen);
|
||||
if (res > 0) {
|
||||
errors = true;
|
||||
break;
|
||||
|
@ -316,7 +316,7 @@ static int CmdLFHitagSim(const char *Cmd) {
|
|||
break;
|
||||
case 'b':
|
||||
param_getstr(Cmd, cmdp + 1, filename, sizeof(filename));
|
||||
res = loadFile(filename, "bin", data, maxdatalen, &datalen);
|
||||
res = loadFile(filename, ".bin", data, maxdatalen, &datalen);
|
||||
if (res > 0) {
|
||||
errors = true;
|
||||
break;
|
||||
|
@ -611,7 +611,7 @@ static int CmdLFHitagCheckChallenges(const char *Cmd) {
|
|||
return usage_hitag_checkchallenges();
|
||||
case 'f':
|
||||
param_getstr(Cmd, cmdp + 1, filename, sizeof(filename));
|
||||
res = loadFile(filename, "cc", data, 8 * 60, &datalen);
|
||||
res = loadFile(filename, ".cc", data, 8 * 60, &datalen);
|
||||
if (res > 0) {
|
||||
errors = true;
|
||||
break;
|
||||
|
|
|
@ -1906,7 +1906,7 @@ static int CmdT55xxChkPwds(const char *Cmd) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int res = loadFileDICTIONARY(filename, "dic", keyBlock, &datalen, 4, &keycount);
|
||||
int res = loadFileDICTIONARY(filename, keyBlock, &datalen, 4, &keycount);
|
||||
if (res || keycount == 0) {
|
||||
PrintAndLogEx(WARNING, "No keys found in file");
|
||||
free(keyBlock);
|
||||
|
|
|
@ -274,14 +274,11 @@ out:
|
|||
|
||||
int loadFile(const char *preferredName, const char *suffix, void *data, size_t maxdatalen, size_t *datalen) {
|
||||
|
||||
if (preferredName == NULL) return 1;
|
||||
if (suffix == NULL) return 1;
|
||||
if (data == NULL) return 1;
|
||||
char *fileName = filenamemcopy(preferredName, suffix);
|
||||
if (fileName == NULL) return 1;
|
||||
|
||||
int retval = 0;
|
||||
int size = sizeof(char) * (strlen(preferredName) + strlen(suffix) + 10);
|
||||
char *fileName = calloc(size, sizeof(char));
|
||||
sprintf(fileName, "%s.%s", preferredName, suffix);
|
||||
|
||||
FILE *f = fopen(fileName, "rb");
|
||||
if (!f) {
|
||||
|
@ -336,17 +333,14 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int loadFileEML(const char *preferredName, const char *suffix, void *data, size_t *datalen) {
|
||||
int loadFileEML(const char *preferredName, void *data, size_t *datalen) {
|
||||
|
||||
if (preferredName == NULL) return 1;
|
||||
if (suffix == NULL) return 1;
|
||||
if (data == NULL) return 1;
|
||||
char *fileName = filenamemcopy(preferredName, ".eml");
|
||||
if (fileName == NULL) return 1;
|
||||
|
||||
size_t counter = 0;
|
||||
int retval = 0, hexlen = 0;
|
||||
int size = sizeof(char) * (strlen(preferredName) + strlen(suffix) + 10);
|
||||
char *fileName = calloc(size, sizeof(char));
|
||||
sprintf(fileName, "%s.%s", preferredName, suffix);
|
||||
|
||||
FILE *f = fopen(fileName, "r");
|
||||
if (!f) {
|
||||
|
@ -393,20 +387,17 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int loadFileJSON(const char *preferredName, const char *suffix, void *data, size_t maxdatalen, size_t *datalen) {
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen) {
|
||||
|
||||
if (preferredName == NULL) return 1;
|
||||
if (suffix == NULL) return 1;
|
||||
if (data == NULL) return 1;
|
||||
char *fileName = filenamemcopy(preferredName, ".json");
|
||||
if (fileName == NULL) return 1;
|
||||
|
||||
*datalen = 0;
|
||||
json_t *root;
|
||||
json_error_t error;
|
||||
|
||||
int retval = 0;
|
||||
int size = sizeof(char) * (strlen(preferredName) + strlen(suffix) + 10);
|
||||
char *fileName = calloc(size, sizeof(char));
|
||||
sprintf(fileName, "%s.%s", preferredName, suffix);
|
||||
|
||||
root = json_load_file(fileName, 0, &error);
|
||||
if (!root) {
|
||||
|
@ -502,11 +493,12 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int loadFileDICTIONARY(const char *preferredName, const char *suffix, void *data, size_t *datalen, uint8_t keylen, uint16_t *keycnt) {
|
||||
int loadFileDICTIONARY(const char *preferredName, void *data, size_t *datalen, uint8_t keylen, uint16_t *keycnt) {
|
||||
|
||||
|
||||
if (preferredName == NULL) return 1;
|
||||
if (suffix == NULL) return 1;
|
||||
if (data == NULL) return 1;
|
||||
char *fileName = filenamemcopy(preferredName, ".dic");
|
||||
if (fileName == NULL) return 1;
|
||||
|
||||
// t5577 == 4bytes
|
||||
// mifare == 6 bytes
|
||||
|
@ -523,9 +515,6 @@ int loadFileDICTIONARY(const char *preferredName, const char *suffix, void *data
|
|||
|
||||
size_t counter = 0;
|
||||
int retval = 0;
|
||||
int size = sizeof(char) * (strlen(preferredName) + strlen(suffix) + 10);
|
||||
char *fileName = calloc(size, sizeof(char));
|
||||
sprintf(fileName, "%s.%s", preferredName, suffix);
|
||||
|
||||
FILE *f = fopen(fileName, "r");
|
||||
if (!f) {
|
||||
|
|
|
@ -110,7 +110,7 @@ int saveFileJSON(const char *preferredName, const char *suffix, JSONFileType fty
|
|||
* E.g. dumpdata-15.bin
|
||||
*
|
||||
* @param preferredName
|
||||
* @param suffix the file suffix. Leave out the ".".
|
||||
* @param suffix the file suffix. Including the ".".
|
||||
* @param data The data array to store the loaded bytes from file
|
||||
* @param maxdatalen the number of bytes that your data array has
|
||||
* @param datalen the number of bytes loaded from file
|
||||
|
@ -123,25 +123,23 @@ int loadFile(const char *preferredName, const char *suffix, void *data, size_t m
|
|||
* E.g. dumpdata-15.txt
|
||||
*
|
||||
* @param preferredName
|
||||
* @param suffix the file suffix. Leave out the ".".
|
||||
* @param data The data array to store the loaded bytes from file
|
||||
* @param datalen the number of bytes loaded from file
|
||||
* @return 0 for ok, 1 for failz
|
||||
*/
|
||||
int loadFileEML(const char *preferredName, const char *suffix, void *data, size_t *datalen);
|
||||
int loadFileEML(const char *preferredName, void *data, size_t *datalen);
|
||||
|
||||
/**
|
||||
* @brief Utility function to load data from a JSON textfile. This method takes a preferred name.
|
||||
* E.g. dumpdata-15.json
|
||||
*
|
||||
* @param preferredName
|
||||
* @param suffix the file suffix. Leave out the ".".
|
||||
* @param data The data array to store the loaded bytes from file
|
||||
* @param maxdatalen maximum size of data array in bytes
|
||||
* @param datalen the number of bytes loaded from file
|
||||
* @return 0 for ok, 1 for failz
|
||||
*/
|
||||
int loadFileJSON(const char *preferredName, const char *suffix, void *data, size_t maxdatalen, size_t *datalen);
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -149,14 +147,13 @@ int loadFileJSON(const char *preferredName, const char *suffix, void *data, size
|
|||
* E.g. default_keys.dic
|
||||
*
|
||||
* @param preferredName
|
||||
* @param suffix the file suffix. Leave out the ".".
|
||||
* @param data The data array to store the loaded bytes from file
|
||||
* @param maxdatalen maximum size of data array in bytes
|
||||
* @param datalen the number of bytes loaded from file
|
||||
* @param keylen the number of bytes a key per row is
|
||||
* @return 0 for ok, 1 for failz
|
||||
*/
|
||||
int loadFileDICTIONARY(const char *preferredName, const char *suffix, void *data, size_t *datalen, uint8_t keylen, uint16_t *keycnt);
|
||||
int loadFileDICTIONARY(const char *preferredName, void *data, size_t *datalen, uint8_t keylen, uint16_t *keycnt);
|
||||
|
||||
/**
|
||||
* @brief Utility function to check and convert old mfu dump format to new
|
||||
|
|
|
@ -891,10 +891,23 @@ void str_lower(char *s) {
|
|||
for (size_t i = 0; i < strlen(s); i++)
|
||||
s[i] = tolower(s[i]);
|
||||
}
|
||||
|
||||
// check for prefix in string
|
||||
bool str_startswith(const char *s, const char *pre) {
|
||||
return strncmp(pre, s, strlen(pre)) == 0;
|
||||
}
|
||||
|
||||
// check for suffix in string
|
||||
bool str_endswith(const char *s, const char *suffix) {
|
||||
size_t ls = strlen(s);
|
||||
size_t lsuffix = strlen(suffix);
|
||||
if (ls >= lsuffix)
|
||||
{
|
||||
return strncmp(suffix, s + (ls - lsuffix), lsuffix) == 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Replace unprintable characters with a dot in char buffer
|
||||
void clean_ascii(unsigned char *buf, size_t len) {
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
|
@ -917,7 +930,7 @@ void strcreplace(char *buf, size_t len, char from, char to) {
|
|||
}
|
||||
}
|
||||
|
||||
char *strmcopy(char *buf) {
|
||||
char *strmcopy(const char *buf) {
|
||||
char *str = (char *) calloc(strlen(buf) + 1, sizeof(uint8_t));
|
||||
if (str != NULL) {
|
||||
memset(str, 0, strlen(buf) + 1);
|
||||
|
@ -925,3 +938,16 @@ char *strmcopy(char *buf) {
|
|||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
char *filenamemcopy(const char *preferredName, const char *suffix) {
|
||||
if (preferredName == NULL) return NULL;
|
||||
if (suffix == NULL) return NULL;
|
||||
char *fileName = (char *) calloc(strlen(preferredName) + strlen(suffix) + 1, sizeof(uint8_t));
|
||||
if (fileName == NULL)
|
||||
return NULL;
|
||||
strcpy(fileName, preferredName);
|
||||
if (str_endswith(fileName, suffix))
|
||||
return fileName;
|
||||
strcat(fileName, suffix);
|
||||
return fileName;
|
||||
}
|
||||
|
|
|
@ -261,8 +261,10 @@ int num_CPUs(void); // number of logical CPUs
|
|||
|
||||
void str_lower(char *s); // converts string to lower case
|
||||
bool str_startswith(const char *s, const char *pre); // check for prefix in string
|
||||
bool str_endswith(const char *s, const char *suffix); // check for suffix in string
|
||||
void clean_ascii(unsigned char *buf, size_t len);
|
||||
void strcleanrn(char *buf, size_t len);
|
||||
void strcreplace(char *buf, size_t len, char from, char to);
|
||||
char *strmcopy(char *buf);
|
||||
char *strmcopy(const char *buf);
|
||||
char *filenamemcopy(const char *preferredName, const char *suffix);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue