From f9d8d56317a455b55fe994533458fa1d80e41caa Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 24 Aug 2019 13:16:28 +0200 Subject: [PATCH] add iclass json dump format --- client/fileutils.c | 34 ++++++++++++++++++++++++++++++++++ client/fileutils.h | 1 + 2 files changed, 35 insertions(+) diff --git a/client/fileutils.c b/client/fileutils.c index 622bb88de..83744cc6f 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -281,6 +281,19 @@ int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, s } break; } + case jsfIclass: { + JsonSaveStr(root, "FileType", "iclass"); + uint8_t uid[8] = {0}; + memcpy(uid, data, 8); + JsonSaveBufAsHexCompact(root, "$.Card.UID", uid, sizeof(uid)); + + for (size_t i = 0; i < (datalen / 8 ); i++) { + char path[PATH_MAX_LENGTH] = {0}; + sprintf(path, "$blocks.%zu", i); + JsonSaveBufAsHexCompact(root, path, data + (i * 8), 8); + } + break; + } } int res = json_dump_file(root, fileName, JSON_INDENT(2)); @@ -512,6 +525,27 @@ int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_ *datalen = sptr; } + if (!strcmp(ctype, "iclass")) { + size_t sptr = 0; + for (size_t i = 0; i < (maxdatalen / 8); i++) { + if (sptr + 8 > maxdatalen) { + retval = 5; + goto out; + } + + char path[30] = {0}; + sprintf(path, "$.blocks.%zu", i); + + size_t len = 0; + JsonLoadBufAsHex(root, path, &udata[sptr], 8, &len); + if (!len) + break; + + sptr += len; + } + *datalen = sptr; + } + PrintAndLogEx(SUCCESS, "loaded from JSON file " _YELLOW_("%s"), fileName); out: json_decref(root); diff --git a/client/fileutils.h b/client/fileutils.h index 1e912a899..d23472867 100644 --- a/client/fileutils.h +++ b/client/fileutils.h @@ -54,6 +54,7 @@ typedef enum { jsfCardMemory, jsfMfuMemory, jsfHitag, + jsfIclass, // jsf14b, // jsf15, // jsfLegic,