This commit is contained in:
iceman1001 2024-02-03 16:05:58 +01:00
commit 7c6d60e7ef
15 changed files with 321 additions and 208 deletions

View file

@ -722,16 +722,16 @@ static void TransmitFor14443b_AsTag(const uint8_t *response, uint16_t len) {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void SimulateIso14443bTag(const uint8_t *pupi) { void SimulateIso14443bTag(const uint8_t *pupi) {
/* /*
// the only commands we understand is WUPB, AFI=0, Select All, N=1: // the only commands we understand is WUPB, AFI=0, Select All, N=1:
static const uint8_t cmdWUPB[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 }; static const uint8_t cmdWUPB[] = { ISO14443B_REQB, 0x00, 0x08, 0x39, 0x73 };
// ... and REQB, AFI=0, Normal Request, N=1: // ... and REQB, AFI=0, Normal Request, N=1:
static const uint8_t cmdREQB[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xFF }; static const uint8_t cmdREQB[] = { ISO14443B_REQB, 0x00, 0x00, 0x71, 0xFF };
// ... and HLTB // ... and HLTB
static const uint8_t cmdHLTB[] = { 0x50, 0xff, 0xff, 0xff, 0xff }; static const uint8_t cmdHLTB[] = { 0x50, 0xff, 0xff, 0xff, 0xff };
// ... and ATTRIB // ... and ATTRIB
static const uint8_t cmdATTRIB[] = { ISO14443B_ATTRIB, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static const uint8_t cmdATTRIB[] = { ISO14443B_ATTRIB, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
*/ */
LED_A_ON(); LED_A_ON();
// setup device. // setup device.
@ -824,8 +824,8 @@ void SimulateIso14443bTag(const uint8_t *pupi) {
// REQ or WUP request in ANY state // REQ or WUP request in ANY state
// WUP in HALTED state // WUP in HALTED state
if (len == 5) { if (len == 5) {
if ( ((receivedCmd[0] == ISO14443B_REQB) && ((receivedCmd[2] & 0x08) == 0x08) && (cardSTATE == SIM_HALTED)) || if (((receivedCmd[0] == ISO14443B_REQB) && ((receivedCmd[2] & 0x08) == 0x08) && (cardSTATE == SIM_HALTED)) ||
(receivedCmd[0] == ISO14443B_REQB)) { (receivedCmd[0] == ISO14443B_REQB)) {
LogTrace(receivedCmd, len, 0, 0, NULL, true); LogTrace(receivedCmd, len, 0, 0, NULL, true);
cardSTATE = SIM_SELECTING; cardSTATE = SIM_SELECTING;

View file

@ -121,7 +121,7 @@ int CmdHFSearch(const char *Cmd) {
// ICT // ICT
if (IfPm3Iso14443a()) { if (IfPm3Iso14443a()) {
int sel_state = infoHF14A(false, false, false); int sel_state = infoHF14A(false, false, false);
if (sel_state > 0) { if (sel_state > 0) {
PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("ISO 14443-A tag") " found\n"); PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("ISO 14443-A tag") " found\n");
success[ISO_14443A] = true; success[ISO_14443A] = true;

View file

@ -2575,32 +2575,32 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) {
} }
if (isMifareClassic && if (isMifareClassic &&
(((isMagic & MAGIC_FLAG_GEN_1A) == MAGIC_FLAG_GEN_1A) || ((isMagic & MAGIC_FLAG_GEN_1B) == MAGIC_FLAG_GEN_1B)) (((isMagic & MAGIC_FLAG_GEN_1A) == MAGIC_FLAG_GEN_1A) || ((isMagic & MAGIC_FLAG_GEN_1B) == MAGIC_FLAG_GEN_1B))
) { ) {
PrintAndLogEx(HINT, "Hint: use `" _YELLOW_("hf mf c*") "` commands when interacting"); PrintAndLogEx(HINT, "Hint: use `" _YELLOW_("hf mf c*") "` commands when interacting");
} }
if (isMifareClassic && if (isMifareClassic &&
((isMagic & MAGIC_FLAG_GEN_2) == MAGIC_FLAG_GEN_2) ((isMagic & MAGIC_FLAG_GEN_2) == MAGIC_FLAG_GEN_2)
) { ) {
PrintAndLogEx(HINT, "Hint: Use normal `" _YELLOW_("hf mf") "` commands when interacting"); PrintAndLogEx(HINT, "Hint: Use normal `" _YELLOW_("hf mf") "` commands when interacting");
} }
if (isMifareClassic && if (isMifareClassic &&
((isMagic & MAGIC_FLAG_GEN_3) == MAGIC_FLAG_GEN_3) ((isMagic & MAGIC_FLAG_GEN_3) == MAGIC_FLAG_GEN_3)
) { ) {
PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf gen3*") "` commands when interacting"); PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf gen3*") "` commands when interacting");
} }
if (isMifareClassic && if (isMifareClassic &&
((isMagic & MAGIC_FLAG_GEN_4GTU) == MAGIC_FLAG_GEN_4GTU) ((isMagic & MAGIC_FLAG_GEN_4GTU) == MAGIC_FLAG_GEN_4GTU)
) { ) {
PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf g*") "` commands when interacting"); PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf g*") "` commands when interacting");
} }
if (isMifareClassic && if (isMifareClassic &&
((isMagic & MAGIC_FLAG_GDM_AUTH) == MAGIC_FLAG_GDM_AUTH) ((isMagic & MAGIC_FLAG_GDM_AUTH) == MAGIC_FLAG_GDM_AUTH)
) { ) {
PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf gdm*") "` commands when interacting"); PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mf gdm*") "` commands when interacting");
} }

View file

@ -87,12 +87,12 @@ static int derive_app_key(uint8_t *uid, uint8_t *app_key) {
return PM3_EINVARG; return PM3_EINVARG;
} }
/* /*
c = b'\x88' + uid c = b'\x88' + uid
ch, cl = c[0:4], c[4:8] ch, cl = c[0:4], c[4:8]
payload = (ch + cl + cl + ch) * 2 payload = (ch + cl + cl + ch) * 2
AES.new(ICT_DESFIRE_MASTER_APPKEY, AES.MODE_CBC, iv=b'\0'*16).decrypt(payload)[16:] AES.new(ICT_DESFIRE_MASTER_APPKEY, AES.MODE_CBC, iv=b'\0'*16).decrypt(payload)[16:]
*/ */
uint8_t input[] = {0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t input[] = {0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
memcpy(input + 1, uid, 7); memcpy(input + 1, uid, 7);
@ -133,7 +133,7 @@ static int diversify_mifare_key(uint8_t *uid, uint8_t *app_key) {
num_to_bytes(big, 4, input + 4); num_to_bytes(big, 4, input + 4);
uint8_t key[AES_KEY_LEN]; uint8_t key[AES_KEY_LEN];
memset(key, 0 , sizeof(key)); memset(key, 0, sizeof(key));
// memcpy(key, ICT_DESFIRE_FILEKEY, AES_KEY_LEN); // memcpy(key, ICT_DESFIRE_FILEKEY, AES_KEY_LEN);
uint8_t iv[16] = {0}; uint8_t iv[16] = {0};
@ -188,7 +188,7 @@ static int derive_mifare_key(uint8_t *uid, const uint8_t *base_key, uint8_t *app
uint8_t diverse[MIFARE_KEY_SIZE]; uint8_t diverse[MIFARE_KEY_SIZE];
diversify_mifare_key(uid, diverse); diversify_mifare_key(uid, diverse);
for (uint8_t i=0; i < MIFARE_KEY_SIZE; i++) { for (uint8_t i = 0; i < MIFARE_KEY_SIZE; i++) {
app_key[i] = base_key[i] ^ diverse[i]; app_key[i] = base_key[i] ^ diverse[i];
} }
@ -204,7 +204,7 @@ static int derive_mifare_key_b(uint8_t *uid, uint8_t *app_key) {
} }
static int decrypt_card_file(uint8_t *card_file, uint8_t len, uint8_t *plain) { static int decrypt_card_file(uint8_t *card_file, uint8_t len, uint8_t *plain) {
if (card_file == NULL || plain == NULL) { if (card_file == NULL || plain == NULL) {
return PM3_EINVARG; return PM3_EINVARG;
} }
@ -266,56 +266,56 @@ static void itc_decode_card_blob(uint8_t *data, uint8_t card_type) {
if (data == NULL) { if (data == NULL) {
return; return;
} }
/* /*
uint8_t block[16]; uint8_t block[16];
if (card_type == ICT_CT_NFC) if (card_type == ICT_CT_NFC)
memcpy(block, data+16, sizeof(block)); memcpy(block, data+16, sizeof(block));
else else
memcpy(block, data, sizeof(block)); memcpy(block, data, sizeof(block));
uint8_t bit_count = data[8]; uint8_t bit_count = data[8];
uint8_t wiegand[32]; uint8_t wiegand[32];
if (card_type == ICT_CT_DESFIRE || card_type == ICT_CT_NFC) { if (card_type == ICT_CT_DESFIRE || card_type == ICT_CT_NFC) {
memcpy(wiegand, data + 11, 32-11); memcpy(wiegand, data + 11, 32-11);
} }
if (card_type == ICT_CT_CLASSIC) { if (card_type == ICT_CT_CLASSIC) {
memcpy(wiegand, data + 9, 32-9); memcpy(wiegand, data + 9, 32-9);
} }
if (bit_count == 26) { if (bit_count == 26) {
fc, cn = decode_wiegand_26(wiegand_payload) fc, cn = decode_wiegand_26(wiegand_payload)
ct = "Wiegand 26-bit" ct = "Wiegand 26-bit"
} }
if (bit_count == 34) { if (bit_count == 34) {
fc, cn = decode_wiegand_34(wiegand_payload) fc, cn = decode_wiegand_34(wiegand_payload)
ct = "Wiegand 34-bit" ct = "Wiegand 34-bit"
}else { }else {
return f"Unknown format (bitlength={bit_count})", None, None return f"Unknown format (bitlength={bit_count})", None, None
} }
return ct, fc, cn return ct, fc, cn
*/ */
} }
static void itc_encode_card_blob(uint8_t facility_code, uint16_t card_number, uint8_t bit_count) { static void itc_encode_card_blob(uint8_t facility_code, uint16_t card_number, uint8_t bit_count) {
/* /*
// encode wiegand .. // encode wiegand ..
uint8_t wiegand[] = {0,0,0,0,0}; uint8_t wiegand[] = {0,0,0,0,0};
if (bit_count == 26) { if (bit_count == 26) {
// wiegand_data = encode_wiegand_26(facility_code, card_number) // wiegand_data = encode_wiegand_26(facility_code, card_number)
} }
if (bit_count == 34) { if (bit_count == 34) {
// wiegand_data = encode_wiegand_34(facility_code, card_number) // wiegand_data = encode_wiegand_34(facility_code, card_number)
} }
// card binary blog // card binary blog
uint8_t blob[] = { uint8_t blob[] = {
'@', 'I', 'C', 'T', 0x00, 0x80, 0x00, 0x00, bit_count, 0x00, bit_count '@', 'I', 'C', 'T', 0x00, 0x80, 0x00, 0x00, bit_count, 0x00, bit_count
}; };
// return b'@ICT' + bytes([0,128,0,0,bit_count, 0, bit_count]) + wiegand_data // return b'@ICT' + bytes([0,128,0,0,bit_count, 0, bit_count]) + wiegand_data
*/ */
} }
static int ict_select(void) { static int ict_select(void) {
@ -463,13 +463,13 @@ static int CmdHfIctRead(const char *Cmd) {
return PM3_SUCCESS; return PM3_SUCCESS;
} }
static int CmdHfIctCredential(const char * Cmd) { static int CmdHfIctCredential(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "hf ict credential", CLIParserInit(&ctx, "hf ict credential",
"Read ICT sector from tag and decode", "Read ICT sector from tag and decode",
"hf ict credential\n" "hf ict credential\n"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_lit0("v", "verbose", "verbose output"), arg_lit0("v", "verbose", "verbose output"),

View file

@ -403,7 +403,7 @@ static int CmdHFMFPInfo(const char *Cmd) {
} }
if ((memcmp(data, "\x67\x00", 2) == 0) || // wrong length if ((memcmp(data, "\x67\x00", 2) == 0) || // wrong length
(memcmp(data, "\x1C\x83\x0C", 3) == 0) // desfire answers (memcmp(data, "\x1C\x83\x0C", 3) == 0) // desfire answers
) { ) {
PrintAndLogEx(INFO, " result.... " _RED_("MIFARE DESFire")); PrintAndLogEx(INFO, " result.... " _RED_("MIFARE DESFire"));
PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf mfdes info`")); PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf mfdes info`"));
@ -419,7 +419,7 @@ static int CmdHFMFPInfo(const char *Cmd) {
} }
if ((datalen > 1) && if ((datalen > 1) &&
(data[0] == 0x09)) { (data[0] == 0x09)) {
SLmode = 0; SLmode = 0;
} }
} }

View file

@ -483,7 +483,7 @@ static int ul_fudan_check(void) {
} }
return (resp.data.asBytes[0] == 0) return (resp.data.asBytes[0] == 0)
? MFU_TT_FUDAN_UL : MFU_TT_UL; //if response == 0x00 then Fudan, else Genuine NXP ? MFU_TT_FUDAN_UL : MFU_TT_UL; //if response == 0x00 then Fudan, else Genuine NXP
} }
static int ul_print_default(uint8_t *data, uint8_t *real_uid) { static int ul_print_default(uint8_t *data, uint8_t *real_uid) {
@ -790,10 +790,10 @@ static int ulc_print_configuration(uint8_t *data) {
bool validAuth = (data[8] >= 0x03 && data[8] < 0x30); bool validAuth = (data[8] >= 0x03 && data[8] < 0x30);
if (validAuth) if (validAuth)
PrintAndLogEx(INFO, "42 / 0x2A | Auth0, %s Page " _YELLOW_("%d") "/" _YELLOW_("0x%02X") " and above need authentication" PrintAndLogEx(INFO, "42 / 0x2A | Auth0, %s Page " _YELLOW_("%d") "/" _YELLOW_("0x%02X") " and above need authentication"
, sprint_hex(data + 8, 4) , sprint_hex(data + 8, 4)
, data[8] , data[8]
, data[8] , data[8]
); );
else { else {
if (data[8] == 0) { if (data[8] == 0) {
PrintAndLogEx(INFO, "42 / 0x2A | %s Auth0 default", sprint_hex(data + 8, 4)); PrintAndLogEx(INFO, "42 / 0x2A | %s Auth0 default", sprint_hex(data + 8, 4));
@ -804,9 +804,9 @@ static int ulc_print_configuration(uint8_t *data) {
} }
} }
PrintAndLogEx(INFO, "43 / 0x2B | %s Auth1 %s", PrintAndLogEx(INFO, "43 / 0x2B | %s Auth1 %s",
sprint_hex(data + 12, 4), sprint_hex(data + 12, 4),
(data[12] & 1) ? "write access restricted" : _RED_("R/W access restricted") (data[12] & 1) ? "write access restricted" : _RED_("R/W access restricted")
); );
return PM3_SUCCESS; return PM3_SUCCESS;
} }

View file

@ -76,7 +76,7 @@ static em_tech_type_t em_get_card_type(uint32_t config) {
} }
static void em4x05_print_type(em_tech_type_t ct) { static void em4x05_print_type(em_tech_type_t ct) {
switch(ct) { switch (ct) {
case EM_4469: { case EM_4469: {
PrintAndLogEx(INFO, "Identified... " _GREEN_("EM 4469")); PrintAndLogEx(INFO, "Identified... " _GREEN_("EM 4469"));
break; break;

View file

@ -1293,9 +1293,9 @@ static int CmdEM4x50View(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "lf em 4x50 view", CLIParserInit(&ctx, "lf em 4x50 view",
"Print a EM4x50 dump file\n", "Print a EM4x50 dump file\n",
"lf em 4x50 view -f lf-4x50-01020304-dump.json" "lf em 4x50 view -f lf-4x50-01020304-dump.json"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_str0("f", "file", "<fn>", "specify a filename for dump file"), arg_str0("f", "file", "<fn>", "specify a filename for dump file"),

View file

@ -284,7 +284,7 @@ static void print_hitag2_configuration(uint32_t uid, uint8_t config) {
} }
const char* annotation[] = { const char *annotation[] = {
"UID", "Pwd", "Key/Pwd", "Config", "UID", "Pwd", "Key/Pwd", "Config",
"User", "User", "User", "User", "User", "User", "User", "User",
"User", "User", "User", "User" "User", "User", "User", "User"
@ -357,13 +357,13 @@ static void print_hitag2_blocks(uint8_t *d, uint16_t n) {
} }
PrintAndLogEx(INFO, "%3d/0x%02X | %s| %s | %s | %s" PrintAndLogEx(INFO, "%3d/0x%02X | %s| %s | %s | %s"
, i , i
, i , i
, sprint_hex(d + (i * HITAG_BLOCK_SIZE), HITAG_BLOCK_SIZE) , sprint_hex(d + (i * HITAG_BLOCK_SIZE), HITAG_BLOCK_SIZE)
, sprint_ascii(d + (i * HITAG_BLOCK_SIZE), HITAG_BLOCK_SIZE) , sprint_ascii(d + (i * HITAG_BLOCK_SIZE), HITAG_BLOCK_SIZE)
, lckstr , lckstr
, annotation[i] , annotation[i]
); );
} }
PrintAndLogEx(INFO, "---------+-------------+-------+-----+---------"); PrintAndLogEx(INFO, "---------+-------------+-------+-----+---------");
PrintAndLogEx(INFO, " L = Locked, "_GREEN_("RW") " = Read Write, R = Read Only"); PrintAndLogEx(INFO, " L = Locked, "_GREEN_("RW") " = Read Write, R = Read Only");
@ -474,7 +474,7 @@ static int CmdLFHitagInfo(const char *Cmd) {
// read block3, get configuration byte. // read block3, get configuration byte.
// common configurations. // common configurations.
print_hitag2_configuration( uid, 0x06 ); print_hitag2_configuration(uid, 0x06);
// print_hitag2_configuration( uid, 0x0E ); // print_hitag2_configuration( uid, 0x0E );
// print_hitag2_configuration( uid, 0x02 ); // print_hitag2_configuration( uid, 0x02 );
// print_hitag2_configuration( uid, 0x00 ); // print_hitag2_configuration( uid, 0x00 );
@ -1134,7 +1134,7 @@ static int CmdLFHitagEload(const char *Cmd) {
CLIParserInit(&ctx, "lf hitag eload", CLIParserInit(&ctx, "lf hitag eload",
"Loads hitag tag dump into emulator memory on device", "Loads hitag tag dump into emulator memory on device",
"lf hitag eload -2 -f lf-hitag-11223344-dump.bin\n" "lf hitag eload -2 -f lf-hitag-11223344-dump.bin\n"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_str1("f", "file", "<fn>", "Specify dump filename"), arg_str1("f", "file", "<fn>", "Specify dump filename"),

View file

@ -531,9 +531,9 @@ static int DESFIRESendRaw(bool activate_field, uint8_t *data, size_t datalen, ui
memmove(&result[0], &result[1], *result_len); memmove(&result[0], &result[1], *result_len);
if (rcode != MFDES_S_OPERATION_OK && if (rcode != MFDES_S_OPERATION_OK &&
rcode != MFDES_S_SIGNATURE && rcode != MFDES_S_SIGNATURE &&
rcode != MFDES_S_ADDITIONAL_FRAME && rcode != MFDES_S_ADDITIONAL_FRAME &&
rcode != MFDES_S_NO_CHANGES) { rcode != MFDES_S_NO_CHANGES) {
if (GetAPDULogging()) { if (GetAPDULogging()) {
PrintAndLogEx(ERR, "Command (%02x) ERROR: 0x%02x", data[0], rcode); PrintAndLogEx(ERR, "Command (%02x) ERROR: 0x%02x", data[0], rcode);
@ -621,7 +621,7 @@ static int DesfireExchangeNative(bool activate_field, DesfireContext_t *ctx, uin
if (enable_chaining == false) { if (enable_chaining == false) {
if (rcode == MFDES_S_OPERATION_OK || if (rcode == MFDES_S_OPERATION_OK ||
rcode == MFDES_ADDITIONAL_FRAME) { rcode == MFDES_ADDITIONAL_FRAME) {
if (resplen) { if (resplen) {
*resplen = pos; *resplen = pos;
@ -741,7 +741,7 @@ static int DesfireExchangeISONative(bool activate_field, DesfireContext_t *ctx,
pos += buflen; pos += buflen;
if (enable_chaining == false) { if (enable_chaining == false) {
if (sw == DESFIRE_GET_ISO_STATUS(MFDES_S_OPERATION_OK) || if (sw == DESFIRE_GET_ISO_STATUS(MFDES_S_OPERATION_OK) ||
sw == DESFIRE_GET_ISO_STATUS(MFDES_ADDITIONAL_FRAME)) { sw == DESFIRE_GET_ISO_STATUS(MFDES_ADDITIONAL_FRAME)) {
if (resplen) { if (resplen) {
*resplen = pos; *resplen = pos;

View file

@ -261,17 +261,6 @@ const static vocabulary_t vocabulary[] = {
{ 0, "hf gallagher delete" }, { 0, "hf gallagher delete" },
{ 1, "hf gallagher diversifykey" }, { 1, "hf gallagher diversifykey" },
{ 1, "hf gallagher decode" }, { 1, "hf gallagher decode" },
{ 1, "hf ksx6924 help" },
{ 0, "hf ksx6924 select" },
{ 0, "hf ksx6924 info" },
{ 0, "hf ksx6924 balance" },
{ 0, "hf ksx6924 init" },
{ 0, "hf ksx6924 prec" },
{ 1, "hf jooki help" },
{ 0, "hf jooki clone" },
{ 1, "hf jooki decode" },
{ 1, "hf jooki encode" },
{ 0, "hf jooki sim" },
{ 1, "hf iclass help" }, { 1, "hf iclass help" },
{ 1, "hf iclass list" }, { 1, "hf iclass list" },
{ 0, "hf iclass dump" }, { 0, "hf iclass dump" },
@ -299,6 +288,22 @@ const static vocabulary_t vocabulary[] = {
{ 1, "hf iclass managekeys" }, { 1, "hf iclass managekeys" },
{ 1, "hf iclass permutekey" }, { 1, "hf iclass permutekey" },
{ 0, "hf iclass sam" }, { 0, "hf iclass sam" },
{ 1, "hf ict help" },
{ 0, "hf ict credential" },
{ 0, "hf ict info" },
{ 1, "hf ict list" },
{ 1, "hf ict reader" },
{ 1, "hf jooki help" },
{ 0, "hf jooki clone" },
{ 1, "hf jooki decode" },
{ 1, "hf jooki encode" },
{ 0, "hf jooki sim" },
{ 1, "hf ksx6924 help" },
{ 0, "hf ksx6924 select" },
{ 0, "hf ksx6924 info" },
{ 0, "hf ksx6924 balance" },
{ 0, "hf ksx6924 init" },
{ 0, "hf ksx6924 prec" },
{ 1, "hf legic help" }, { 1, "hf legic help" },
{ 0, "hf legic dump" }, { 0, "hf legic dump" },
{ 0, "hf legic info" }, { 0, "hf legic info" },
@ -529,6 +534,7 @@ const static vocabulary_t vocabulary[] = {
{ 0, "hw readmem" }, { 0, "hw readmem" },
{ 0, "hw reset" }, { 0, "hw reset" },
{ 0, "hw setlfdivisor" }, { 0, "hw setlfdivisor" },
{ 0, "hw sethfthresh" },
{ 0, "hw setmux" }, { 0, "hw setmux" },
{ 0, "hw standalone" }, { 0, "hw standalone" },
{ 0, "hw status" }, { 0, "hw status" },
@ -595,9 +601,10 @@ const static vocabulary_t vocabulary[] = {
{ 0, "lf em 4x50 rdbl" }, { 0, "lf em 4x50 rdbl" },
{ 0, "lf em 4x50 reader" }, { 0, "lf em 4x50 reader" },
{ 0, "lf em 4x50 restore" }, { 0, "lf em 4x50 restore" },
{ 1, "lf em 4x50 view" },
{ 0, "lf em 4x50 wipe" },
{ 0, "lf em 4x50 wrbl" }, { 0, "lf em 4x50 wrbl" },
{ 0, "lf em 4x50 wrpwd" }, { 0, "lf em 4x50 wrpwd" },
{ 0, "lf em 4x50 wipe" },
{ 0, "lf em 4x50 eload" }, { 0, "lf em 4x50 eload" },
{ 0, "lf em 4x50 esave" }, { 0, "lf em 4x50 esave" },
{ 0, "lf em 4x50 eview" }, { 0, "lf em 4x50 eview" },
@ -637,11 +644,13 @@ const static vocabulary_t vocabulary[] = {
{ 0, "lf hitag info" }, { 0, "lf hitag info" },
{ 0, "lf hitag dump" }, { 0, "lf hitag dump" },
{ 0, "lf hitag read" }, { 0, "lf hitag read" },
{ 1, "lf hitag view" },
{ 0, "lf hitag wrbl" }, { 0, "lf hitag wrbl" },
{ 0, "lf hitag sniff" }, { 0, "lf hitag sniff" },
{ 0, "lf hitag cc" }, { 0, "lf hitag cc" },
{ 0, "lf hitag ta" }, { 0, "lf hitag ta" },
{ 0, "lf hitag eload" }, { 0, "lf hitag eload" },
{ 0, "lf hitag eview" },
{ 0, "lf hitag sim" }, { 0, "lf hitag sim" },
{ 1, "lf idteck help" }, { 1, "lf idteck help" },
{ 1, "lf idteck demod" }, { 1, "lf idteck demod" },

View file

@ -3056,7 +3056,7 @@
}, },
"hf help": { "hf help": {
"command": "hf help", "command": "hf help",
"description": "-------- ----------------------- High Frequency ----------------------- 14a { ISO14443A RFIDs... } 14b { ISO14443B RFIDs... } 15 { ISO15693 RFIDs... } cipurse { Cipurse transport Cards... } epa { German Identification Card... } emrtd { Machine Readable Travel Document... } felica { ISO18092 / FeliCa RFIDs... } fido { FIDO and FIDO2 authenticators... } fudan { Fudan RFIDs... } gallagher { Gallagher DESFire RFIDs... } ksx6924 { KS X 6924 (T-Money, Snapper+) RFIDs } jooki { Jooki RFIDs... } iclass { ICLASS RFIDs... } legic { LEGIC RFIDs... } lto { LTO Cartridge Memory RFIDs... } mf { MIFARE RFIDs... } mfp { MIFARE Plus RFIDs... } mfu { MIFARE Ultralight RFIDs... } mfdes { MIFARE Desfire RFIDs... } ntag424 { NXP NTAG 4242 DNA RFIDs... } seos { SEOS RFIDs... } st25ta { ST25TA RFIDs... } tesla { TESLA Cards... } texkom { Texkom RFIDs... } thinfilm { Thinfilm RFIDs... } topaz { TOPAZ (NFC Type 1) RFIDs... } vas { Apple Value Added Service } waveshare { Waveshare NFC ePaper... } xerox { Fuji/Xerox cartridge RFIDs... } ----------- --------------------- General --------------------- help This help list List protocol data in trace buffer search Search for known HF tags --------------------------------------------------------------------------------------- hf list available offline: yes Alias of `trace list -t raw` 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", "description": "-------- ----------------------- High Frequency ----------------------- 14a { ISO14443A RFIDs... } 14b { ISO14443B RFIDs... } 15 { ISO15693 RFIDs... } cipurse { Cipurse transport Cards... } epa { German Identification Card... } emrtd { Machine Readable Travel Document... } felica { ISO18092 / FeliCa RFIDs... } fido { FIDO and FIDO2 authenticators... } fudan { Fudan RFIDs... } gallagher { Gallagher DESFire RFIDs... } iclass { ICLASS RFIDs... } ict { ICT MFC/DESfire RFIDs... } jooki { Jooki RFIDs... } ksx6924 { KS X 6924 (T-Money, Snapper+) RFIDs } legic { LEGIC RFIDs... } lto { LTO Cartridge Memory RFIDs... } mf { MIFARE RFIDs... } mfp { MIFARE Plus RFIDs... } mfu { MIFARE Ultralight RFIDs... } mfdes { MIFARE Desfire RFIDs... } ntag424 { NXP NTAG 4242 DNA RFIDs... } seos { SEOS RFIDs... } st25ta { ST25TA RFIDs... } tesla { TESLA Cards... } texkom { Texkom RFIDs... } thinfilm { Thinfilm RFIDs... } topaz { TOPAZ (NFC Type 1) RFIDs... } vas { Apple Value Added Service } waveshare { Waveshare NFC ePaper... } xerox { Fuji/Xerox cartridge RFIDs... } ----------- --------------------- General --------------------- help This help list List protocol data in trace buffer search Search for known HF tags --------------------------------------------------------------------------------------- hf list available offline: yes Alias of `trace list -t raw` 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": [ "notes": [
"hf list --frame -> show frame delay times", "hf list --frame -> show frame delay times",
"hf list -1 -> use trace buffer" "hf list -1 -> use trace buffer"
@ -3564,6 +3564,52 @@
], ],
"usage": "hf iclass wrbl [-hv] [-k <hex>] [--ki <dec>] --blk <dec> -d <hex> [-m <hex>] [--credit] [--elite] [--raw] [--nr] [--shallow]" "usage": "hf iclass wrbl [-hv] [-k <hex>] [--ki <dec>] --blk <dec> -d <hex> [-m <hex>] [--credit] [--elite] [--raw] [--nr] [--shallow]"
}, },
"hf ict help": {
"command": "hf ict help",
"description": "help This help list List ICT history reader Act like an IS14443-a reader --------------------------------------------------------------------------------------- hf ict credential available offline: no Read ICT sector from tag and decode",
"notes": [
"hf ict credential"
],
"offline": true,
"options": [
"-h, --help This help",
"-v, --verbose verbose output"
],
"usage": "hf ict credential [-hv]"
},
"hf ict info": {
"command": "hf ict info",
"description": "Get info from ICT encoded credential tags (MIFARE Classic / DESfire)",
"notes": [
"hf ict info"
],
"offline": false,
"options": [
"-h, --help This help"
],
"usage": "hf ict info [-h]"
},
"hf ict list": {
"command": "hf ict list",
"description": "Alias of `trace list -t 14a -c` 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 ict list --frame -> show frame delay times",
"hf ict 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 ict list [-h1crux] [--frame] [-f <fn>]"
},
"hf jooki decode": { "hf jooki decode": {
"command": "hf jooki decode", "command": "hf jooki decode",
"description": "Decode a base64-encode Jooki token in NDEF URI format", "description": "Decode a base64-encode Jooki token in NDEF URI format",
@ -8177,9 +8223,9 @@
"command": "lf cmdread", "command": "lf cmdread",
"description": "Modulate LF reader field to send command before read. All periods in microseconds. - use `lf config` to set parameters", "description": "Modulate LF reader field to send command before read. All periods in microseconds. - use `lf config` to set parameters",
"notes": [ "notes": [
"lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W00110 -> probing for Hitag 1/S", "lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W00110 -> probing for Hitag1/S",
"lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W11000 -> probing for Hitag 2", "lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W11000 -> probing for Hitag2",
"lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W11000 -s 2000 -@ -> probing for Hitag 2, oscilloscope style", "lf cmdread -d 50 -z 116 -o 166 -e W3000 -c W11000 -s 2000 -@ -> probing for Hitag2, oscilloscope style",
"lf cmdread -d 48 -z 112 -o 176 -e W3000 -e S240 -e E336 -c W0S00000010000E -> probing for Hitag (us)" "lf cmdread -d 48 -z 112 -o 176 -e W3000 -e S240 -e E336 -c W0S00000010000E -> probing for Hitag (us)"
], ],
"offline": false, "offline": false,
@ -8523,7 +8569,7 @@
}, },
"lf em 4x05 view": { "lf em 4x05 view": {
"command": "lf em 4x05 view", "command": "lf em 4x05 view",
"description": "Print a EM4205/4305/4369/4469 dump file (bin/eml/json) note: We don't track if password is known in current dump file formats. All zeros password block might be filler data", "description": "Print a EM4205/4305/4369/4469 dump file note: We don't track if password is known in current dump file formats. All zeros password block might be filler data",
"notes": [ "notes": [
"lf em 4x05 view -f lf-4x05-01020304-dump.json" "lf em 4x05 view -f lf-4x05-01020304-dump.json"
], ],
@ -8599,9 +8645,10 @@
"options": [ "options": [
"-h, --help This help", "-h, --help This help",
"-f, --file <fn> specify dump filename", "-f, --file <fn> specify dump filename",
"-p, --pwd <hex> password, 4 hex bytes, lsb" "-p, --pwd <hex> password, 4 hex bytes, lsb",
"--ns no save to file"
], ],
"usage": "lf em 4x50 dump [-h] [-f <fn>] [-p <hex>]" "usage": "lf em 4x50 dump [-h] [-f <fn>] [-p <hex>] [--ns]"
}, },
"lf em 4x50 eload": { "lf em 4x50 eload": {
"command": "lf em 4x50 eload", "command": "lf em 4x50 eload",
@ -8644,7 +8691,7 @@
}, },
"lf em 4x50 help": { "lf em 4x50 help": {
"command": "lf em 4x50 help", "command": "lf em 4x50 help",
"description": "help This help ----------- --------------------- operations --------------------- ----------- --------------------- simulation --------------------- --------------------------------------------------------------------------------------- lf em 4x50 brute available offline: no Tries to bruteforce the password of a EM4x50 card. Function can be stopped by pressing pm3 button.", "description": "help This help ----------- --------------------- operations --------------------- view Display content from tag dump file ----------- --------------------- simulation --------------------- --------------------------------------------------------------------------------------- lf em 4x50 brute available offline: no Tries to bruteforce the password of a EM4x50 card. Function can be stopped by pressing pm3 button.",
"notes": [ "notes": [
"lf em 4x50 brute --mode range --begin 12330000 --end 12340000 -> tries pwds from 0x12330000 to 0x12340000", "lf em 4x50 brute --mode range --begin 12330000 --end 12340000 -> tries pwds from 0x12330000 to 0x12340000",
"lf em 4x50 brute --mode charset --digits --uppercase -> tries all combinations of ASCII codes for digits and uppercase letters", "lf em 4x50 brute --mode charset --digits --uppercase -> tries all combinations of ASCII codes for digits and uppercase letters",
@ -8751,6 +8798,19 @@
], ],
"usage": "lf em 4x50 sim [-h] [-p <hex>]" "usage": "lf em 4x50 sim [-h] [-p <hex>]"
}, },
"lf em 4x50 view": {
"command": "lf em 4x50 view",
"description": "Print a EM4x50 dump file",
"notes": [
"lf em 4x50 view -f lf-4x50-01020304-dump.json"
],
"offline": true,
"options": [
"-h, --help This help",
"-f, --file <fn> specify a filename for dump file"
],
"usage": "lf em 4x50 view [-h] [-f <fn>]"
},
"lf em 4x50 wipe": { "lf em 4x50 wipe": {
"command": "lf em 4x50 wipe", "command": "lf em 4x50 wipe",
"description": "Wipes EM4x50 tag by filling it with zeros, including the new password Must give a password.", "description": "Wipes EM4x50 tag by filling it with zeros, including the new password Must give a password.",
@ -9285,9 +9345,10 @@
"--nrar <hex> nonce / answer reader, 8 hex bytes", "--nrar <hex> nonce / answer reader, 8 hex bytes",
"--crypto crypto mode", "--crypto crypto mode",
"-k, --key <hex> key, 4 or 6 hex bytes", "-k, --key <hex> key, 4 or 6 hex bytes",
"-f, --file <fn> specify file name" "-f, --file <fn> specify file name",
"--ns no save to file"
], ],
"usage": "lf hitag dump [-h] [--pwd] [--nrar <hex>] [--crypto] [-k <hex>] [-f <fn>]" "usage": "lf hitag dump [-h] [--pwd] [--nrar <hex>] [--crypto] [-k <hex>] [-f <fn>] [--ns]"
}, },
"lf hitag eload": { "lf hitag eload": {
"command": "lf hitag eload", "command": "lf hitag eload",
@ -9306,9 +9367,22 @@
], ],
"usage": "lf hitag eload [-h12sm] -f <fn>" "usage": "lf hitag eload [-h12sm] -f <fn>"
}, },
"lf hitag eview": {
"command": "lf hitag eview",
"description": "It displays emulator memory",
"notes": [
"lf hitag eview"
],
"offline": false,
"options": [
"-h, --help This help",
"-v, --verbose Verbose output"
],
"usage": "lf hitag eview [-hv]"
},
"lf hitag help": { "lf hitag help": {
"command": "lf hitag help", "command": "lf hitag help",
"description": "help This help list List Hitag trace history --------------------------------------------------------------------------------------- lf hitag list available offline: yes Alias of `trace list -t hitag2` 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", "description": "help This help list List Hitag trace history view Display content from tag dump file --------------------------------------------------------------------------------------- lf hitag list available offline: yes Alias of `trace list -t hitag2` 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": [ "notes": [
"lf hitag list --frame -> show frame delay times", "lf hitag list --frame -> show frame delay times",
"lf hitag list -1 -> use trace buffer" "lf hitag list -1 -> use trace buffer"
@ -9402,6 +9476,20 @@
], ],
"usage": "lf hitag sniff [-h]" "usage": "lf hitag sniff [-h]"
}, },
"lf hitag view": {
"command": "lf hitag view",
"description": "Print a HITAG dump file (bin/eml/json)",
"notes": [
"lf hitag view -f lf-hitag-01020304-dump.bin"
],
"offline": true,
"options": [
"-h, --help This help",
"-f, --file <fn> Specify a filename for dump file",
"-v, --verbose Verbose output"
],
"usage": "lf hitag view [-hv] -f <fn>"
},
"lf hitag wrbl": { "lf hitag wrbl": {
"command": "lf hitag wrbl", "command": "lf hitag wrbl",
"description": "Write a page in Hitag memory Crypto mode key format: ISK high + ISK low", "description": "Write a page in Hitag memory Crypto mode key format: ISK high + ISK low",
@ -12401,8 +12489,8 @@
} }
}, },
"metadata": { "metadata": {
"commands_extracted": 714, "commands_extracted": 721,
"extracted_by": "PM3Help2JSON v1.00", "extracted_by": "PM3Help2JSON v1.00",
"extracted_on": "2024-01-28T10:16:20" "extracted_on": "2024-02-03T15:03:29"
} }
} }

View file

@ -246,8 +246,8 @@ Check column "offline" for their availability.
|`hf 15 wipe `|N |`Wipe card to zeros` |`hf 15 wipe `|N |`Wipe card to zeros`
|`hf 15 wrbl `|N |`Write a block` |`hf 15 wrbl `|N |`Write a block`
|`hf 15 sim `|N |`Fake an ISO-15693 tag` |`hf 15 sim `|N |`Fake an ISO-15693 tag`
|`hf 15 eload `|N |`Load image file into emulator to be used by 'sim' command` |`hf 15 eload `|N |`Upload file into emulator memory`
|`hf 15 esave `|N |`Save emulator memory into image file` |`hf 15 esave `|N |`Save emulator memory to file`
|`hf 15 eview `|N |`View emulator memory` |`hf 15 eview `|N |`View emulator memory`
|`hf 15 slixwritepwd `|N |`Writes a password on a SLIX ISO-15693 tag` |`hf 15 slixwritepwd `|N |`Writes a password on a SLIX ISO-15693 tag`
|`hf 15 slixeasdisable `|N |`Disable EAS mode on SLIX ISO-15693 tag` |`hf 15 slixeasdisable `|N |`Disable EAS mode on SLIX ISO-15693 tag`
@ -378,33 +378,6 @@ Check column "offline" for their availability.
|`hf gallagher decode `|Y |`Decode Gallagher credential block` |`hf gallagher decode `|Y |`Decode Gallagher credential block`
### hf ksx6924
{ KS X 6924 (T-Money, Snapper+) RFIDs }
|command |offline |description
|------- |------- |-----------
|`hf ksx6924 help `|Y |`This help`
|`hf ksx6924 select `|N |`Select application, and leave field up`
|`hf ksx6924 info `|N |`Get info about a KS X 6924 (T-Money, Snapper+) transit card`
|`hf ksx6924 balance `|N |`Get current purse balance`
|`hf ksx6924 init `|N |`Perform transaction initialization with Mpda`
|`hf ksx6924 prec `|N |`Send proprietary get record command (CLA=90, INS=4C)`
### hf jooki
{ Jooki RFIDs... }
|command |offline |description
|------- |------- |-----------
|`hf jooki help `|Y |`This help`
|`hf jooki clone `|N |`Write a Jooki token`
|`hf jooki decode `|Y |`Decode Jooki token`
|`hf jooki encode `|Y |`Encode Jooki token`
|`hf jooki sim `|N |`Simulate Jooki token`
### hf iclass ### hf iclass
{ ICLASS RFIDs... } { ICLASS RFIDs... }
@ -426,7 +399,7 @@ Check column "offline" for their availability.
|`hf iclass loclass `|Y |`Use loclass to perform bruteforce reader attack` |`hf iclass loclass `|Y |`Use loclass to perform bruteforce reader attack`
|`hf iclass lookup `|Y |`Uses authentication trace to check for key in dictionary file` |`hf iclass lookup `|Y |`Uses authentication trace to check for key in dictionary file`
|`hf iclass sim `|N |`Simulate iCLASS tag` |`hf iclass sim `|N |`Simulate iCLASS tag`
|`hf iclass eload `|N |`Load Picopass / iCLASS dump file into emulator memory` |`hf iclass eload `|N |`Upload file into emulator memory`
|`hf iclass esave `|N |`Save emulator memory to file` |`hf iclass esave `|N |`Save emulator memory to file`
|`hf iclass esetblk `|N |`Set emulator memory block data` |`hf iclass esetblk `|N |`Set emulator memory block data`
|`hf iclass eview `|N |`View emulator memory` |`hf iclass eview `|N |`View emulator memory`
@ -440,6 +413,46 @@ Check column "offline" for their availability.
|`hf iclass sam `|N |`SAM tests` |`hf iclass sam `|N |`SAM tests`
### hf ict
{ ICT MFC/DESfire RFIDs... }
|command |offline |description
|------- |------- |-----------
|`hf ict help `|Y |`This help`
|`hf ict credential `|N |`Read ICT credential and decode`
|`hf ict info `|N |`Tag information`
|`hf ict list `|Y |`List ICT history`
|`hf ict reader `|Y |`Act like an IS14443-a reader`
### hf jooki
{ Jooki RFIDs... }
|command |offline |description
|------- |------- |-----------
|`hf jooki help `|Y |`This help`
|`hf jooki clone `|N |`Write a Jooki token`
|`hf jooki decode `|Y |`Decode Jooki token`
|`hf jooki encode `|Y |`Encode Jooki token`
|`hf jooki sim `|N |`Simulate Jooki token`
### hf ksx6924
{ KS X 6924 (T-Money, Snapper+) RFIDs }
|command |offline |description
|------- |------- |-----------
|`hf ksx6924 help `|Y |`This help`
|`hf ksx6924 select `|N |`Select application, and leave field up`
|`hf ksx6924 info `|N |`Get info about a KS X 6924 (T-Money, Snapper+) transit card`
|`hf ksx6924 balance `|N |`Get current purse balance`
|`hf ksx6924 init `|N |`Perform transaction initialization with Mpda`
|`hf ksx6924 prec `|N |`Send proprietary get record command (CLA=90, INS=4C)`
### hf legic ### hf legic
{ LEGIC RFIDs... } { LEGIC RFIDs... }
@ -456,8 +469,8 @@ Check column "offline" for their availability.
|`hf legic wipe `|N |`Wipe a LEGIC Prime tag` |`hf legic wipe `|N |`Wipe a LEGIC Prime tag`
|`hf legic wrbl `|N |`Write data to a LEGIC Prime tag` |`hf legic wrbl `|N |`Write data to a LEGIC Prime tag`
|`hf legic sim `|N |`Start tag simulator` |`hf legic sim `|N |`Start tag simulator`
|`hf legic eload `|N |`Load binary dump to emulator memory` |`hf legic eload `|N |`Upload file into emulator memory`
|`hf legic esave `|N |`Save emulator memory to binary file` |`hf legic esave `|N |`Save emulator memory to file`
|`hf legic eview `|N |`View emulator memory` |`hf legic eview `|N |`View emulator memory`
|`hf legic einfo `|N |`Display deobfuscated and decoded emulator memory` |`hf legic einfo `|N |`Display deobfuscated and decoded emulator memory`
|`hf legic crc `|Y |`Calculate Legic CRC over given bytes` |`hf legic crc `|Y |`Calculate Legic CRC over given bytes`
@ -519,8 +532,8 @@ Check column "offline" for their availability.
|`hf mf egetblk `|N |`Get emulator memory block` |`hf mf egetblk `|N |`Get emulator memory block`
|`hf mf egetsc `|N |`Get emulator memory sector` |`hf mf egetsc `|N |`Get emulator memory sector`
|`hf mf ekeyprn `|N |`Print keys from emulator memory` |`hf mf ekeyprn `|N |`Print keys from emulator memory`
|`hf mf eload `|N |`Load from file emul dump` |`hf mf eload `|N |`Upload file into emulator memory`
|`hf mf esave `|N |`Save to file emul dump` |`hf mf esave `|N |`Save emulator memory to file`
|`hf mf esetblk `|N |`Set emulator memory block` |`hf mf esetblk `|N |`Set emulator memory block`
|`hf mf eview `|N |`View emulator memory` |`hf mf eview `|N |`View emulator memory`
|`hf mf cgetblk `|N |`Read block from card` |`hf mf cgetblk `|N |`Read block from card`
@ -597,8 +610,8 @@ Check column "offline" for their availability.
|`hf mfu view `|Y |`Display content from tag dump file` |`hf mfu view `|Y |`Display content from tag dump file`
|`hf mfu wrbl `|N |`Write block` |`hf mfu wrbl `|N |`Write block`
|`hf mfu tamper `|N |`Configure the tamper feature on an NTAG 213TT` |`hf mfu tamper `|N |`Configure the tamper feature on an NTAG 213TT`
|`hf mfu eload `|N |`Load Ultralight dump file into emulator memory` |`hf mfu eload `|N |`Upload file into emulator memory`
|`hf mfu esave `|N |`Save Ultralight dump file from emulator memory` |`hf mfu esave `|N |`Save emulator memory to file`
|`hf mfu eview `|N |`View emulator memory` |`hf mfu eview `|N |`View emulator memory`
|`hf mfu sim `|N |`Simulate MIFARE Ultralight from emulator memory` |`hf mfu sim `|N |`Simulate MIFARE Ultralight from emulator memory`
|`hf mfu setpwd `|N |`Set 3DES key - Ultralight-C` |`hf mfu setpwd `|N |`Set 3DES key - Ultralight-C`
@ -935,12 +948,13 @@ Check column "offline" for their availability.
|`lf em 4x50 rdbl `|N |`Read EM4x50 word data` |`lf em 4x50 rdbl `|N |`Read EM4x50 word data`
|`lf em 4x50 reader `|N |`Show standard read mode data` |`lf em 4x50 reader `|N |`Show standard read mode data`
|`lf em 4x50 restore `|N |`Restore EM4x50 dump to tag` |`lf em 4x50 restore `|N |`Restore EM4x50 dump to tag`
|`lf em 4x50 view `|Y |`Display content from tag dump file`
|`lf em 4x50 wipe `|N |`Wipe EM4x50 tag`
|`lf em 4x50 wrbl `|N |`Write EM4x50 word data` |`lf em 4x50 wrbl `|N |`Write EM4x50 word data`
|`lf em 4x50 wrpwd `|N |`Change EM4x50 password` |`lf em 4x50 wrpwd `|N |`Change EM4x50 password`
|`lf em 4x50 wipe `|N |`Wipe EM4x50 tag` |`lf em 4x50 eload `|N |`Upload file into emulator memory`
|`lf em 4x50 eload `|N |`Upload EM4x50 dump to emulator memory`
|`lf em 4x50 esave `|N |`Save emulator memory to file` |`lf em 4x50 esave `|N |`Save emulator memory to file`
|`lf em 4x50 eview `|N |`View EM4x50 content in emulator memory` |`lf em 4x50 eview `|N |`View emulator memory`
|`lf em 4x50 sim `|N |`Simulate EM4x50 tag` |`lf em 4x50 sim `|N |`Simulate EM4x50 tag`
@ -1025,11 +1039,13 @@ Check column "offline" for their availability.
|`lf hitag info `|N |`Hitag 2 tag information` |`lf hitag info `|N |`Hitag 2 tag information`
|`lf hitag dump `|N |`Dump Hitag 2 tag` |`lf hitag dump `|N |`Dump Hitag 2 tag`
|`lf hitag read `|N |`Read Hitag memory` |`lf hitag read `|N |`Read Hitag memory`
|`lf hitag view `|Y |`Display content from tag dump file`
|`lf hitag wrbl `|N |`Write a block (page) in Hitag memory` |`lf hitag wrbl `|N |`Write a block (page) in Hitag memory`
|`lf hitag sniff `|N |`Eavesdrop Hitag communication` |`lf hitag sniff `|N |`Eavesdrop Hitag communication`
|`lf hitag cc `|N |`Hitag S: test all provided challenges` |`lf hitag cc `|N |`Hitag S: test all provided challenges`
|`lf hitag ta `|N |`Hitag 2: test all recorded authentications` |`lf hitag ta `|N |`Hitag 2: test all recorded authentications`
|`lf hitag eload `|N |`Load Hitag dump file into emulator memory` |`lf hitag eload `|N |`Upload file into emulator memory`
|`lf hitag eview `|N |`View emulator memory`
|`lf hitag sim `|N |`Simulate Hitag transponder` |`lf hitag sim `|N |`Simulate Hitag transponder`