mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-07 05:31:17 -07:00
fix: (issue #73) hf mf cload didn't work. Add more annotations for Magic Cards operation.
This commit is contained in:
parent
30364d2711
commit
16a95d76ac
3 changed files with 25 additions and 22 deletions
|
@ -62,19 +62,21 @@ void annotateIso14443a(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize)
|
||||||
snprintf(exp,size,"ANTICOLL-2"); break;
|
snprintf(exp,size,"ANTICOLL-2"); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case ISO14443A_CMD_REQA: snprintf(exp,size,"REQA"); break;
|
case ISO14443A_CMD_REQA: snprintf(exp,size,"REQA"); break;
|
||||||
case ISO14443A_CMD_READBLOCK: snprintf(exp,size,"READBLOCK(%d)",cmd[1]); break;
|
case ISO14443A_CMD_READBLOCK: snprintf(exp,size,"READBLOCK(%d)",cmd[1]); break;
|
||||||
case ISO14443A_CMD_WRITEBLOCK: snprintf(exp,size,"WRITEBLOCK(%d)",cmd[1]); break;
|
case ISO14443A_CMD_WRITEBLOCK: snprintf(exp,size,"WRITEBLOCK(%d)",cmd[1]); break;
|
||||||
case ISO14443A_CMD_HALT: snprintf(exp,size,"HALT"); break;
|
case ISO14443A_CMD_HALT: snprintf(exp,size,"HALT"); break;
|
||||||
case ISO14443A_CMD_RATS: snprintf(exp,size,"RATS"); break;
|
case ISO14443A_CMD_RATS: snprintf(exp,size,"RATS"); break;
|
||||||
case MIFARE_CMD_INC: snprintf(exp,size,"INC(%d)",cmd[1]); break;
|
case MIFARE_CMD_INC: snprintf(exp,size,"INC(%d)",cmd[1]); break;
|
||||||
case MIFARE_CMD_DEC: snprintf(exp,size,"DEC(%d)",cmd[1]); break;
|
case MIFARE_CMD_DEC: snprintf(exp,size,"DEC(%d)",cmd[1]); break;
|
||||||
case MIFARE_CMD_RESTORE: snprintf(exp,size,"RESTORE(%d)",cmd[1]); break;
|
case MIFARE_CMD_RESTORE: snprintf(exp,size,"RESTORE(%d)",cmd[1]); break;
|
||||||
case MIFARE_CMD_TRANSFER: snprintf(exp,size,"TRANSFER(%d)",cmd[1]); break;
|
case MIFARE_CMD_TRANSFER: snprintf(exp,size,"TRANSFER(%d)",cmd[1]); break;
|
||||||
case MIFARE_AUTH_KEYA: snprintf(exp,size,"AUTH-A(%d)",cmd[1]); break;
|
case MIFARE_AUTH_KEYA: snprintf(exp,size,"AUTH-A(%d)",cmd[1]); break;
|
||||||
case MIFARE_AUTH_KEYB: snprintf(exp,size,"AUTH-B(%d)",cmd[1]); break;
|
case MIFARE_AUTH_KEYB: snprintf(exp,size,"AUTH-B(%d)",cmd[1]); break;
|
||||||
case MIFARE_MAGICMODE: snprintf(exp,size,"MAGIC"); break;
|
case MIFARE_MAGICWUPC1: snprintf(exp,size,"MAGIC WUPC1"); break;
|
||||||
default: snprintf(exp,size,"?"); break;
|
case MIFARE_MAGICWUPC2: snprintf(exp,size,"MAGIC WUPC2"); break;
|
||||||
|
case MIFARE_MAGICWIPEC: snprintf(exp,size,"MAGIC WIPEC"); break;
|
||||||
|
default: snprintf(exp,size,"?"); break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1554,15 +1554,14 @@ int CmdHF14AMfCLoad(const char *Cmd)
|
||||||
if (ctmp == 'e' || ctmp == 'E') fillFromEmulator = 1;
|
if (ctmp == 'e' || ctmp == 'E') fillFromEmulator = 1;
|
||||||
|
|
||||||
if (fillFromEmulator) {
|
if (fillFromEmulator) {
|
||||||
flags = CSETBLOCK_INIT_FIELD + CSETBLOCK_WUPC;
|
|
||||||
for (blockNum = 0; blockNum < 16 * 4; blockNum += 1) {
|
for (blockNum = 0; blockNum < 16 * 4; blockNum += 1) {
|
||||||
if (mfEmlGetMem(buf8, blockNum, 1)) {
|
if (mfEmlGetMem(buf8, blockNum, 1)) {
|
||||||
PrintAndLog("Cant get block: %d", blockNum);
|
PrintAndLog("Cant get block: %d", blockNum);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
if (blockNum == 0) flags = CSETBLOCK_INIT_FIELD + CSETBLOCK_WUPC; // switch on field and send magic sequence
|
||||||
if (blockNum == 2) flags = 0;
|
if (blockNum == 1) flags = 0; // just write
|
||||||
if (blockNum == 16 * 4 - 1) flags = CSETBLOCK_HALT + CSETBLOCK_RESET_FIELD;
|
if (blockNum == 16 * 4 - 1) flags = CSETBLOCK_HALT + CSETBLOCK_RESET_FIELD; // Done. Magic Halt and switch off field.
|
||||||
|
|
||||||
if (mfCSetBlock(blockNum, buf8, NULL, 0, flags)) {
|
if (mfCSetBlock(blockNum, buf8, NULL, 0, flags)) {
|
||||||
PrintAndLog("Cant set magic card block: %d", blockNum);
|
PrintAndLog("Cant set magic card block: %d", blockNum);
|
||||||
|
@ -1587,7 +1586,6 @@ int CmdHF14AMfCLoad(const char *Cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
blockNum = 0;
|
blockNum = 0;
|
||||||
flags = CSETBLOCK_INIT_FIELD + CSETBLOCK_WUPC;
|
|
||||||
while(!feof(f)){
|
while(!feof(f)){
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
|
@ -1597,7 +1595,7 @@ int CmdHF14AMfCLoad(const char *Cmd)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(buf) < 32){
|
if (strlen(buf) < 32) {
|
||||||
if(strlen(buf) && feof(f))
|
if(strlen(buf) && feof(f))
|
||||||
break;
|
break;
|
||||||
PrintAndLog("File content error. Block data must include 32 HEX symbols");
|
PrintAndLog("File content error. Block data must include 32 HEX symbols");
|
||||||
|
@ -1606,8 +1604,9 @@ int CmdHF14AMfCLoad(const char *Cmd)
|
||||||
for (i = 0; i < 32; i += 2)
|
for (i = 0; i < 32; i += 2)
|
||||||
sscanf(&buf[i], "%02x", (unsigned int *)&buf8[i / 2]);
|
sscanf(&buf[i], "%02x", (unsigned int *)&buf8[i / 2]);
|
||||||
|
|
||||||
if (blockNum == 2) flags = 0;
|
if (blockNum == 0) flags = CSETBLOCK_INIT_FIELD + CSETBLOCK_WUPC; // switch on field and send magic sequence
|
||||||
if (blockNum == 16 * 4 - 1) flags = CSETBLOCK_HALT + CSETBLOCK_RESET_FIELD;
|
if (blockNum == 1) flags = 0; // just write
|
||||||
|
if (blockNum == 16 * 4 - 1) flags = CSETBLOCK_HALT + CSETBLOCK_RESET_FIELD; // Done. Switch off field.
|
||||||
|
|
||||||
if (mfCSetBlock(blockNum, buf8, NULL, 0, flags)) {
|
if (mfCSetBlock(blockNum, buf8, NULL, 0, flags)) {
|
||||||
PrintAndLog("Can't set magic card block: %d", blockNum);
|
PrintAndLog("Can't set magic card block: %d", blockNum);
|
||||||
|
|
|
@ -115,7 +115,9 @@ NXP/Philips CUSTOM COMMANDS
|
||||||
|
|
||||||
#define MIFARE_AUTH_KEYA 0x60
|
#define MIFARE_AUTH_KEYA 0x60
|
||||||
#define MIFARE_AUTH_KEYB 0x61
|
#define MIFARE_AUTH_KEYB 0x61
|
||||||
#define MIFARE_MAGICMODE 0x40
|
#define MIFARE_MAGICWUPC1 0x40
|
||||||
|
#define MIFARE_MAGICWUPC2 0x43
|
||||||
|
#define MIFARE_MAGICWIPEC 0x41
|
||||||
#define MIFARE_CMD_INC 0xC0
|
#define MIFARE_CMD_INC 0xC0
|
||||||
#define MIFARE_CMD_DEC 0xC1
|
#define MIFARE_CMD_DEC 0xC1
|
||||||
#define MIFARE_CMD_RESTORE 0xC2
|
#define MIFARE_CMD_RESTORE 0xC2
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue