Change mirror_bytes() -> bswap32().

This commit is contained in:
romain.tartiere
2010-09-14 10:38:23 +00:00
parent 5b848c6789
commit 10c422c924

View File

@@ -121,6 +121,12 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#ifdef __FreeBSD__
# include <sys/endian.h>
#else
# include <endian.h>
#endif
#ifdef WIN32 #ifdef WIN32
#define NOMINMAX #define NOMINMAX
#include "windows.h" #include "windows.h"
@@ -188,7 +194,6 @@ uint32_t mfcuk_verify_key_block(nfc_device_t* pnd, uint32_t uiUID, uint64_t ui64
uint32_t ks3 = 0; uint32_t ks3 = 0;
struct Crypto1State *pcs; struct Crypto1State *pcs;
uint64_t lfsr; uint64_t lfsr;
unsigned char* plfsr = (unsigned char*)&lfsr;
// Communication related variables // Communication related variables
byte_t abtAuth[4] = { 0x00,0x00,0x00,0x00 }; byte_t abtAuth[4] = { 0x00,0x00,0x00,0x00 };
@@ -236,7 +241,7 @@ uint32_t mfcuk_verify_key_block(nfc_device_t* pnd, uint32_t uiUID, uint64_t ui64
nfc_configure (pnd, NDO_EASY_FRAMING, true); nfc_configure (pnd, NDO_EASY_FRAMING, true);
// Save the tag nonce (nt) // Save the tag nonce (nt)
nt = mirror_bytes(abtRx, 4); nt = bswap32(*((uint32_t *) &abtRx));
nt_orig = nt; nt_orig = nt;
// Init cipher with key // Init cipher with key
@@ -391,7 +396,7 @@ uint32_t mfcuk_key_recovery_block(nfc_device_t* pnd, uint32_t uiUID, uint64_t ui
//print_hex(abtRx,4); //print_hex(abtRx,4);
// Save the tag nonce (nt) // Save the tag nonce (nt)
nt = mirror_bytes(abtRx, 4); nt = bswap32(*((uint32_t *) &abtRx));
// zveriu // zveriu
//printf("INFO - Nonce distance %d (from 0x%08x, to 0x%08x)\n", nonce_distance(nt, nt_orig), nt, nt_orig); //printf("INFO - Nonce distance %d (from 0x%08x, to 0x%08x)\n", nonce_distance(nt, nt_orig), nt, nt_orig);
@@ -906,14 +911,11 @@ int main(int argc, char* argv[])
nfc_target_info_t ti; nfc_target_info_t ti;
// mifare and crapto related // mifare and crapto related
uint32_t uiBlock = 0;//14;
uint64_t ui64Key = 0xc1e51c63b8f5;//0xffffffffffff;
uint32_t uiErrCode = MFCUK_SUCCESS; uint32_t uiErrCode = MFCUK_SUCCESS;
uint64_t ui64KeyRecovered; uint64_t ui64KeyRecovered;
mifare_classic_tag_ext dump_loaded_tag; mifare_classic_tag_ext dump_loaded_tag;
mifare_classic_tag_ext tag_on_reader; mifare_classic_tag_ext tag_on_reader;
mifare_classic_tag_ext tag_recover_verify; mifare_classic_tag_ext tag_recover_verify;
mifare_key_type bKeyType = keyA;
// fingerprint options related // fingerprint options related
mifare_classic_tag finger_tag; mifare_classic_tag finger_tag;
@@ -1078,7 +1080,7 @@ int main(int argc, char* argv[])
if (st >= MIFARE_CLASSIC_UID_BYTELENGTH) if (st >= MIFARE_CLASSIC_UID_BYTELENGTH)
{ {
tag_recover_verify.uid = mirror_bytes(uidOpt, 4); tag_recover_verify.uid = bswap32(*((uint32_t *) &uidOpt));
memcpy( tag_recover_verify.tag_basic.amb[0].mbm.abtUID, uidOpt, MIFARE_CLASSIC_UID_BYTELENGTH ); memcpy( tag_recover_verify.tag_basic.amb[0].mbm.abtUID, uidOpt, MIFARE_CLASSIC_UID_BYTELENGTH );
bfOpts[ch] = true; bfOpts[ch] = true;
} }
@@ -1305,7 +1307,7 @@ int main(int argc, char* argv[])
// strtoul failed somewhere. WTF?! strtoul() is not properly setting errno... errrrrggh! // strtoul failed somewhere. WTF?! strtoul() is not properly setting errno... errrrrggh!
if (errno != 0) if (errno != 0)
{ {
fprintf(stderr, "WARN: Invalid hex literal %s for option -P\n", token); fprintf(stderr, "WARN: Invalid hex literal %s for option -P\n", optarg);
} }
iter++; iter++;
@@ -1314,7 +1316,7 @@ int main(int argc, char* argv[])
// if not all arguments were fine, fire warning // if not all arguments were fine, fire warning
if ( iter != sizeof(pm3_full_set_log)/sizeof(pm3_full_set_log[0]) ) if ( iter != sizeof(pm3_full_set_log)/sizeof(pm3_full_set_log[0]) )
{ {
fprintf(stderr, "WARN: Invalid number of hex literal for option -P\n", optarg); fprintf(stderr, "WARN: Invalid number of hex literal for option -P\n");
} }
// otherwise try to recover // otherwise try to recover
else else
@@ -1458,7 +1460,7 @@ int main(int argc, char* argv[])
memcpy( ptr_trailer, ptr_trailer_dump, sizeof(*ptr_trailer) ); memcpy( ptr_trailer, ptr_trailer_dump, sizeof(*ptr_trailer) );
tag_recover_verify.type = tag_recover_verify.tag_basic.amb[0].mbm.btUnknown; tag_recover_verify.type = tag_recover_verify.tag_basic.amb[0].mbm.btUnknown;
tag_recover_verify.uid = mirror_bytes(tag_recover_verify.tag_basic.amb[0].mbm.abtUID, 4); tag_recover_verify.uid = bswap32 (*((uint32_t *) &(tag_recover_verify.tag_basic.amb[0].mbm.abtUID)));
} }
} }
@@ -1509,13 +1511,13 @@ int main(int argc, char* argv[])
} }
// Tag on the reader UID // Tag on the reader UID
tag_on_reader.uid = mirror_bytes(ti.nai.abtUid, 4); tag_on_reader.uid = bswap32(*((uint32_t *) &(ti.nai.abtUid)));
memcpy( tag_on_reader.tag_basic.amb[0].mbm.abtUID, ti.nai.abtUid, MIFARE_CLASSIC_UID_BYTELENGTH); memcpy( tag_on_reader.tag_basic.amb[0].mbm.abtUID, ti.nai.abtUid, MIFARE_CLASSIC_UID_BYTELENGTH);
// No command line tag UID specified, take it from the tag on the reader // No command line tag UID specified, take it from the tag on the reader
if ( !bfOpts['U'] ) if ( !bfOpts['U'] )
{ {
tag_recover_verify.uid = mirror_bytes(ti.nai.abtUid, 4); tag_recover_verify.uid = bswap32(*((uint32_t *) &(ti.nai.abtUid)));
memcpy( tag_recover_verify.tag_basic.amb[0].mbm.abtUID, ti.nai.abtUid, MIFARE_CLASSIC_UID_BYTELENGTH); memcpy( tag_recover_verify.tag_basic.amb[0].mbm.abtUID, ti.nai.abtUid, MIFARE_CLASSIC_UID_BYTELENGTH);
} }
@@ -1536,7 +1538,6 @@ int main(int argc, char* argv[])
for (i=0; i<max_sectors; i++) for (i=0; i<max_sectors; i++)
{ {
uint64_t crntVerifKey = 0; uint64_t crntVerifKey = 0;
uint32_t crntVerifUID = tag_recover_verify.uid;
byte_t crntVerifTagType = tag_recover_verify.type; byte_t crntVerifTagType = tag_recover_verify.type;
int crntNumVerifKeys = (bfOpts['D'])?(numDefKeys):(1); int crntNumVerifKeys = (bfOpts['D'])?(numDefKeys):(1);
mifare_param mp; mifare_param mp;