Re-submitting Midnitesnake's Mifare Ultralight Patch

This commit is contained in:
PenturaLabs 2014-03-18 14:02:32 +00:00
commit 1801456ede

View file

@ -143,11 +143,12 @@ int CmdHF14AMfWrBl(const char *Cmd)
int CmdHF14AMfUWrBl(const char *Cmd) int CmdHF14AMfUWrBl(const char *Cmd)
{ {
uint8_t blockNo = 0; uint8_t blockNo = 0;
bool chinese_card=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};
UsbCommand resp; UsbCommand resp;
if (strlen(Cmd)<3) { if (strlen(Cmd)<3) {
PrintAndLog("Usage: hf mf uwrbl <block number> <block data (8 hex symbols)>"); PrintAndLog("Usage: hf mf uwrbl <block number> <block data (8 hex symbols)> <w>");
PrintAndLog(" sample: hf mf uwrbl 0 01020304"); PrintAndLog(" sample: hf mf uwrbl 0 01020304");
return 0; return 0;
} }
@ -158,15 +159,51 @@ int CmdHF14AMfUWrBl(const char *Cmd)
return 1; return 1;
} }
switch(blockNo) if (strchr(Cmd,'w') != 0) {
{ chinese_card=1;
}
switch(blockNo){
case 0: case 0:
if (!chinese_card){
PrintAndLog("Access Denied"); PrintAndLog("Access Denied");
}else{
PrintAndLog("--specialblock no:%02x", blockNo);
PrintAndLog("--data: %s", sprint_hex(bldata, 4));
UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};
memcpy(d.d.asBytes,bldata, 4);
SendCommand(&d);
if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
uint8_t isOK = resp.arg[0] & 0xff;
PrintAndLog("isOk:%02x", isOK);
} else {
PrintAndLog("Command execute timeout");
}
}
break; break;
case 1: case 1:
if (!chinese_card){
PrintAndLog("Access Denied"); PrintAndLog("Access Denied");
}else{
PrintAndLog("--specialblock no:%02x", blockNo);
PrintAndLog("--data: %s", sprint_hex(bldata, 4));
UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};
memcpy(d.d.asBytes,bldata, 4);
SendCommand(&d);
if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
uint8_t isOK = resp.arg[0] & 0xff;
PrintAndLog("isOk:%02x", isOK);
} else {
PrintAndLog("Command execute timeout");
}
}
break; break;
case 2: case 2:
if (!chinese_card){
PrintAndLog("Access Denied");
}else{
PrintAndLog("--specialblock no:%02x", blockNo); PrintAndLog("--specialblock no:%02x", blockNo);
PrintAndLog("--data: %s", sprint_hex(bldata, 4)); PrintAndLog("--data: %s", sprint_hex(bldata, 4));
UsbCommand c = {CMD_MIFAREU_WRITEBL, {blockNo}}; UsbCommand c = {CMD_MIFAREU_WRITEBL, {blockNo}};
@ -179,6 +216,7 @@ int CmdHF14AMfUWrBl(const char *Cmd)
} else { } else {
PrintAndLog("Command execute timeout"); PrintAndLog("Command execute timeout");
} }
}
break; break;
case 3: case 3:
PrintAndLog("--specialblock no:%02x", blockNo); PrintAndLog("--specialblock no:%02x", blockNo);
@ -197,8 +235,6 @@ int CmdHF14AMfUWrBl(const char *Cmd)
default: default:
PrintAndLog("--block no:%02x", blockNo); PrintAndLog("--block no:%02x", blockNo);
PrintAndLog("--data: %s", sprint_hex(bldata, 4)); PrintAndLog("--data: %s", sprint_hex(bldata, 4));
//UsbCommand e = {CMD_MIFAREU_WRITEBL_COMPAT, {blockNo}};
//memcpy(e.d.asBytes,bldata, 16);
UsbCommand e = {CMD_MIFAREU_WRITEBL, {blockNo}}; UsbCommand e = {CMD_MIFAREU_WRITEBL, {blockNo}};
memcpy(e.d.asBytes,bldata, 4); memcpy(e.d.asBytes,bldata, 4);
SendCommand(&e); SendCommand(&e);