mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 21:33:47 -07:00
hf mf cload works
This commit is contained in:
parent
955ced6c28
commit
6baf579fe0
2 changed files with 59 additions and 8 deletions
|
@ -330,7 +330,9 @@ int usage_hf14_cload(void){
|
||||||
PrintAndLogEx(NORMAL, "Options:");
|
PrintAndLogEx(NORMAL, "Options:");
|
||||||
PrintAndLogEx(NORMAL, " h this help");
|
PrintAndLogEx(NORMAL, " h this help");
|
||||||
PrintAndLogEx(NORMAL, " e load card with data from emulator memory");
|
PrintAndLogEx(NORMAL, " e load card with data from emulator memory");
|
||||||
PrintAndLogEx(NORMAL, " <filename> load card with data from file");
|
PrintAndLogEx(NORMAL, " j <filename> load card with data from json file");
|
||||||
|
PrintAndLogEx(NORMAL, " b <filename> load card with data from binary file");
|
||||||
|
PrintAndLogEx(NORMAL, " <filename> load card with data from eml file");
|
||||||
PrintAndLogEx(NORMAL, "Examples:");
|
PrintAndLogEx(NORMAL, "Examples:");
|
||||||
PrintAndLogEx(NORMAL, " hf mf cload mydump");
|
PrintAndLogEx(NORMAL, " hf mf cload mydump");
|
||||||
PrintAndLogEx(NORMAL, " hf mf cload e");
|
PrintAndLogEx(NORMAL, " hf mf cload e");
|
||||||
|
@ -2631,13 +2633,22 @@ int CmdHF14AMfCLoad(const char *Cmd) {
|
||||||
uint8_t buf8[16] = {0x00};
|
uint8_t buf8[16] = {0x00};
|
||||||
uint8_t fillFromEmulator = 0;
|
uint8_t fillFromEmulator = 0;
|
||||||
int blockNum, flags = 0;
|
int blockNum, flags = 0;
|
||||||
|
bool fillFromJson = false;
|
||||||
|
bool fillFromBin = false;
|
||||||
|
char fileName[50] = {0};
|
||||||
|
|
||||||
char ctmp = tolower(param_getchar(Cmd, 0));
|
char ctmp = tolower(param_getchar(Cmd, 0));
|
||||||
if ( strlen(Cmd) == 1 ) {
|
if ( param_getlength(Cmd, 0) == 1 ) {
|
||||||
if (ctmp == 'h' || ctmp == 0x00) return usage_hf14_cload();
|
if (ctmp == 'h' || ctmp == 0x00) return usage_hf14_cload();
|
||||||
if (ctmp == 'e' ) fillFromEmulator = 1;
|
if (ctmp == 'e' ) fillFromEmulator = 1;
|
||||||
|
if (ctmp == 'j' ) fillFromJson = true;
|
||||||
|
if (ctmp == 'b' ) fillFromBin = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fillFromJson || fillFromBin)
|
||||||
|
param_getstr(Cmd, 1, fileName, sizeof(fileName));
|
||||||
|
|
||||||
|
|
||||||
if (fillFromEmulator) {
|
if (fillFromEmulator) {
|
||||||
for (blockNum = 0; blockNum < 16 * 4; blockNum += 1) {
|
for (blockNum = 0; blockNum < 16 * 4; blockNum += 1) {
|
||||||
if (mfEmlGetMem(buf8, blockNum, 1)) {
|
if (mfEmlGetMem(buf8, blockNum, 1)) {
|
||||||
|
@ -2658,10 +2669,19 @@ int CmdHF14AMfCLoad(const char *Cmd) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *data = calloc(1, 4096);
|
size_t maxdatalen = 4096;
|
||||||
|
uint8_t *data = calloc(1, maxdatalen);
|
||||||
size_t datalen = 0;
|
size_t datalen = 0;
|
||||||
//int res = loadFile(Cmd, "bin", data, &datalen);
|
int res = 0;
|
||||||
int res = loadFileEML( Cmd, "eml", data, &datalen);
|
if (fillFromBin) {
|
||||||
|
res = loadFile(fileName, "bin", data, &datalen);
|
||||||
|
} else {
|
||||||
|
if (fillFromJson) {
|
||||||
|
res = loadFileJSON(fileName, "json", data, maxdatalen, &datalen);
|
||||||
|
} else {
|
||||||
|
res = loadFileEML( Cmd, "eml", data, &datalen);
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( res ) {
|
if ( res ) {
|
||||||
free(data);
|
free(data);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -158,7 +158,7 @@ int saveFileJSON(const char *preferredName, const char *suffix, JSONFileType fty
|
||||||
JsonSaveBufAsHexCompact(root, "raw", data, datalen);
|
JsonSaveBufAsHexCompact(root, "raw", data, datalen);
|
||||||
break;
|
break;
|
||||||
case jsfCardMemory:
|
case jsfCardMemory:
|
||||||
JsonSaveStr(root, "FileType", "mifare card dump");
|
JsonSaveStr(root, "FileType", "mfcard");
|
||||||
for (int i = 0; i < (datalen / 16); i++) {
|
for (int i = 0; i < (datalen / 16); i++) {
|
||||||
char path[30] = {0};
|
char path[30] = {0};
|
||||||
sprintf(path, "$.blocks.%d", i);
|
sprintf(path, "$.blocks.%d", i);
|
||||||
|
@ -335,7 +335,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
int loadFileJSON(const char *preferredName, const char *suffix, void* data, size_t maxdatalen, size_t* datalen) {
|
int loadFileJSON(const char *preferredName, const char *suffix, void* data, size_t maxdatalen, size_t* datalen) {
|
||||||
datalen = 0;
|
*datalen = 0;
|
||||||
json_t *root;
|
json_t *root;
|
||||||
json_error_t error;
|
json_error_t error;
|
||||||
|
|
||||||
|
@ -360,8 +360,39 @@ int loadFileJSON(const char *preferredName, const char *suffix, void* data, size
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonLoadBufAsHex(root, "$.raw", data, maxdatalen, datalen);
|
uint8_t *udata = (uint8_t *)data;
|
||||||
|
char ctype[100] = {0};
|
||||||
|
JsonLoadStr(root, "$.FileType", ctype);
|
||||||
|
|
||||||
|
if (!strcmp(ctype, "raw")) {
|
||||||
|
JsonLoadBufAsHex(root, "$.raw", udata, maxdatalen, datalen);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(ctype, "mfcard")) {
|
||||||
|
printf("--mfcard--\n");
|
||||||
|
size_t sptr = 0;
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
if (sptr + 16 > maxdatalen) {
|
||||||
|
retval = 5;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
char path[30] = {0};
|
||||||
|
sprintf(path, "$.blocks.%d", i);
|
||||||
|
|
||||||
|
size_t len = 0;
|
||||||
|
JsonLoadBufAsHex(root, path, &udata[sptr], 16, &len);
|
||||||
|
if (!len)
|
||||||
|
break;
|
||||||
|
printf("--- (%d) (%d) %s \n", i, len, sprint_hex(&udata[sptr], len));
|
||||||
|
|
||||||
|
sptr += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
*datalen = sptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintAndLog("Loaded JSON: (%s) OK.", fileName);
|
||||||
out:
|
out:
|
||||||
json_decref(root);
|
json_decref(root);
|
||||||
free(fileName);
|
free(fileName);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue