mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
style
This commit is contained in:
parent
f0a6b1bd67
commit
74f02fef8a
12 changed files with 229 additions and 151 deletions
|
@ -1291,7 +1291,7 @@ bool SimulateIso14443aInit(uint8_t tagType, uint16_t flags, uint8_t *data, tag_r
|
||||||
{ .response = rPPS, .response_n = sizeof(rPPS) }, // PPS response
|
{ .response = rPPS, .response_n = sizeof(rPPS) }, // PPS response
|
||||||
{ .response = rPACK, .response_n = sizeof(rPACK) } // PACK response
|
{ .response = rPACK, .response_n = sizeof(rPACK) } // PACK response
|
||||||
};
|
};
|
||||||
|
|
||||||
// "precompile" responses. There are 12 predefined responses with a total of 84 bytes data to transmit.
|
// "precompile" responses. There are 12 predefined responses with a total of 84 bytes data to transmit.
|
||||||
|
|
||||||
// Coded responses need one byte per bit to transfer (data, parity, start, stop, correction)
|
// Coded responses need one byte per bit to transfer (data, parity, start, stop, correction)
|
||||||
|
@ -3105,7 +3105,7 @@ void ReaderIso14443a(PacketCommandNG *c) {
|
||||||
FpgaDisableTracing();
|
FpgaDisableTracing();
|
||||||
reply_old(CMD_ACK, arg0, 0, 0, buf, sizeof(buf));
|
reply_old(CMD_ACK, arg0, 0, 0, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
arg0 = ReaderReceive(buf, par);
|
arg0 = ReaderReceive(buf, par);
|
||||||
FpgaDisableTracing();
|
FpgaDisableTracing();
|
||||||
reply_old(CMD_ACK, arg0, 0, 0, buf, sizeof(buf));
|
reply_old(CMD_ACK, arg0, 0, 0, buf, sizeof(buf));
|
||||||
|
|
|
@ -1395,7 +1395,7 @@ static int CmdHF14AMfRestore(const char *Cmd) {
|
||||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
||||||
PrintAndLogEx(WARNING, "Command execute timeout");
|
PrintAndLogEx(WARNING, "Command execute timeout");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int isOK = resp.oldarg[0] & 0xff;
|
int isOK = resp.oldarg[0] & 0xff;
|
||||||
if (isOK == 1) {
|
if (isOK == 1) {
|
||||||
|
@ -1406,14 +1406,14 @@ static int CmdHF14AMfRestore(const char *Cmd) {
|
||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
PrintAndLogEx(INFO, "Writing to manufacture block w key " _YELLOW_("%c") " ( " _RED_("fail") " )",
|
PrintAndLogEx(INFO, "Writing to manufacture block w key " _YELLOW_("%c") " ( " _RED_("fail") " )",
|
||||||
(kt == MF_KEY_A) ? 'A' : 'B'
|
(kt == MF_KEY_A) ? 'A' : 'B'
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
PrintAndLogEx(FAILED, "Write to block " _YELLOW_("%u") " w key " _YELLOW_("%c") " ( " _RED_("fail") " ) ",
|
PrintAndLogEx(FAILED, "Write to block " _YELLOW_("%u") " w key " _YELLOW_("%c") " ( " _RED_("fail") " ) ",
|
||||||
blockno,
|
blockno,
|
||||||
(kt == MF_KEY_A) ? 'A' : 'B'
|
(kt == MF_KEY_A) ? 'A' : 'B'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end loop key types
|
} // end loop key types
|
||||||
|
@ -1424,7 +1424,7 @@ out:
|
||||||
free(ref_dump);
|
free(ref_dump);
|
||||||
free(keyA);
|
free(keyA);
|
||||||
free(keyB);
|
free(keyB);
|
||||||
PrintAndLogEx(INFO, "-----+------------------------------------------------------------");
|
PrintAndLogEx(INFO, "-----+------------------------------------------------------------");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, "Done!");
|
PrintAndLogEx(INFO, "Done!");
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
|
@ -3604,7 +3604,7 @@ out:
|
||||||
// if (singleSector)
|
// if (singleSector)
|
||||||
// printKeyTableEx(1, e_sector, mfSectorNum(blockNo));
|
// printKeyTableEx(1, e_sector, mfSectorNum(blockNo));
|
||||||
// else
|
// else
|
||||||
printKeyTable(sectors_cnt, e_sector);
|
printKeyTable(sectors_cnt, e_sector);
|
||||||
|
|
||||||
if (transferToEml) {
|
if (transferToEml) {
|
||||||
// fast push mode
|
// fast push mode
|
||||||
|
@ -6273,7 +6273,7 @@ skipfile:
|
||||||
memcpy(block, firstblocks[b], MFBLOCK_SIZE);
|
memcpy(block, firstblocks[b], MFBLOCK_SIZE);
|
||||||
break;
|
break;
|
||||||
default: {
|
default: {
|
||||||
if (mfIsSectorTrailerBasedOnBlocks(i,j)) {
|
if (mfIsSectorTrailerBasedOnBlocks(i, j)) {
|
||||||
// ST NDEF
|
// ST NDEF
|
||||||
memcpy(block, firstblocks[7], MFBLOCK_SIZE);
|
memcpy(block, firstblocks[7], MFBLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -6787,12 +6787,12 @@ static int mfc_furui_recovery(uint8_t items, uint8_t tracedata[FURUI_MAX_TRACES]
|
||||||
|
|
||||||
uint64_t key64 = -1;
|
uint64_t key64 = -1;
|
||||||
if (mfkey32_moebius(&data, &key64)) {
|
if (mfkey32_moebius(&data, &key64)) {
|
||||||
PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ "_GREEN_("%012" PRIX64) " ]",
|
PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ "_GREEN_("%012" PRIX64) " ]",
|
||||||
sprint_hex_inrow(tracedata[i], 4),
|
sprint_hex_inrow(tracedata[i], 4),
|
||||||
data.sector,
|
data.sector,
|
||||||
(data.keytype == 0x60) ? 'A' : 'B',
|
(data.keytype == 0x60) ? 'A' : 'B',
|
||||||
key64
|
key64
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6836,11 +6836,11 @@ static int mfc_supercard_gen2_recovery(uint8_t items, uint8_t tracedata[FURUI_MA
|
||||||
uint64_t key64 = -1;
|
uint64_t key64 = -1;
|
||||||
if (mfkey32_moebius(&data, &key64)) {
|
if (mfkey32_moebius(&data, &key64)) {
|
||||||
PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ "_GREEN_("%012" PRIX64) " ]",
|
PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ "_GREEN_("%012" PRIX64) " ]",
|
||||||
sprint_hex_inrow(tmp, 4),
|
sprint_hex_inrow(tmp, 4),
|
||||||
data.sector,
|
data.sector,
|
||||||
(data.keytype == 0x60) ? 'A' : 'B',
|
(data.keytype == 0x60) ? 'A' : 'B',
|
||||||
key64
|
key64
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6957,7 +6957,7 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
|
||||||
|
|
||||||
// recover key from collected traces
|
// recover key from collected traces
|
||||||
return mfc_supercard_gen2_recovery(i, tracedata);
|
return mfc_supercard_gen2_recovery(i, tracedata);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Super card generation 1
|
// Super card generation 1
|
||||||
|
|
||||||
|
@ -6978,7 +6978,7 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
|
||||||
uint8_t aCHANGE[] = {0x00, 0xa6, 0xa0, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x00};
|
uint8_t aCHANGE[] = {0x00, 0xa6, 0xa0, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x00};
|
||||||
memcpy(aCHANGE + 5, uid, uidlen);
|
memcpy(aCHANGE + 5, uid, uidlen);
|
||||||
res = ExchangeAPDU14a(aCHANGE, sizeof(aCHANGE), activate_field, keep_field_on, response, sizeof(response),
|
res = ExchangeAPDU14a(aCHANGE, sizeof(aCHANGE), activate_field, keep_field_on, response, sizeof(response),
|
||||||
&resplen);
|
&resplen);
|
||||||
if (res != PM3_SUCCESS) {
|
if (res != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(FAILED, "Super card UID change [ " _RED_("fail") " ]");
|
PrintAndLogEx(FAILED, "Super card UID change [ " _RED_("fail") " ]");
|
||||||
DropField();
|
DropField();
|
||||||
|
@ -6998,7 +6998,7 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
|
||||||
// --------------- RESET CARD ----------------
|
// --------------- RESET CARD ----------------
|
||||||
uint8_t aRESET[] = {0x00, 0xa6, 0xc0, 0x00};
|
uint8_t aRESET[] = {0x00, 0xa6, 0xc0, 0x00};
|
||||||
res = ExchangeAPDU14a(aRESET, sizeof(aRESET), activate_field, keep_field_on, response, sizeof(response),
|
res = ExchangeAPDU14a(aRESET, sizeof(aRESET), activate_field, keep_field_on, response, sizeof(response),
|
||||||
&resplen);
|
&resplen);
|
||||||
if (res != PM3_SUCCESS) {
|
if (res != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(FAILED, "Super card reset [ " _RED_("fail") " ]");
|
PrintAndLogEx(FAILED, "Super card reset [ " _RED_("fail") " ]");
|
||||||
DropField();
|
DropField();
|
||||||
|
|
|
@ -995,8 +995,8 @@ static int CmdHFMFPWrbl(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int plus_key_check(uint8_t startSector, uint8_t endSector, uint8_t startKeyAB, uint8_t endKeyAB,
|
static int plus_key_check(uint8_t startSector, uint8_t endSector, uint8_t startKeyAB, uint8_t endKeyAB,
|
||||||
uint8_t keyList[MAX_AES_KEYS_LIST_LEN][AES_KEY_LEN], size_t keyListLen, uint8_t foundKeys[2][64][AES_KEY_LEN + 1],
|
uint8_t keyList[MAX_AES_KEYS_LIST_LEN][AES_KEY_LEN], size_t keyListLen, uint8_t foundKeys[2][64][AES_KEY_LEN + 1],
|
||||||
bool verbose) {
|
bool verbose) {
|
||||||
int res;
|
int res;
|
||||||
bool selectCard = true;
|
bool selectCard = true;
|
||||||
uint8_t keyn[2] = {0};
|
uint8_t keyn[2] = {0};
|
||||||
|
@ -1296,10 +1296,10 @@ static int CmdHFMFPChk(const char *Cmd) {
|
||||||
for (uint8_t s = startSector; s <= endSector; s++) {
|
for (uint8_t s = startSector; s <= endSector; s++) {
|
||||||
|
|
||||||
if ((memcmp(&foundKeys[0][s][1], ndef_key, AES_KEY_LEN) == 0) ||
|
if ((memcmp(&foundKeys[0][s][1], ndef_key, AES_KEY_LEN) == 0) ||
|
||||||
(memcmp(&foundKeys[1][s][1], ndef_key, AES_KEY_LEN) == 0)) {
|
(memcmp(&foundKeys[1][s][1], ndef_key, AES_KEY_LEN) == 0)) {
|
||||||
has_ndef_key = true;
|
has_ndef_key = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (printedHeader == false) {
|
if (printedHeader == false) {
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, "-----+----------------------------------+----------------------------------");
|
PrintAndLogEx(INFO, "-----+----------------------------------+----------------------------------");
|
||||||
|
@ -1320,7 +1320,7 @@ static int CmdHFMFPChk(const char *Cmd) {
|
||||||
snprintf(strB, sizeof(strB), _RED_("%s"), "--------------------------------");
|
snprintf(strB, sizeof(strB), _RED_("%s"), "--------------------------------");
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(INFO, " " _YELLOW_("%03d") " | %s | %s", s, strA, strB);
|
PrintAndLogEx(INFO, " " _YELLOW_("%03d") " | %s | %s", s, strA, strB);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (printedHeader == false)
|
if (printedHeader == false)
|
||||||
|
@ -1395,7 +1395,7 @@ static int CmdHFMFPDump(const char *Cmd) {
|
||||||
arg_str0("f", "file", "<fn>", "filename of dump"),
|
arg_str0("f", "file", "<fn>", "filename of dump"),
|
||||||
arg_str0("k", "keys", "<fn>", "filename of keys"),
|
arg_str0("k", "keys", "<fn>", "filename of keys"),
|
||||||
arg_lit0(NULL, "ns", "no save to file"),
|
arg_lit0(NULL, "ns", "no save to file"),
|
||||||
arg_lit0("v", "verbose", "Verbose mode"),
|
arg_lit0("v", "verbose", "Verbose mode"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
||||||
|
@ -1421,14 +1421,14 @@ static int CmdHFMFPDump(const char *Cmd) {
|
||||||
return PM3_EMALLOC;
|
return PM3_EMALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
iso14a_card_select_t card ;
|
iso14a_card_select_t card ;
|
||||||
int res = mfp_read_tag(&card, mem, key_fn);
|
int res = mfp_read_tag(&card, mem, key_fn);
|
||||||
if (res != PM3_SUCCESS) {
|
if (res != PM3_SUCCESS) {
|
||||||
free(mem);
|
free(mem);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Skip saving card data to file
|
// Skip saving card data to file
|
||||||
if (nosave) {
|
if (nosave) {
|
||||||
|
@ -1436,28 +1436,28 @@ static int CmdHFMFPDump(const char *Cmd) {
|
||||||
free(mem);
|
free(mem);
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
// Save to file
|
// Save to file
|
||||||
if (strlen(data_fn) < 1) {
|
if (strlen(data_fn) < 1) {
|
||||||
|
|
||||||
char *fptr = calloc(sizeof(char) * (strlen("hf-mfp-") + strlen("-dump")) + card.uidlen * 2 + 1, sizeof(uint8_t));
|
char *fptr = calloc(sizeof(char) * (strlen("hf-mfp-") + strlen("-dump")) + card.uidlen * 2 + 1, sizeof(uint8_t));
|
||||||
strcpy(fptr, "hf-mfp-");
|
strcpy(fptr, "hf-mfp-");
|
||||||
|
|
||||||
FillFileNameByUID(fptr, card.uid, "-dump", card.uidlen);
|
FillFileNameByUID(fptr, card.uid, "-dump", card.uidlen);
|
||||||
|
|
||||||
strcpy(data_fn, fptr);
|
strcpy(data_fn, fptr);
|
||||||
free(fptr);
|
free(fptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveFile(data_fn, ".bin", mem, MIFARE_4K_MAX_BYTES);
|
saveFile(data_fn, ".bin", mem, MIFARE_4K_MAX_BYTES);
|
||||||
saveFileEML(data_fn, mem, MIFARE_4K_MAX_BYTES, MFBLOCK_SIZE);
|
saveFileEML(data_fn, mem, MIFARE_4K_MAX_BYTES, MFBLOCK_SIZE);
|
||||||
|
|
||||||
iso14a_mf_extdump_t xdump;
|
iso14a_mf_extdump_t xdump;
|
||||||
xdump.card_info = card;
|
xdump.card_info = card;
|
||||||
xdump.dump = mem;
|
xdump.dump = mem;
|
||||||
xdump.dumplen = MIFARE_4K_MAX_BYTES;
|
xdump.dumplen = MIFARE_4K_MAX_BYTES;
|
||||||
saveFileJSON(data_fn, jsfCardMemory, (uint8_t *)&xdump, sizeof(xdump), NULL);
|
saveFileJSON(data_fn, jsfCardMemory, (uint8_t *)&xdump, sizeof(xdump), NULL);
|
||||||
*/
|
*/
|
||||||
free(mem);
|
free(mem);
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1424,7 +1424,7 @@ static mfu_identify_t *mfu_match_fingerprint(uint8_t *version, uint8_t *data) {
|
||||||
uint8_t mtmp[40] = {0};
|
uint8_t mtmp[40] = {0};
|
||||||
param_gethex_to_eol(mfu_ident_table[i].match, 0, mtmp, sizeof(mtmp), &ml);
|
param_gethex_to_eol(mfu_ident_table[i].match, 0, mtmp, sizeof(mtmp), &ml);
|
||||||
|
|
||||||
bool m2 = (memcmp(mtmp, data + mfu_ident_table[i].mpos, mfu_ident_table[i].mlen) == 0);
|
bool m2 = (memcmp(mtmp, data + mfu_ident_table[i].mpos, mfu_ident_table[i].mlen) == 0);
|
||||||
if (m2) {
|
if (m2) {
|
||||||
PrintAndLogEx(DEBUG, "(fingerprint) found %s", mfu_ident_table[i].desc);
|
PrintAndLogEx(DEBUG, "(fingerprint) found %s", mfu_ident_table[i].desc);
|
||||||
return &mfu_ident_table[i];
|
return &mfu_ident_table[i];
|
||||||
|
@ -3608,7 +3608,7 @@ static int CmdHF14AMfUPwdGen(const char *Cmd) {
|
||||||
if (ul_select(&card)) {
|
if (ul_select(&card)) {
|
||||||
// Philips toothbrush needs page 0x21-0x23
|
// Philips toothbrush needs page 0x21-0x23
|
||||||
uint8_t data[16] = {0x00};
|
uint8_t data[16] = {0x00};
|
||||||
int status = ul_read(0x21, data, sizeof(data));
|
int status = ul_read(0x21, data, sizeof(data));
|
||||||
if (status == -1) {
|
if (status == -1) {
|
||||||
PrintAndLogEx(DEBUG, "Error: tag didn't answer to READ");
|
PrintAndLogEx(DEBUG, "Error: tag didn't answer to READ");
|
||||||
} else if (status == 16) {
|
} else if (status == 16) {
|
||||||
|
|
|
@ -224,7 +224,7 @@ static int topaz_write_erase8_block(uint8_t blockno, uint8_t *block_data) {
|
||||||
uint16_t resp_len = 11;
|
uint16_t resp_len = 11;
|
||||||
uint8_t response[11] = {0};
|
uint8_t response[11] = {0};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
if (topaz_send_cmd(wr8_cmd, sizeof(wr8_cmd), response, &resp_len, true) == PM3_ETIMEOUT) {
|
if (topaz_send_cmd(wr8_cmd, sizeof(wr8_cmd), response, &resp_len, true) == PM3_ETIMEOUT) {
|
||||||
topaz_switch_off_field();
|
topaz_switch_off_field();
|
||||||
|
@ -267,12 +267,12 @@ static int topaz_write_nonerase8_block(uint8_t blockno, uint8_t *block_data) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ADD
|
// ADD
|
||||||
// 7 6 5 4 3 2 1 0
|
// 7 6 5 4 3 2 1 0
|
||||||
// b b b --- Byte 0 - 7
|
// b b b --- Byte 0 - 7
|
||||||
// B B B B --------- BLOCK
|
// B B B B --------- BLOCK
|
||||||
// r ----------------- 0
|
// r ----------------- 0
|
||||||
//
|
//
|
||||||
|
|
||||||
uint8_t wr8_cmd[] = {TOPAZ_WRITE_NE8, blockno, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
uint8_t wr8_cmd[] = {TOPAZ_WRITE_NE8, blockno, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
memcpy(wr8_cmd + 10, uid_echo, 4);
|
memcpy(wr8_cmd + 10, uid_echo, 4);
|
||||||
|
@ -281,7 +281,7 @@ static int topaz_write_nonerase8_block(uint8_t blockno, uint8_t *block_data) {
|
||||||
uint16_t resp_len = 11;
|
uint16_t resp_len = 11;
|
||||||
uint8_t response[11] = {0};
|
uint8_t response[11] = {0};
|
||||||
|
|
||||||
//
|
//
|
||||||
if (topaz_send_cmd(wr8_cmd, sizeof(wr8_cmd), response, &resp_len, true) == PM3_ETIMEOUT) {
|
if (topaz_send_cmd(wr8_cmd, sizeof(wr8_cmd), response, &resp_len, true) == PM3_ETIMEOUT) {
|
||||||
topaz_switch_off_field();
|
topaz_switch_off_field();
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
|
@ -883,7 +883,7 @@ static int CmdHFTopazDump(const char *Cmd) {
|
||||||
if (nosave) {
|
if (nosave) {
|
||||||
PrintAndLogEx(INFO, "Called with no save option");
|
PrintAndLogEx(INFO, "Called with no save option");
|
||||||
if (set_dynamic) {
|
if (set_dynamic) {
|
||||||
free(topaz_tag.dynamic_memory);
|
free(topaz_tag.dynamic_memory);
|
||||||
}
|
}
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1034,7 @@ static int CmdHFTopazWrBl(const char *Cmd) {
|
||||||
PrintAndLogEx(INFO, "Block: %0d (0x%02X) [ %s]", blockno, blockno, sprint_hex(data, dlen));
|
PrintAndLogEx(INFO, "Block: %0d (0x%02X) [ %s]", blockno, blockno, sprint_hex(data, dlen));
|
||||||
|
|
||||||
int res;
|
int res;
|
||||||
if (blockno != 13 && blockno != 14) {
|
if (blockno != 13 && blockno != 14) {
|
||||||
// send write/erase block
|
// send write/erase block
|
||||||
res = topaz_write_erase8_block(blockno, data);
|
res = topaz_write_erase8_block(blockno, data);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -571,9 +571,9 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
|
||||||
//2 Not crc-command
|
//2 Not crc-command
|
||||||
|
|
||||||
// Draw the data column
|
// Draw the data column
|
||||||
#define TRACE_MAX_LINES 36
|
#define TRACE_MAX_LINES 36
|
||||||
// number of hex bytes to be printed per row (16 data + 2 crc)
|
// number of hex bytes to be printed per row (16 data + 2 crc)
|
||||||
#define TRACE_MAX_HEX_BYTES 18
|
#define TRACE_MAX_HEX_BYTES 18
|
||||||
|
|
||||||
char line[TRACE_MAX_LINES][160] = {{0}};
|
char line[TRACE_MAX_LINES][160] = {{0}};
|
||||||
|
|
||||||
|
@ -700,8 +700,8 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
|
||||||
|
|
||||||
// mark short bytes (less than 8 Bit + Parity)
|
// mark short bytes (less than 8 Bit + Parity)
|
||||||
if (protocol == ISO_14443A ||
|
if (protocol == ISO_14443A ||
|
||||||
protocol == PROTO_MIFARE ||
|
protocol == PROTO_MIFARE ||
|
||||||
protocol == THINFILM) {
|
protocol == THINFILM) {
|
||||||
|
|
||||||
// approximated with 128 * (9 * data_len);
|
// approximated with 128 * (9 * data_len);
|
||||||
uint16_t bitime = 1056 + 32;
|
uint16_t bitime = 1056 + 32;
|
||||||
|
@ -874,13 +874,13 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
if (last_line && (memcmp(crc, "\x20\x20\x20\x20", 4) != 0) && g_session.supports_colors && markCRCBytes) {
|
if (last_line && (memcmp(crc, "\x20\x20\x20\x20", 4) != 0) && g_session.supports_colors && markCRCBytes) {
|
||||||
str_padder = 85;
|
str_padder = 85;
|
||||||
// odd case of multiline, and last single byte on empty row has been colorised...
|
// odd case of multiline, and last single byte on empty row has been colorised...
|
||||||
if (strlen(line[j]) < 14) {
|
if (strlen(line[j]) < 14) {
|
||||||
str_padder = 81;
|
str_padder = 81;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr->isResponse) {
|
if (hdr->isResponse) {
|
||||||
PrintAndLogEx(NORMAL, " | | |%-*s | %s| %s",
|
PrintAndLogEx(NORMAL, " | | |%-*s | %s| %s",
|
||||||
|
@ -909,7 +909,7 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
|
||||||
annotateIso14443a(explanation, sizeof(explanation), mfData, mfDataLen, hdr->isResponse);
|
annotateIso14443a(explanation, sizeof(explanation), mfData, mfDataLen, hdr->isResponse);
|
||||||
uint8_t crcc = iso14443A_CRC_check(hdr->isResponse, mfData, mfDataLen);
|
uint8_t crcc = iso14443A_CRC_check(hdr->isResponse, mfData, mfDataLen);
|
||||||
|
|
||||||
//iceman: colorise crc bytes here will need a refactor of code from above.
|
//iceman: colorise crc bytes here will need a refactor of code from above.
|
||||||
PrintAndLogEx(NORMAL, " | | * |%-*s | %-4s| %s",
|
PrintAndLogEx(NORMAL, " | | * |%-*s | %-4s| %s",
|
||||||
str_padder,
|
str_padder,
|
||||||
sprint_hex_inrow_spaces(mfData, mfDataLen, 2),
|
sprint_hex_inrow_spaces(mfData, mfDataLen, 2),
|
||||||
|
|
|
@ -1313,7 +1313,7 @@ int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, siz
|
||||||
|
|
||||||
// memcpy(vdata, udata.bytes + (14 + atslen), 2 * 64 * 17);
|
// memcpy(vdata, udata.bytes + (14 + atslen), 2 * 64 * 17);
|
||||||
for (size_t i = 0; i < 64; i++) {
|
for (size_t i = 0; i < 64; i++) {
|
||||||
|
|
||||||
if ((sptr + (AES_KEY_LEN * 2)) > maxdatalen) {
|
if ((sptr + (AES_KEY_LEN * 2)) > maxdatalen) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,19 +333,19 @@ int MAD1DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose, bool *haveMA
|
||||||
for (int i = 1; i < 16; i++) {
|
for (int i = 1; i < 16; i++) {
|
||||||
uint16_t aid = madGetAID(sector, swapmad, 1, i);
|
uint16_t aid = madGetAID(sector, swapmad, 1, i);
|
||||||
if (aid < 6) {
|
if (aid < 6) {
|
||||||
PrintAndLogEx(INFO,
|
PrintAndLogEx(INFO,
|
||||||
(ibs == i) ? _MAGENTA_(" %02d [%04X] %s") : " %02d [" _GREEN_("%04X") "] %s",
|
(ibs == i) ? _MAGENTA_(" %02d [%04X] %s") : " %02d [" _GREEN_("%04X") "] %s",
|
||||||
i,
|
i,
|
||||||
aid,
|
aid,
|
||||||
aid_admin[aid]
|
aid_admin[aid]
|
||||||
);
|
);
|
||||||
|
|
||||||
} else if (prev_aid == aid) {
|
} else if (prev_aid == aid) {
|
||||||
PrintAndLogEx(INFO,
|
PrintAndLogEx(INFO,
|
||||||
(ibs == i) ? _MAGENTA_(" %02d [%04X] continuation") : " %02d [" _YELLOW_("%04X") "] continuation",
|
(ibs == i) ? _MAGENTA_(" %02d [%04X] continuation") : " %02d [" _YELLOW_("%04X") "] continuation",
|
||||||
i,
|
i,
|
||||||
aid
|
aid
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
char fmt[60];
|
char fmt[60];
|
||||||
snprintf(fmt, sizeof(fmt), (ibs == i) ? _MAGENTA_(" %02d [%04X]%s") : " %02d [" _GREEN_("%04X") "]%s", i, aid, "%s");
|
snprintf(fmt, sizeof(fmt), (ibs == i) ? _MAGENTA_(" %02d [%04X]%s") : " %02d [" _GREEN_("%04X") "]%s", i, aid, "%s");
|
||||||
|
@ -368,7 +368,7 @@ int MAD2DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose) {
|
||||||
if (res == PM3_SUCCESS)
|
if (res == PM3_SUCCESS)
|
||||||
PrintAndLogEx(SUCCESS, "CRC8...... 0x%02X ( " _GREEN_("%s") " )", sector[0], "ok");
|
PrintAndLogEx(SUCCESS, "CRC8...... 0x%02X ( " _GREEN_("%s") " )", sector[0], "ok");
|
||||||
else
|
else
|
||||||
PrintAndLogEx(SUCCESS, "CRC8...... 0x%02X ( " _RED_("%s") " )", sector[0], "fail");
|
PrintAndLogEx(SUCCESS, "CRC8...... 0x%02X ( " _RED_("%s") " )", sector[0], "fail");
|
||||||
}
|
}
|
||||||
|
|
||||||
int ibs = MADInfoByteDecode(sector, swapmad, 2, verbose);
|
int ibs = MADInfoByteDecode(sector, swapmad, 2, verbose);
|
||||||
|
@ -387,18 +387,18 @@ int MAD2DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose) {
|
||||||
for (int i = 1; i < 8 + 8 + 7 + 1; i++) {
|
for (int i = 1; i < 8 + 8 + 7 + 1; i++) {
|
||||||
uint16_t aid = madGetAID(sector, swapmad, 2, i);
|
uint16_t aid = madGetAID(sector, swapmad, 2, i);
|
||||||
if (aid < 6) {
|
if (aid < 6) {
|
||||||
PrintAndLogEx(INFO,
|
PrintAndLogEx(INFO,
|
||||||
(ibs == i) ? _MAGENTA_(" %02d [%04X] %s") : " %02d [" _GREEN_("%04X") "] %s",
|
(ibs == i) ? _MAGENTA_(" %02d [%04X] %s") : " %02d [" _GREEN_("%04X") "] %s",
|
||||||
i + 16,
|
i + 16,
|
||||||
aid,
|
aid,
|
||||||
aid_admin[aid]
|
aid_admin[aid]
|
||||||
);
|
);
|
||||||
} else if (prev_aid == aid) {
|
} else if (prev_aid == aid) {
|
||||||
PrintAndLogEx(INFO,
|
PrintAndLogEx(INFO,
|
||||||
(ibs == i) ? _MAGENTA_(" %02d [%04X] continuation") : " %02d [" _YELLOW_("%04X") "] continuation",
|
(ibs == i) ? _MAGENTA_(" %02d [%04X] continuation") : " %02d [" _YELLOW_("%04X") "] continuation",
|
||||||
i + 16,
|
i + 16,
|
||||||
aid
|
aid
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
char fmt[60];
|
char fmt[60];
|
||||||
snprintf(fmt, sizeof(fmt), (ibs == i) ? _MAGENTA_(" %02d [%04X]%s") : " %02d [" _GREEN_("%04X") "]%s", i + 16, aid, "%s");
|
snprintf(fmt, sizeof(fmt), (ibs == i) ? _MAGENTA_(" %02d [%04X]%s") : " %02d [" _GREEN_("%04X") "]%s", i + 16, aid, "%s");
|
||||||
|
|
|
@ -367,17 +367,21 @@ const static vocabulory_t vocabulory[] = {
|
||||||
{ 0, "hf mf ndefread" },
|
{ 0, "hf mf ndefread" },
|
||||||
{ 0, "hf mf ndefwrite" },
|
{ 0, "hf mf ndefwrite" },
|
||||||
{ 1, "hf mfp help" },
|
{ 1, "hf mfp help" },
|
||||||
{ 0, "hf mfp info" },
|
{ 1, "hf mfp list" },
|
||||||
{ 0, "hf mfp wrp" },
|
|
||||||
{ 0, "hf mfp initp" },
|
|
||||||
{ 0, "hf mfp commitp" },
|
|
||||||
{ 0, "hf mfp auth" },
|
{ 0, "hf mfp auth" },
|
||||||
|
{ 0, "hf mfp chk" },
|
||||||
|
{ 0, "hf mfp dump" },
|
||||||
|
{ 0, "hf mfp info" },
|
||||||
|
{ 0, "hf mfp mad" },
|
||||||
{ 0, "hf mfp rdbl" },
|
{ 0, "hf mfp rdbl" },
|
||||||
{ 0, "hf mfp rdsc" },
|
{ 0, "hf mfp rdsc" },
|
||||||
{ 0, "hf mfp wrbl" },
|
{ 0, "hf mfp wrbl" },
|
||||||
{ 0, "hf mfp chk" },
|
{ 0, "hf mfp commitp" },
|
||||||
{ 0, "hf mfp mad" },
|
{ 0, "hf mfp initp" },
|
||||||
|
{ 0, "hf mfp wrp" },
|
||||||
|
{ 0, "hf mfp ndefformat" },
|
||||||
{ 0, "hf mfp ndefread" },
|
{ 0, "hf mfp ndefread" },
|
||||||
|
{ 0, "hf mfp ndefwrite" },
|
||||||
{ 1, "hf mfu help" },
|
{ 1, "hf mfu help" },
|
||||||
{ 1, "hf mfu keygen" },
|
{ 1, "hf mfu keygen" },
|
||||||
{ 1, "hf mfu pwdgen" },
|
{ 1, "hf mfu pwdgen" },
|
||||||
|
@ -461,14 +465,14 @@ const static vocabulory_t vocabulory[] = {
|
||||||
{ 1, "hf thinfilm list" },
|
{ 1, "hf thinfilm list" },
|
||||||
{ 0, "hf thinfilm sim" },
|
{ 0, "hf thinfilm sim" },
|
||||||
{ 1, "hf topaz help" },
|
{ 1, "hf topaz help" },
|
||||||
{ 0, "hf topaz dump" },
|
|
||||||
{ 1, "hf topaz list" },
|
{ 1, "hf topaz list" },
|
||||||
|
{ 0, "hf topaz dump" },
|
||||||
{ 0, "hf topaz info" },
|
{ 0, "hf topaz info" },
|
||||||
|
{ 0, "hf topaz raw" },
|
||||||
|
{ 0, "hf topaz rdbl" },
|
||||||
{ 0, "hf topaz reader" },
|
{ 0, "hf topaz reader" },
|
||||||
{ 0, "hf topaz sim" },
|
{ 0, "hf topaz sim" },
|
||||||
{ 0, "hf topaz sniff" },
|
{ 0, "hf topaz sniff" },
|
||||||
{ 0, "hf topaz raw" },
|
|
||||||
{ 0, "hf topaz rdbl" },
|
|
||||||
{ 1, "hf topaz view" },
|
{ 1, "hf topaz view" },
|
||||||
{ 0, "hf topaz wrbl" },
|
{ 0, "hf topaz wrbl" },
|
||||||
{ 1, "hf xerox help" },
|
{ 1, "hf xerox help" },
|
||||||
|
|
|
@ -354,4 +354,4 @@ uint16_t crc16_legic(uint8_t const *d, size_t n, uint8_t uidcrc) {
|
||||||
|
|
||||||
uint16_t crc16_philips(uint8_t const *d, size_t n) {
|
uint16_t crc16_philips(uint8_t const *d, size_t n) {
|
||||||
return crc16_fast(d, n, 0x49A3, false, false);
|
return crc16_fast(d, n, 0x49A3, false, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3966,14 +3966,16 @@
|
||||||
"command": "hf mf auth4",
|
"command": "hf mf auth4",
|
||||||
"description": "Executes AES authentication command in ISO14443-4",
|
"description": "Executes AES authentication command in ISO14443-4",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mf auth4 4000 000102030405060708090a0b0c0d0e0f -> executes authentication",
|
"hf mf auth4 -n 4000 -k 000102030405060708090a0b0c0d0e0f -> executes authentication",
|
||||||
"hf mf auth4 9003 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> executes authentication"
|
"hf mf auth4 -n 9003 -k FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -> executes authentication"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help"
|
"-h, --help This help",
|
||||||
|
"-n <hex> key num, 2 hex bytes",
|
||||||
|
"-k, --key <hex> key, 16 hex bytes"
|
||||||
],
|
],
|
||||||
"usage": "hf mf auth4 [-h] <Key Num (HEX 2 bytes)> <Key Value (HEX 16 bytes)>"
|
"usage": "hf mf auth4 [-h] -n <hex> -k <hex>"
|
||||||
},
|
},
|
||||||
"hf mf autopwn": {
|
"hf mf autopwn": {
|
||||||
"command": "hf mf autopwn",
|
"command": "hf mf autopwn",
|
||||||
|
@ -4655,14 +4657,14 @@
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help",
|
"-h, --help This help",
|
||||||
"-v, --verbose show technical data",
|
"-v, --verbose show technical data",
|
||||||
"--aid <aid> print all sectors with specified aid",
|
"--aid <hex> print all sectors with specified aid",
|
||||||
"-k, --key <key> key for printing sectors",
|
"-k, --key <hex> key for printing sectors",
|
||||||
"-b, --keyb use key B for access printing sectors (by default: key A)",
|
"-b, --keyb use key B for access printing sectors (by default: key A)",
|
||||||
"--be (optional, BigEndian)",
|
"--be (optional, BigEndian)",
|
||||||
"--dch decode Card Holder information",
|
"--dch decode Card Holder information",
|
||||||
"-f, --file <fn> load dump file and decode MAD"
|
"-f, --file <fn> load dump file and decode MAD"
|
||||||
],
|
],
|
||||||
"usage": "hf mf mad [-hvb] [--aid <aid>] [-k <key>] [--be] [--dch] [-f <fn>]"
|
"usage": "hf mf mad [-hvb] [--aid <hex>] [-k <hex>] [--be] [--dch] [-f <fn>]"
|
||||||
},
|
},
|
||||||
"hf mf nack": {
|
"hf mf nack": {
|
||||||
"command": "hf mf nack",
|
"command": "hf mf nack",
|
||||||
|
@ -4784,7 +4786,8 @@
|
||||||
"command": "hf mf rdbl",
|
"command": "hf mf rdbl",
|
||||||
"description": "Read MIFARE Classic block",
|
"description": "Read MIFARE Classic block",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mf rdbl --blk 0 -k FFFFFFFFFFFF",
|
"hf mf rdbl --blk 0",
|
||||||
|
"hf mf rdbl --blk 0 -k A0A1A2A3A4A5",
|
||||||
"hf mf rdbl --blk 3 -v -> get block 3, decode sector trailer"
|
"hf mf rdbl --blk 3 -v -> get block 3, decode sector trailer"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
|
@ -4802,7 +4805,8 @@
|
||||||
"command": "hf mf rdsc",
|
"command": "hf mf rdsc",
|
||||||
"description": "Read MIFARE Classic sector",
|
"description": "Read MIFARE Classic sector",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mf rdsc -s 0 -k FFFFFFFFFFFF"
|
"hf mf rdsc -s 0",
|
||||||
|
"hf mf rdsc -s 0 -k A0A1A2A3A4A5"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
|
@ -4906,9 +4910,10 @@
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help",
|
"-h, --help This help",
|
||||||
"-r, --reset Reset card",
|
"-r, --reset Reset card",
|
||||||
"-u, --uid <hex> New UID (4 hex bytes)"
|
"-u, --uid <hex> New UID (4 hex bytes)",
|
||||||
|
"--furui Furui detection card"
|
||||||
],
|
],
|
||||||
"usage": "hf mf supercard [-hr] [-u <hex>]"
|
"usage": "hf mf supercard [-hr] [-u <hex>] [--furui]"
|
||||||
},
|
},
|
||||||
"hf mf value": {
|
"hf mf value": {
|
||||||
"command": "hf mf value",
|
"command": "hf mf value",
|
||||||
|
@ -4976,7 +4981,8 @@
|
||||||
"command": "hf mf wrbl",
|
"command": "hf mf wrbl",
|
||||||
"description": "Write MIFARE Classic block with 16 hex bytes of data Sector 0 / Block 0 - Manufacturer block When writing to block 0 you must use a VALID block 0 data (UID, BCC, SAK, ATQA) Writing an invalid block 0 means rendering your Magic GEN2 card undetectable. Look in the magic_cards_notes.md file for help to resolve it. `--force` param is used to override warnings like bad ACL and BLOCK 0 writes. if not specified, it will exit if detected",
|
"description": "Write MIFARE Classic block with 16 hex bytes of data Sector 0 / Block 0 - Manufacturer block When writing to block 0 you must use a VALID block 0 data (UID, BCC, SAK, ATQA) Writing an invalid block 0 means rendering your Magic GEN2 card undetectable. Look in the magic_cards_notes.md file for help to resolve it. `--force` param is used to override warnings like bad ACL and BLOCK 0 writes. if not specified, it will exit if detected",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mf wrbl --blk 1 -k FFFFFFFFFFFF -d 000102030405060708090a0b0c0d0e0f"
|
"hf mf wrbl --blk 1 -d 000102030405060708090a0b0c0d0e0f",
|
||||||
|
"hf mf wrbl --blk 1 -k A0A1A2A3A4A5 -d 000102030405060708090a0b0c0d0e0f"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
|
@ -6126,7 +6132,7 @@
|
||||||
},
|
},
|
||||||
"hf mfp auth": {
|
"hf mfp auth": {
|
||||||
"command": "hf mfp auth",
|
"command": "hf mfp auth",
|
||||||
"description": "Executes AES authentication command for Mifare Plus card",
|
"description": "Executes AES authentication command for MIFARE Plus card",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mfp auth --ki 4000 --key 000102030405060708090a0b0c0d0e0f -> executes authentication",
|
"hf mfp auth --ki 4000 --key 000102030405060708090a0b0c0d0e0f -> executes authentication",
|
||||||
"hf mfp auth --ki 9003 --key FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -v -> executes authentication and shows all the system data"
|
"hf mfp auth --ki 9003 --key FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -v -> executes authentication and shows all the system data"
|
||||||
|
@ -6145,9 +6151,9 @@
|
||||||
"description": "Checks keys on MIFARE Plus card",
|
"description": "Checks keys on MIFARE Plus card",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mfp chk -k 000102030405060708090a0b0c0d0e0f -> check key on sector 0 as key A and B",
|
"hf mfp chk -k 000102030405060708090a0b0c0d0e0f -> check key on sector 0 as key A and B",
|
||||||
"hf mfp chk -s 2 -a -> check default key list on sector 2, key A",
|
"hf mfp chk -s 2 -a -> check default key list on sector 2, only key A",
|
||||||
"hf mfp chk -d mfp_default_keys -s0 -e6 -> check keys from dictionary against sectors 0-6",
|
"hf mfp chk -d mfp_default_keys -s0 -e6 -> check keys from dictionary against sectors 0-6",
|
||||||
"hf mfp chk --pattern1b -j keys -> check all 1-byte keys pattern and save found keys to json",
|
"hf mfp chk --pattern1b --dump -> check all 1-byte keys pattern and save found keys to file",
|
||||||
"hf mfp chk --pattern2b --startp2b FA00 -> check all 2-byte keys pattern. Start from key FA00FA00...FA00"
|
"hf mfp chk --pattern2b --startp2b FA00 -> check all 2-byte keys pattern. Start from key FA00FA00...FA00"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
|
@ -6162,10 +6168,10 @@
|
||||||
"--pattern1b Check all 1-byte combinations of key (0000...0000, 0101...0101, 0202...0202, ...)",
|
"--pattern1b Check all 1-byte combinations of key (0000...0000, 0101...0101, 0202...0202, ...)",
|
||||||
"--pattern2b Check all 2-byte combinations of key (0000...0000, 0001...0001, 0002...0002, ...)",
|
"--pattern2b Check all 2-byte combinations of key (0000...0000, 0001...0001, 0002...0002, ...)",
|
||||||
"--startp2b <pattern> Start key (2-byte HEX) for 2-byte search (use with `--pattern2b`)",
|
"--startp2b <pattern> Start key (2-byte HEX) for 2-byte search (use with `--pattern2b`)",
|
||||||
"-j, --json <fn> Json filename to save keys",
|
"--dump Dump found keys to JSON file",
|
||||||
"-v, --verbose Verbose mode"
|
"-v, --verbose Verbose mode"
|
||||||
],
|
],
|
||||||
"usage": "hf mfp chk [-habv] [-s <0..255>] [-e <0..255>] [-k <hex>] [-d <fn>] [--pattern1b] [--pattern2b] [--startp2b <pattern>] [-j <fn>]"
|
"usage": "hf mfp chk [-habv] [-s <0..255>] [-e <0..255>] [-k <hex>] [-d <fn>] [--pattern1b] [--pattern2b] [--startp2b <pattern>] [--dump]"
|
||||||
},
|
},
|
||||||
"hf mfp commitp": {
|
"hf mfp commitp": {
|
||||||
"command": "hf mfp commitp",
|
"command": "hf mfp commitp",
|
||||||
|
@ -6180,9 +6186,26 @@
|
||||||
],
|
],
|
||||||
"usage": "hf mfp commitp [-hv]"
|
"usage": "hf mfp commitp [-hv]"
|
||||||
},
|
},
|
||||||
|
"hf mfp dump": {
|
||||||
|
"command": "hf mfp dump",
|
||||||
|
"description": "Dump MIFARE Plus tag to binary file If no <name> given, UID will be used as filename",
|
||||||
|
"notes": [
|
||||||
|
"hf mfp dump",
|
||||||
|
"hf mfp dump --keys hf-mf-066C8B78-key.bin -> MIFARE Plus with keys from specified file"
|
||||||
|
],
|
||||||
|
"offline": false,
|
||||||
|
"options": [
|
||||||
|
"-h, --help This help",
|
||||||
|
"-f, --file <fn> filename of dump",
|
||||||
|
"-k, --keys <fn> filename of keys",
|
||||||
|
"--ns no save to file",
|
||||||
|
"-v, --verbose Verbose mode"
|
||||||
|
],
|
||||||
|
"usage": "hf mfp dump [-hv] [-f <fn>] [-k <fn>] [--ns]"
|
||||||
|
},
|
||||||
"hf mfp help": {
|
"hf mfp help": {
|
||||||
"command": "hf mfp help",
|
"command": "hf mfp help",
|
||||||
"description": "help This help",
|
"description": "help This help list List MIFARE Plus history",
|
||||||
"notes": [],
|
"notes": [],
|
||||||
"offline": true,
|
"offline": true,
|
||||||
"options": [],
|
"options": [],
|
||||||
|
@ -6215,9 +6238,30 @@
|
||||||
],
|
],
|
||||||
"usage": "hf mfp initp [-hv] [-k <hex>]"
|
"usage": "hf mfp initp [-hv] [-k <hex>]"
|
||||||
},
|
},
|
||||||
|
"hf mfp list": {
|
||||||
|
"command": "hf mfp list",
|
||||||
|
"description": "Alias of `trace list -t mf` with selected protocol data to annotate trace buffer You can load a trace from file (see `trace load -h`) or it be downloaded from device by default It accepts all other arguments of `trace list`. Note that some might not be relevant for this specific protocol",
|
||||||
|
"notes": [
|
||||||
|
"hf mf list --frame -> show frame delay times",
|
||||||
|
"hf mf list -1 -> use trace buffer"
|
||||||
|
],
|
||||||
|
"offline": true,
|
||||||
|
"options": [
|
||||||
|
"-h, --help This help",
|
||||||
|
"-1, --buffer use data from trace buffer",
|
||||||
|
"--frame show frame delay times",
|
||||||
|
"-c mark CRC bytes",
|
||||||
|
"-r show relative times (gap and duration)",
|
||||||
|
"-u display times in microseconds instead of clock cycles",
|
||||||
|
"-x show hexdump to convert to pcap(ng)",
|
||||||
|
"or to import into Wireshark using encapsulation type \"ISO 14443\"",
|
||||||
|
"-f, --file <fn> filename of dictionary"
|
||||||
|
],
|
||||||
|
"usage": "hf mf list [-h1crux] [--frame] [-f <fn>]"
|
||||||
|
},
|
||||||
"hf mfp mad": {
|
"hf mfp mad": {
|
||||||
"command": "hf mfp mad",
|
"command": "hf mfp mad",
|
||||||
"description": "Checks and prints Mifare Application Directory (MAD)",
|
"description": "Checks and prints MIFARE Application Directory (MAD)",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mfp mad",
|
"hf mfp mad",
|
||||||
"hf mfp mad --aid e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> read and print NDEF data from MAD aid"
|
"hf mfp mad --aid e103 -k d3f7d3f7d3f7d3f7d3f7d3f7d3f7d3f7 -> read and print NDEF data from MAD aid"
|
||||||
|
@ -6234,6 +6278,14 @@
|
||||||
],
|
],
|
||||||
"usage": "hf mfp mad [-hvb] [--aid <hex>] [-k <hex>] [--be] [--dch]"
|
"usage": "hf mfp mad [-hvb] [--aid <hex>] [-k <hex>] [--be] [--dch]"
|
||||||
},
|
},
|
||||||
|
"hf mfp ndefformat": {
|
||||||
|
"command": "hf mfp ndefformat",
|
||||||
|
"description": "format MIFARE Plus Tag as a NFC tag with Data Exchange Format (NDEF) If no <name> given, UID will be used as filename. It will try default keys and MAD keys to detect if tag is already formatted in order to write.",
|
||||||
|
"notes": [],
|
||||||
|
"offline": false,
|
||||||
|
"options": [],
|
||||||
|
"usage": ""
|
||||||
|
},
|
||||||
"hf mfp ndefread": {
|
"hf mfp ndefread": {
|
||||||
"command": "hf mfp ndefread",
|
"command": "hf mfp ndefread",
|
||||||
"description": "Prints NFC Data Exchange Format (NDEF)",
|
"description": "Prints NFC Data Exchange Format (NDEF)",
|
||||||
|
@ -6254,9 +6306,27 @@
|
||||||
],
|
],
|
||||||
"usage": "hf mfp ndefread [-hvb] [--aid <aid>] [-k <key>] [-f <fn>]"
|
"usage": "hf mfp ndefread [-hvb] [--aid <aid>] [-k <key>] [-f <fn>]"
|
||||||
},
|
},
|
||||||
|
"hf mfp ndefwrite": {
|
||||||
|
"command": "hf mfp ndefwrite",
|
||||||
|
"description": "Write raw NDEF hex bytes to tag. This commands assumes tag already been NFC/NDEF formatted.",
|
||||||
|
"notes": [
|
||||||
|
"hf mfp ndefwrite -d 0300FE -> write empty record to tag",
|
||||||
|
"hf mfp ndefwrite -f myfilename",
|
||||||
|
"hf mfp ndefwrite -d 033fd1023a53709101195405656e2d55534963656d616e2054776974746572206c696e6b5101195502747769747465722e636f6d2f686572726d616e6e31303031"
|
||||||
|
],
|
||||||
|
"offline": false,
|
||||||
|
"options": [
|
||||||
|
"-h, --help This help",
|
||||||
|
"-d <hex> raw NDEF hex bytes",
|
||||||
|
"-f, --file <fn> write raw NDEF file to tag",
|
||||||
|
"-p fix NDEF record headers / terminator block if missing",
|
||||||
|
"-v, --verbose verbose output"
|
||||||
|
],
|
||||||
|
"usage": "hf mfp ndefwrite [-hpv] [-d <hex>] [-f <fn>]"
|
||||||
|
},
|
||||||
"hf mfp rdbl": {
|
"hf mfp rdbl": {
|
||||||
"command": "hf mfp rdbl",
|
"command": "hf mfp rdbl",
|
||||||
"description": "Reads several blocks from Mifare Plus card",
|
"description": "Reads blocks from MIFARE Plus card",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mfp rdbl --blk 0 --key 000102030405060708090a0b0c0d0e0f -> executes authentication and read block 0 data",
|
"hf mfp rdbl --blk 0 --key 000102030405060708090a0b0c0d0e0f -> executes authentication and read block 0 data",
|
||||||
"hf mfp rdbl --blk 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF"
|
"hf mfp rdbl --blk 1 -v -> executes authentication and shows sector 1 data with default key 0xFF..0xFF"
|
||||||
|
@ -6293,7 +6363,7 @@
|
||||||
},
|
},
|
||||||
"hf mfp wrbl": {
|
"hf mfp wrbl": {
|
||||||
"command": "hf mfp wrbl",
|
"command": "hf mfp wrbl",
|
||||||
"description": "Writes one block to Mifare Plus card",
|
"description": "Writes one block to MIFARE Plus card",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf mfp wrbl --blk 1 -d ff0000000000000000000000000000ff --key 000102030405060708090a0b0c0d0e0f -> write block 1 data",
|
"hf mfp wrbl --blk 1 -d ff0000000000000000000000000000ff --key 000102030405060708090a0b0c0d0e0f -> write block 1 data",
|
||||||
"hf mfp wrbl --blk 2 -d ff0000000000000000000000000000ff -v -> write block 2 data with default key 0xFF..0xFF"
|
"hf mfp wrbl --blk 2 -d ff0000000000000000000000000000ff -v -> write block 2 data with default key 0xFF..0xFF"
|
||||||
|
@ -7024,9 +7094,10 @@
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help",
|
"-h, --help This help",
|
||||||
"-f, --file <fn> filename of dump"
|
"-f, --file <fn> filename of dump",
|
||||||
|
"--ns no save to file"
|
||||||
],
|
],
|
||||||
"usage": "hf topaz dump [-h] [-f <fn>]"
|
"usage": "hf topaz dump [-h] [-f <fn>] [--ns]"
|
||||||
},
|
},
|
||||||
"hf topaz help": {
|
"hf topaz help": {
|
||||||
"command": "hf topaz help",
|
"command": "hf topaz help",
|
||||||
|
@ -7086,16 +7157,16 @@
|
||||||
},
|
},
|
||||||
"hf topaz rdbl": {
|
"hf topaz rdbl": {
|
||||||
"command": "hf topaz rdbl",
|
"command": "hf topaz rdbl",
|
||||||
"description": "Read a block",
|
"description": "Read Topaz block",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf topaz rdbl -b 7"
|
"hf topaz rdbl --blk 7"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help",
|
"-h, --help This help",
|
||||||
"-b, --block <dec> Block number to write"
|
"--blk <dec> Block number"
|
||||||
],
|
],
|
||||||
"usage": "hf topaz rdbl [-h] -b <dec>"
|
"usage": "hf topaz rdbl [-h] --blk <dec>"
|
||||||
},
|
},
|
||||||
"hf topaz reader": {
|
"hf topaz reader": {
|
||||||
"command": "hf topaz reader",
|
"command": "hf topaz reader",
|
||||||
|
@ -7151,17 +7222,17 @@
|
||||||
},
|
},
|
||||||
"hf topaz wrbl": {
|
"hf topaz wrbl": {
|
||||||
"command": "hf topaz wrbl",
|
"command": "hf topaz wrbl",
|
||||||
"description": "Write a block",
|
"description": "Write Topaz block with 8 hex bytes of data",
|
||||||
"notes": [
|
"notes": [
|
||||||
"hf topaz wrbl -b 7 -d 1122334455667788"
|
"hf topaz wrbl --blk 7 -d 1122334455667788"
|
||||||
],
|
],
|
||||||
"offline": false,
|
"offline": false,
|
||||||
"options": [
|
"options": [
|
||||||
"-h, --help This help",
|
"-h, --help This help",
|
||||||
"-b, --block <dec> Block number to write",
|
"--blk <dec> Block number",
|
||||||
"-d, --data <hex> Block data (8 hex bytes)"
|
"-d, --data <hex> Block data (8 hex bytes)"
|
||||||
],
|
],
|
||||||
"usage": "hf topaz wrbl [-h] -b <dec> -d <hex>"
|
"usage": "hf topaz wrbl [-h] --blk <dec> -d <hex>"
|
||||||
},
|
},
|
||||||
"hf tune": {
|
"hf tune": {
|
||||||
"command": "hf tune",
|
"command": "hf tune",
|
||||||
|
@ -12022,9 +12093,8 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"commands_extracted": 755,
|
"commands_extracted": 759,
|
||||||
"extracted_by": "PM3Help2JSON v1.00",
|
"extracted_by": "PM3Help2JSON v1.00",
|
||||||
"extracted_on": "2023-06-04T15:36:56"
|
"extracted_on": "2023-06-24T15:16:04"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -538,17 +538,21 @@ Check column "offline" for their availability.
|
||||||
|command |offline |description
|
|command |offline |description
|
||||||
|------- |------- |-----------
|
|------- |------- |-----------
|
||||||
|`hf mfp help `|Y |`This help`
|
|`hf mfp help `|Y |`This help`
|
||||||
|`hf mfp info `|N |`Info about Mifare Plus tag`
|
|`hf mfp list `|Y |`List MIFARE Plus history`
|
||||||
|`hf mfp wrp `|N |`Write Perso command`
|
|
||||||
|`hf mfp initp `|N |`Fill all the card's keys in SL0 mode`
|
|
||||||
|`hf mfp commitp `|N |`Move card to SL1 or SL3 mode`
|
|
||||||
|`hf mfp auth `|N |`Authentication`
|
|`hf mfp auth `|N |`Authentication`
|
||||||
|`hf mfp rdbl `|N |`Read blocks`
|
|
||||||
|`hf mfp rdsc `|N |`Read sectors`
|
|
||||||
|`hf mfp wrbl `|N |`Write blocks`
|
|
||||||
|`hf mfp chk `|N |`Check keys`
|
|`hf mfp chk `|N |`Check keys`
|
||||||
|
|`hf mfp dump `|N |`Dump MIFARE Plus tag to binary file`
|
||||||
|
|`hf mfp info `|N |`Info about MIFARE Plus tag`
|
||||||
|`hf mfp mad `|N |`Check and print MAD`
|
|`hf mfp mad `|N |`Check and print MAD`
|
||||||
|
|`hf mfp rdbl `|N |`Read blocks from card`
|
||||||
|
|`hf mfp rdsc `|N |`Read sectors from card`
|
||||||
|
|`hf mfp wrbl `|N |`Write block to card`
|
||||||
|
|`hf mfp commitp `|N |`Configure security layer (SL1/SL3 mode)`
|
||||||
|
|`hf mfp initp `|N |`Fill all the card's keys in SL0 mode`
|
||||||
|
|`hf mfp wrp `|N |`Write Perso command`
|
||||||
|
|`hf mfp ndefformat `|N |`Format MIFARE Plus Tag as NFC Tag`
|
||||||
|`hf mfp ndefread `|N |`Read and print NDEF records from card`
|
|`hf mfp ndefread `|N |`Read and print NDEF records from card`
|
||||||
|
|`hf mfp ndefwrite `|N |`Write NDEF records to card`
|
||||||
|
|
||||||
|
|
||||||
### hf mfu
|
### hf mfu
|
||||||
|
@ -704,14 +708,14 @@ Check column "offline" for their availability.
|
||||||
|command |offline |description
|
|command |offline |description
|
||||||
|------- |------- |-----------
|
|------- |------- |-----------
|
||||||
|`hf topaz help `|Y |`This help`
|
|`hf topaz help `|Y |`This help`
|
||||||
|`hf topaz dump `|N |`Dump TOPAZ family tag to file`
|
|
||||||
|`hf topaz list `|Y |`List Topaz history`
|
|`hf topaz list `|Y |`List Topaz history`
|
||||||
|
|`hf topaz dump `|N |`Dump TOPAZ family tag to file`
|
||||||
|`hf topaz info `|N |`Tag information`
|
|`hf topaz info `|N |`Tag information`
|
||||||
|
|`hf topaz raw `|N |`Send raw hex data to tag`
|
||||||
|
|`hf topaz rdbl `|N |`Read block`
|
||||||
|`hf topaz reader `|N |`Act like a Topaz reader`
|
|`hf topaz reader `|N |`Act like a Topaz reader`
|
||||||
|`hf topaz sim `|N |`Simulate Topaz tag`
|
|`hf topaz sim `|N |`Simulate Topaz tag`
|
||||||
|`hf topaz sniff `|N |`Sniff Topaz reader-tag communication`
|
|`hf topaz sniff `|N |`Sniff Topaz reader-tag communication`
|
||||||
|`hf topaz raw `|N |`Send raw hex data to tag`
|
|
||||||
|`hf topaz rdbl `|N |`Read block`
|
|
||||||
|`hf topaz view `|Y |`Display content from tag dump file`
|
|`hf topaz view `|Y |`Display content from tag dump file`
|
||||||
|`hf topaz wrbl `|N |`Write block`
|
|`hf topaz wrbl `|N |`Write block`
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue