From e183b307d62288b54ac88f590ba2beb3c9a524f9 Mon Sep 17 00:00:00 2001 From: Yoann Date: Mon, 11 Jul 2016 14:35:11 +0200 Subject: [PATCH] -K : Don't use the default keys. --- configure.ac | 0 src/mfoc.c | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) mode change 100644 => 100755 configure.ac diff --git a/configure.ac b/configure.ac old mode 100644 new mode 100755 diff --git a/src/mfoc.c b/src/mfoc.c index 32ef6f7..189e5d6 100644 --- a/src/mfoc.c +++ b/src/mfoc.c @@ -82,6 +82,7 @@ int main(int argc, char *const argv[]) // Next default key specified as option (-k) uint8_t *defKeys = NULL, *p; size_t defKeys_len = 0; + bool useDefaultKey = true; // Array with default Mifare Classic keys uint8_t defaultKeys[][6] = { @@ -129,7 +130,7 @@ int main(int argc, char *const argv[]) struct slre_cap caps[2]; // Parse command line arguments - while ((ch = getopt(argc, argv, "hD:s:BP:T:S:O:k:t:f:")) != -1) { + while ((ch = getopt(argc, argv, "hD:s:BP:T:S:O:k:K:t:f:")) != -1) { switch (ch) { case 'P': // Number of probes @@ -191,6 +192,21 @@ int main(int argc, char *const argv[]) fprintf(stdout, "The custom key 0x%012llx has been added to the default keys\n", bytes_to_num(defKeys + defKeys_len, 6)); defKeys_len = defKeys_len + 6; + break; + case 'K' : + // Add this key to the default keys + p = realloc(defKeys, defKeys_len + 6); + if (!p) { + ERR("Cannot allocate memory for defKeys"); + exit(EXIT_FAILURE); + } + defKeys = p; + memset(defKeys + defKeys_len, 0, 6); + num_to_bytes(strtoll(optarg, NULL, 16), 6, defKeys + defKeys_len); + fprintf(stdout, "The custom key 0x%012llx has been added to the default keys\n", bytes_to_num(defKeys + defKeys_len, 6)); + defKeys_len = defKeys_len + 6; + useDefaultKey = false; + break; case 'O': // File output @@ -324,6 +340,11 @@ int main(int argc, char *const argv[]) memcpy(mp.mpa.abtAuthUid, t.nt.nti.nai.abtUid + t.nt.nti.nai.szUidLen - 4, sizeof(mp.mpa.abtAuthUid)); // Iterate over all keys (n = number of keys) n = sizeof(defaultKeys) / sizeof(defaultKeys[0]); + + if (!useDefaultKey) { + n -= 13; + } + size_t defKey_bytes_todo = defKeys_len; key = 0; while (key < n || defKey_bytes_todo) {