X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a087e9cf40bdb4d7546a7645995624a519aef2a6..1b3c567df229f873ed93e0148c7781a2ee74f804:/client/cmdhfmf.c?ds=inline

diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c
index db563cad..72cbf8f7 100644
--- a/client/cmdhfmf.c
+++ b/client/cmdhfmf.c
@@ -96,8 +96,7 @@ int CmdHF14AMfWrBl(const char *Cmd)
 	uint8_t blockNo = 0;
 	uint8_t keyType = 0;
 	uint8_t key[6] = {0, 0, 0, 0, 0, 0};
-	uint8_t bldata[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-	
+	uint8_t bldata[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};	
 	char cmdp	= 0x00;
 
 	if (strlen(Cmd)<3) {
@@ -124,10 +123,10 @@ int CmdHF14AMfWrBl(const char *Cmd)
 	PrintAndLog("--block no:%d, key type:%c, key:%s", blockNo, keyType?'B':'A', sprint_hex(key, 6));
 	PrintAndLog("--data: %s", sprint_hex(bldata, 16));
 	
-  UsbCommand c = {CMD_MIFARE_WRITEBL, {blockNo, keyType, 0}};
+	UsbCommand c = {CMD_MIFARE_WRITEBL, {blockNo, keyType, 0}};
 	memcpy(c.d.asBytes, key, 6);
 	memcpy(c.d.asBytes + 10, bldata, 16);
-  SendCommand(&c);
+	SendCommand(&c);
 
 	UsbCommand resp;
 	if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
@@ -144,11 +143,9 @@ int CmdHF14AMfRdBl(const char *Cmd)
 {
 	uint8_t blockNo = 0;
 	uint8_t keyType = 0;
-	uint8_t key[6] = {0, 0, 0, 0, 0, 0};
-	
+	uint8_t key[6] = {0, 0, 0, 0, 0, 0};	
 	char cmdp	= 0x00;
 
-
 	if (strlen(Cmd)<3) {
 		PrintAndLog("Usage:  hf mf rdbl    <block number> <key A/B> <key (12 hex symbols)>");
 		PrintAndLog("        sample: hf mf rdbl 0 A FFFFFFFFFFFF ");
@@ -168,9 +165,9 @@ int CmdHF14AMfRdBl(const char *Cmd)
 	}
 	PrintAndLog("--block no:%d, key type:%c, key:%s ", blockNo, keyType?'B':'A', sprint_hex(key, 6));
 	
-  UsbCommand c = {CMD_MIFARE_READBL, {blockNo, keyType, 0}};
+	UsbCommand c = {CMD_MIFARE_READBL, {blockNo, keyType, 0}};
 	memcpy(c.d.asBytes, key, 6);
-  SendCommand(&c);
+	SendCommand(&c);
 
 	UsbCommand resp;
 	if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
@@ -432,13 +429,13 @@ int CmdHF14AMfDump(const char *Cmd)
 
 int CmdHF14AMfRestore(const char *Cmd)
 {
-	uint8_t sectorNo,blockNo;
+	uint8_t sectorNo,blockNo = 0;
 	uint8_t keyType = 0;
-	uint8_t key[6] = {0xFF};
+	uint8_t key[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
 	uint8_t bldata[16] = {0x00};
 	uint8_t keyA[40][6];
 	uint8_t keyB[40][6];
-	uint8_t numSectors;
+	uint8_t numSectors = 0;
 	
 	FILE *fdump;
 	FILE *fkeys;
@@ -550,12 +547,10 @@ int CmdHF14AMfNested(const char *Cmd)
 	uint8_t keyBlock[13*6];
 	uint64_t key64 = 0;
 	bool transferToEml = false;
-	
 	bool createDumpFile = false;
 	FILE *fkeys;
 	uint8_t standart[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
 	uint8_t tempkey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-	
 	char cmdp, ctmp;
 
 	if (strlen(Cmd)<3) {
@@ -686,7 +681,6 @@ int CmdHF14AMfNested(const char *Cmd)
 				}
 			}
 		}
-		
 		// nested sectors
 		iterations = 0;
 		PrintAndLog("nested...");
@@ -791,7 +785,7 @@ int CmdHF14AMfChk(const char *Cmd)
 
 	FILE * f;
 	char filename[FILE_PATH_SIZE]={0};
-	char buf[13];
+	char buf[13]  = {0x00};
 	uint8_t *keyBlock = NULL, *p;
 	uint8_t stKeyBlock = 20;
 	
@@ -1139,11 +1133,9 @@ int CmdHF14AMfEClear(const char *Cmd)
 
 int CmdHF14AMfESet(const char *Cmd)
 {
-	uint8_t memBlock[16];
+	uint8_t memBlock[16] = {0x00};
 	uint8_t blockNo = 0;
 
-	memset(memBlock, 0x00, sizeof(memBlock));
-
 	if (strlen(Cmd) < 3 || param_getchar(Cmd, 0) == 'h') {
 		PrintAndLog("Usage:  hf mf eset <block number> <block data (32 hex symbols)>");
 		PrintAndLog(" sample: hf mf eset 1 000102030405060708090a0b0c0d0e0f ");
@@ -1168,7 +1160,7 @@ int CmdHF14AMfESet(const char *Cmd)
 int CmdHF14AMfELoad(const char *Cmd)
 {
 	FILE * f;
-	char filename[FILE_PATH_SIZE];
+	char filename[FILE_PATH_SIZE] = {0x00};
 	char *fnameptr = filename;
 	char buf[64] = {0x00};
 	uint8_t buf8[64] = {0x00};
@@ -1264,9 +1256,9 @@ int CmdHF14AMfELoad(const char *Cmd)
 int CmdHF14AMfESave(const char *Cmd)
 {
 	FILE * f;
-	char filename[FILE_PATH_SIZE];
+	char filename[FILE_PATH_SIZE] = {0x00};
 	char * fnameptr = filename;
-	uint8_t buf[64];
+	uint8_t buf[64] = {0x00};
 	int i, j, len, numBlocks;
 	int nameParamNo = 1;
 	
@@ -1388,8 +1380,8 @@ int CmdHF14AMfEKeyPrn(const char *Cmd)
 {
 	int i;
 	uint8_t numSectors;
-	uint8_t data[16];
-	uint64_t keyA, keyB;
+	uint8_t data[16] = {0x00};
+	uint64_t keyA, keyB = 0;
 	
 	if (param_getchar(Cmd, 0) == 'h') {
 		PrintAndLog("It prints the keys loaded in the emulator memory");
@@ -1500,16 +1492,16 @@ int CmdHF14AMfCSetUID(const char *Cmd)
 
 int CmdHF14AMfCSetBlk(const char *Cmd)
 {
-	//uint8_t uid[8] = {0x00};
 	uint8_t memBlock[16] = {0x00};
 	uint8_t blockNo = 0;
-	int res;
+	bool wipeCard = FALSE;
+	int res = 0;	
 
 	if (strlen(Cmd) < 1 || param_getchar(Cmd, 0) == 'h') {
-		PrintAndLog("Usage:  hf mf csetblk <block number> <block data (32 hex symbols)>");
+		PrintAndLog("Usage:  hf mf csetblk <block number> <block data (32 hex symbols)> [w]");
 		PrintAndLog("sample:  hf mf csetblk 1 01020304050607080910111213141516");
-		PrintAndLog("Set block data for magic Chinese card (only works with!!!)");
-		PrintAndLog("If you want wipe card then add 'w' into command line. \n");
+		PrintAndLog("Set block data for magic Chinese card (only works with such cards)");
+		PrintAndLog("If you also want to wipe the card then add 'w' at the end of the command line.");
 		return 0;
 	}	
 
@@ -1520,15 +1512,16 @@ int CmdHF14AMfCSetBlk(const char *Cmd)
 		return 1;
 	}
 
+	char ctmp = param_getchar(Cmd, 2);
+	wipeCard = (ctmp == 'w' || ctmp == 'W');
+
 	PrintAndLog("--block number:%2d data:%s", blockNo, sprint_hex(memBlock, 16));
 
-	//res = mfCSetBlock(blockNo, memBlock, uid, 0, CSETBLOCK_SINGLE_OPER);
-	res = mfCSetBlock(blockNo, memBlock, NULL, 0, CSETBLOCK_SINGLE_OPER);
+	res = mfCSetBlock(blockNo, memBlock, NULL, wipeCard, CSETBLOCK_SINGLE_OPER);
 	if (res) {
-			PrintAndLog("Can't write block. error=%d", res);
-			return 1;
-		}
-	
+		PrintAndLog("Can't write block. error=%d", res);
+		return 1;
+	}	
 	return 0;
 }
 
@@ -1631,15 +1624,14 @@ int CmdHF14AMfCLoad(const char *Cmd)
 }
 
 int CmdHF14AMfCGetBlk(const char *Cmd) {
-	uint8_t memBlock[16];
+	uint8_t memBlock[16] = {0x00};
 	uint8_t blockNo = 0;
 	int res;
-	memset(memBlock, 0x00, sizeof(memBlock));
 
 	if (strlen(Cmd) < 1 || param_getchar(Cmd, 0) == 'h') {
 		PrintAndLog("Usage:  hf mf cgetblk <block number>");
 		PrintAndLog("sample:  hf mf cgetblk 1");
-		PrintAndLog("Get block data from magic Chinese card (only works with!!!)\n");
+		PrintAndLog("Get block data from magic Chinese card (only works with such cards)\n");
 		return 0;
 	}	
 
@@ -1666,7 +1658,7 @@ int CmdHF14AMfCGetSc(const char *Cmd) {
 	if (strlen(Cmd) < 1 || param_getchar(Cmd, 0) == 'h') {
 		PrintAndLog("Usage:  hf mf cgetsc <sector number>");
 		PrintAndLog("sample:  hf mf cgetsc 0");
-		PrintAndLog("Get sector data from magic Chinese card (only works with!!!)\n");
+		PrintAndLog("Get sector data from magic Chinese card (only works with such cards)\n");
 		return 0;
 	}	
 
@@ -1801,7 +1793,7 @@ int CmdHF14AMfSniff(const char *Cmd){
 	int blockLen = 0;
 	int pckNum = 0;
 	int num = 0;
-	uint8_t uid[7];
+	uint8_t uid[7] = {0x00};
 	uint8_t uid_len;
 	uint8_t atqa[2] = {0x00};
 	uint8_t sak;