X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/2ce218042d2aebdfa4c5a58f19e6550f367c5d81..2ec645e9d71667875e9b8ab8b951fb3c686ff04d:/client/cmdhf14a.c diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index ca8b8c1d..21c97fa2 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -1,5 +1,6 @@ //----------------------------------------------------------------------------- // 2011, Merlok +// 2014, Peter Fillmore // Copyright (C) 2010 iZsh , Hagen Fritsch // // This code is licensed to you under the terms of the GNU GPL, version 2 or, @@ -107,6 +108,7 @@ const manufactureName manufactureMapping[] = { { 0x42, "3Alogics Inc Korea" }, { 0x43, "Top TroniQ Asia Limited Hong Kong" }, { 0x44, "Gentag Inc. USA" }, + { 0x56, "Sensible Object. UK" }, { 0x00, "no tag-info available" } // must be the last entry }; @@ -133,13 +135,14 @@ int usage_hf_14a_sim(void) { PrintAndLog("usage: hf 14a sim [h] t u [x] [e] [v]"); PrintAndLog("options: "); PrintAndLog(" h : This help"); - PrintAndLog(" t : 1 = MIFARE Classic"); + PrintAndLog(" t : 1 = MIFARE Classic 1k"); PrintAndLog(" 2 = MIFARE Ultralight"); PrintAndLog(" 3 = MIFARE Desfire"); PrintAndLog(" 4 = ISO/IEC 14443-4"); PrintAndLog(" 5 = MIFARE Tnp3xxx"); PrintAndLog(" 6 = MIFARE Mini"); PrintAndLog(" 7 = AMIIBO (NTAG 215), pack 0x8080"); + PrintAndLog(" 8 = MIFARE Classic 4k"); // PrintAndLog(" u : 4, 7 or 10 byte UID"); PrintAndLog(" u : 4, 7 byte UID"); PrintAndLog(" x : (Optional) Performs the 'reader attack', nr/ar attack against a reader"); @@ -220,6 +223,8 @@ int CmdHF14AReader(const char *Cmd) { uint32_t tagT = GetHF14AMfU_Type(); if (tagT != UL_ERROR) ul_print_type(tagT, 0); + else + PrintAndLog("TYPE: Possible AZTEK (iso14443a compliant)"); // reconnect for further tests c.arg[0] = ISO14A_CONNECT | ISO14A_NO_DISCONNECT; @@ -385,7 +390,7 @@ int CmdHF14AReader(const char *Cmd) { // try to see if card responses to "chinese magic backdoor" commands. - uint8_t isOK = 0; + uint8_t isGeneration = 0; clearCommandBuffer(); c.cmd = CMD_MIFARE_CIDENT; c.arg[0] = 0; @@ -393,13 +398,17 @@ int CmdHF14AReader(const char *Cmd) { c.arg[2] = 0; SendCommand(&c); if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) - isOK = resp.arg[0] & 0xff; - - PrintAndLog("Answers to magic commands (GEN1): %s", (isOK ? "YES" : "NO") ); + isGeneration = resp.arg[0] & 0xff; + switch( isGeneration ){ + case 1: PrintAndLog("Answers to magic commands (GEN 1a): YES"); break; + case 2: PrintAndLog("Answers to magic commands (GEN 1b): YES"); break; + //case 4: PrintAndLog("Answers to magic commands (GEN 2): YES"); break; + default: PrintAndLog("Answers to magic commands: NO"); break; + } + // disconnect SendCommand(&cDisconnect); - return select_status; } @@ -441,7 +450,6 @@ int CmdHF14ACUIDs(const char *Cmd) { // ## simulate iso14443a tag // ## greg - added ability to specify tag UID int CmdHF14ASim(const char *Cmd) { - #define ATTACK_KEY_COUNT 8 bool errors = FALSE; uint8_t flags = 0; uint8_t tagtype = 1; @@ -451,7 +459,8 @@ int CmdHF14ASim(const char *Cmd) { bool useUIDfromEML = TRUE; bool setEmulatorMem = FALSE; bool verbose = FALSE; - + nonces_t data[1]; + while(param_getchar(Cmd, cmdp) != 0x00) { switch(param_getchar(Cmd, cmdp)) { case 'h': @@ -483,7 +492,7 @@ int CmdHF14ASim(const char *Cmd) { break; case 'v': case 'V': - verbose = true; + verbose = TRUE; cmdp++; break; case 'x': @@ -498,7 +507,7 @@ int CmdHF14ASim(const char *Cmd) { break; default: PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; + errors = TRUE; break; } if(errors) break; @@ -514,19 +523,19 @@ int CmdHF14ASim(const char *Cmd) { memcpy(c.d.asBytes, uid, uidlen>>1); clearCommandBuffer(); SendCommand(&c); - - nonces_t data[ATTACK_KEY_COUNT*2]; UsbCommand resp; PrintAndLog("Press pm3-button to abort simulation"); + while( !ukbhit() ){ if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500) ) continue; if ( !(flags & FLAG_NR_AR_ATTACK) ) break; if ( (resp.arg[0] & 0xffff) != CMD_SIMULATE_MIFARE_CARD ) break; - memcpy( data, resp.d.asBytes, sizeof(data) ); - readerAttack(data, setEmulatorMem, verbose); + memcpy(data, resp.d.asBytes, sizeof(data) ); + readerAttack(data[0], setEmulatorMem, verbose); } + showSectorTable(); return 0; } @@ -697,7 +706,8 @@ int CmdHF14ACmdRaw(const char *cmd) { return 0; } -static void waitCmd(uint8_t iSelect) { +static void waitCmd(uint8_t iSelect) +{ UsbCommand resp; uint16_t len = 0;