X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/0194ce8fc842da0e40b9d7bbfcb1837f508de9ce..d0724780ab600fd4c8e4b3a7dc43a9a01a3e8fb8:/client/cmdhf14a.c

diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c
index d0486bd1..b5a90b38 100644
--- a/client/cmdhf14a.c
+++ b/client/cmdhf14a.c
@@ -142,9 +142,9 @@ int usage_hf_14a_sim(void) {
 //	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 legitimate reader");
-	PrintAndLog("\n   sample : hf 14a sim t 1 u 1122344 x");
-	PrintAndLog("          : hf 14a sim t 1 u 1122344");
-	PrintAndLog("          : hf 14a sim t 1 u 1122344556677");
+	PrintAndLog("\n   sample : hf 14a sim t 1 u 11223344 x");
+	PrintAndLog("          : hf 14a sim t 1 u 11223344");
+	PrintAndLog("          : hf 14a sim t 1 u 11223344556677");
 //	PrintAndLog("          : hf 14a sim t 1 u 11223445566778899AA\n");
 	return 0;
 }
@@ -507,7 +507,7 @@ int CmdHF14ASim(const char *Cmd) {
 	uint8_t uid[10] = {0,0,0,0,0,0,0,0,0,0};
 	int uidlen = 0;
 	uint8_t data[40];
-	uint8_t key[6] = {0,0,0,0,0,0};
+	uint64_t key = 0;
 	UsbCommand resp;
 	bool useUIDfromEML = TRUE;
 
@@ -562,7 +562,7 @@ int CmdHF14ASim(const char *Cmd) {
 	PrintAndLog("Press pm3-button to abort simulation");
 	
 	UsbCommand c = {CMD_SIMULATE_TAG_ISO_14443a,{ tagtype, flags, 0 }};	
-	memcpy(c.d.asBytes, uid, uidlen);
+	memcpy(c.d.asBytes, uid, uidlen>>1);
 	clearCommandBuffer();
 	SendCommand(&c);	
 
@@ -570,13 +570,14 @@ int CmdHF14ASim(const char *Cmd) {
 		if ( WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
 			if ( (resp.arg[0] & 0xffff) == CMD_SIMULATE_MIFARE_CARD ){
 				memset(data, 0x00, sizeof(data));
-				memset(key, 0x00, sizeof(key));
 				int len = (resp.arg[1] > sizeof(data)) ? sizeof(data) : resp.arg[1];
 				memcpy(data, resp.d.asBytes, len);
-				uint32_t cuid = bytes_to_num(data, 4);
-				tryMfk32(cuid, data, key); // 201604, iceman,  errors!
-				//tryMfk32_moebius(cuid, data, key);
-				//tryMfk64(cuid, data, key);
+				key = 0;
+				
+				if ( flags & FLAG_NR_AR_ATTACK ) {
+					bool found = tryMfk32(data, &key);
+					found ^= tryMfk32_moebius(data, &key);
+				}
 			}
 		}
 	}
@@ -776,11 +777,7 @@ static command_t CommandTable[] =
 };
 
 int CmdHF14A(const char *Cmd) {
-	// flush
 	clearCommandBuffer();
-	//WaitForResponseTimeout(CMD_ACK,NULL,100);
-
-	// parse
 	CmdsParse(CommandTable, Cmd);
 	return 0;
 }