chg: 'hf legic dump' - now save BIN/EML/JSON, and uses new filename template. filename parameter is changed from O to F, to follow better client\n hf legic dump\n hf legic dump f mydump

This commit is contained in:
iceman1001 2020-04-03 17:59:54 +02:00
commit 1ac4c54d93

View file

@ -105,14 +105,14 @@ static int usage_legic_dump(void) {
PrintAndLogEx(NORMAL, "Reads all pages from LEGIC Prime MIM22, MIM256, MIM1024"); PrintAndLogEx(NORMAL, "Reads all pages from LEGIC Prime MIM22, MIM256, MIM1024");
PrintAndLogEx(NORMAL, "and saves binary dump into the file `filename.bin` or `cardUID.bin`"); PrintAndLogEx(NORMAL, "and saves binary dump into the file `filename.bin` or `cardUID.bin`");
PrintAndLogEx(NORMAL, "It autodetects card type.\n"); PrintAndLogEx(NORMAL, "It autodetects card type.\n");
PrintAndLogEx(NORMAL, "Usage: hf legic dump [h] o <filename w/o .bin>"); PrintAndLogEx(NORMAL, "Usage: hf legic dump [h] f <filename w/o .bin>");
PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLogEx(NORMAL, " h : this help"); PrintAndLogEx(NORMAL, " h : this help");
PrintAndLogEx(NORMAL, " o <filename> : filename w/o '.bin' to dump bytes"); PrintAndLogEx(NORMAL, " f <filename> : filename w/o '.bin' to dump bytes");
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLogEx(NORMAL, " hf legic dump"); PrintAndLogEx(NORMAL, " hf legic dump");
PrintAndLogEx(NORMAL, " hf legic dump o myfile"); PrintAndLogEx(NORMAL, " hf legic dump f myfile");
return PM3_SUCCESS; return PM3_SUCCESS;
} }
static int usage_legic_restore(void) { static int usage_legic_restore(void) {
@ -865,26 +865,23 @@ static int CmdLegicReader(const char *Cmd) {
static int CmdLegicDump(const char *Cmd) { static int CmdLegicDump(const char *Cmd) {
FILE *f; int fileNameLen = 0;
char filename[FILE_PATH_SIZE] = {0x00}; char filename[FILE_PATH_SIZE] = {0x00};
char *fnameptr = filename; char *fptr = filename;
size_t fileNlen = 0;
bool errors = false; bool errors = false;
uint16_t dumplen; uint16_t dumplen;
uint8_t cmdp = 0; uint8_t cmdp = 0;
memset(filename, 0, sizeof(filename));
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
switch (tolower(param_getchar(Cmd, cmdp))) { switch (tolower(param_getchar(Cmd, cmdp))) {
case 'h': case 'h':
return usage_legic_dump(); return usage_legic_dump();
case 'o': case 'f':
fileNlen = param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE); fileNameLen = param_getstr(Cmd, cmdp + 1, filename, FILE_PATH_SIZE);
if (!fileNlen) if (!fileNameLen)
errors = true; errors = true;
if (fileNlen > FILE_PATH_SIZE - 5) if (fileNameLen > FILE_PATH_SIZE - 5)
fileNlen = FILE_PATH_SIZE - 5; fileNameLen = FILE_PATH_SIZE - 5;
cmdp += 2; cmdp += 2;
break; break;
default: default:
@ -947,22 +944,16 @@ static int CmdLegicDump(const char *Cmd) {
} }
// user supplied filename? // user supplied filename?
if (fileNlen < 1) if (fileNameLen < 1) {
sprintf(fnameptr, "hf-legic-%02X%02X%02X%02X-dump.bin", data[0], data[1], data[2], data[3]); PrintAndLogEx(INFO, "Using UID as filename");
else fptr += sprintf(fptr, "hf-legic-");
sprintf(fnameptr + fileNlen, ".bin"); FillFileNameByUID(fptr, data, "-dump", 4);
f = fopen(filename, "wb");
if (!f) {
PrintAndLogEx(WARNING, "Could not create file name %s", filename);
if (data)
free(data);
return PM3_EFILE;
} }
fwrite(data, 1, readlen, f);
fflush(f); saveFile(filename, ".bin", data, readlen);
fclose(f); saveFileEML(filename, data, readlen, 16);
free(data); saveFileJSON(filename, jsfLegic, data, readlen);
PrintAndLogEx(SUCCESS, "Wrote %d bytes to %s", readlen, filename); PrintAndLogEx(SUCCESS, "Wrote %d bytes to %s", readlen, filename);
return PM3_SUCCESS; return PM3_SUCCESS;
} }