X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/c92cf814955a829c7cfe0e6a3b7eacf943f348ed..224e8c1a4d2375ae575ac6639def05475616b7d0:/client/cmdhfmfu.c?ds=inline diff --git a/client/cmdhfmfu.c b/client/cmdhfmfu.c index da8a0d27..aed77d82 100644 --- a/client/cmdhfmfu.c +++ b/client/cmdhfmfu.c @@ -270,11 +270,16 @@ static int ul_print_default( uint8_t *data){ PrintAndLog(" BCC1 : %02X, crc should be %02X", data[8], crc1 ); PrintAndLog(" Internal : %02X, %sdefault", data[9], (data[9]==0x48)?"":"not " ); - PrintAndLog(" Lock : %s - %s", sprint_hex(data+10, 2),printBits( 2, data+10) ); - // if Page3 has NDEF magic number, its not a OTP.. - if ( data[12] != 0xE1 ) - PrintAndLog("OneTimePad : %s\n", sprint_hex(data + 12, 4)); + PrintAndLog(" Lock : %s - %s", + sprint_hex(data+10, 2), + printBits(2, data+10) + ); + + PrintAndLog("OneTimePad : %s - %s\n", + sprint_hex(data + 12, 4), + printBits(4, data+12) + ); return 0; } @@ -342,8 +347,7 @@ static int ulc_print_3deskey( uint8_t *data){ PrintAndLog(" deskey1 [45/0x2D]: %s [%.4s]", sprint_hex(data+4 ,4),data+4); PrintAndLog(" deskey2 [46/0x2E]: %s [%.4s]", sprint_hex(data+8 ,4),data+8); PrintAndLog(" deskey2 [47/0x2F]: %s [%.4s]", sprint_hex(data+12,4),data+12); - - PrintAndLog("\n 3des key : %s", sprint_hex(SwapEndian64(data, 16), 16)); + PrintAndLog("\n 3des key : %s", sprint_hex(SwapEndian64(data, 16, 8), 16)); return 0; } @@ -640,7 +644,6 @@ int CmdHF14AMfUInfo(const char *Cmd){ status = ul_read(0, data, sizeof(data)); if ( status == -1 ){ PrintAndLog("Error: tag didn't answer to READ A"); - ul_switch_off_field(); return status; } @@ -652,11 +655,9 @@ int CmdHF14AMfUInfo(const char *Cmd){ uint8_t ulc_conf[16] = {0x00}; status = ul_read(0x28, ulc_conf, sizeof(ulc_conf)); if ( status == -1 ){ - PrintAndLog("Error: tag didn't answer to READ - possibly locked"); - ul_switch_off_field(); + PrintAndLog("Error: tag didn't answer to READ UL-C"); return status; } - ulc_print_configuration(ulc_conf); if ((tagtype & MAGIC)){ @@ -665,23 +666,24 @@ int CmdHF14AMfUInfo(const char *Cmd){ status = ul_read(0x2C, ulc_deskey, sizeof(ulc_deskey)); if ( status == -1 ){ PrintAndLog("Error: tag didn't answer to READ magic"); - ul_switch_off_field(); return status; } ulc_print_3deskey(ulc_deskey); } else { - // if we called info with key, just return if ( hasAuthKey ) return 1; + // also try to diversify default keys.. look into CmdHF14AMfuGenDiverseKeys PrintAndLog("Trying some default 3des keys"); ul_switch_off_field(); for (uint8_t i = 0; i < KEYS_3DES_COUNT; ++i ){ key = default_3des_keys[i]; if (try3DesAuthentication(key) == 1){ PrintAndLog("Found default 3des key: "); //%s", sprint_hex(key,16)); - ulc_print_3deskey(SwapEndian64(key,16)); + uint8_t keySwap[16]; + memcpy(keySwap, SwapEndian64(key,16,8), 16); + ulc_print_3deskey(keySwap); return 1; } } @@ -696,7 +698,6 @@ int CmdHF14AMfUInfo(const char *Cmd){ status = ulev1_readSignature( ulev1_signature, sizeof(ulev1_signature)); if ( status == -1 ){ PrintAndLog("Error: tag didn't answer to READ SIGNATURE"); - ul_switch_off_field(); return status; } ulev1_print_signature( ulev1_signature, sizeof(ulev1_signature)); @@ -724,7 +725,6 @@ int CmdHF14AMfUInfo(const char *Cmd){ status = ulev1_getVersion(version, sizeof(version)); if ( status == -1 ){ PrintAndLog("Error: tag didn't answer to GET_VERSION"); - ul_switch_off_field(); return status; } ulev1_print_version(version); @@ -758,7 +758,6 @@ int CmdHF14AMfUInfo(const char *Cmd){ status = ul_read(3, cc, sizeof(cc)); if ( status == -1 ){ PrintAndLog("Error: tag didn't answer to READ ntag"); - ul_switch_off_field(); return status; } ntag_print_CC(cc); @@ -985,7 +984,7 @@ int CmdHF14AMfUDump(const char *Cmd){ if(errors) return usage_hf_mfu_dump(); if (swapEndian) - keyPtr = SwapEndian64(data, 16); + keyPtr = SwapEndian64(data, 16, 8); TagTypeUL_t tagtype = GetHF14AMfU_Type(); if (tagtype == UL_ERROR) return -1; @@ -1113,7 +1112,7 @@ int CmdHF14AMfUDump(const char *Cmd){ sprintf(fnameptr,"%02X%02X%02X%02X%02X%02X%02X.bin", data[0], data[1], data[2], data[4], data[5], data[6], data[7]); } else { - sprintf(fnameptr + fileNlen," .bin"); + sprintf(fnameptr + fileNlen,".bin"); } if ((fout = fopen(filename,"wb")) == NULL) {