mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 21:33:47 -07:00
style
This commit is contained in:
parent
a6cd626869
commit
7c6d60e7ef
15 changed files with 321 additions and 208 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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" },
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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`
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue