Skip to content

Commit cac4e22

Browse files
committed
initial modification to hf mfu restore to support secure messaging
1 parent abb0427 commit cac4e22

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

client/src/cmdhfmfu.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2420,8 +2420,8 @@ static int CmdHF14AMfUInfo(const char *Cmd) {
24202420
MFU_TT_NTAG_223_DNA | MFU_TT_NTAG_223_DNA_SD | MFU_TT_NTAG_224_DNA | MFU_TT_NTAG_224_DNA_SD |
24212421
MFU_TT_NTAG_I2C_1K | MFU_TT_NTAG_I2C_2K | MFU_TT_NTAG_I2C_1K_PLUS | MFU_TT_NTAG_I2C_2K_PLUS |
24222422
MFU_TT_UL_AES)) &&
2423-
((tagtype & (MFU_TT_MAGIC | MFU_TT_MAGIC_1A | MFU_TT_MAGIC_1B | MFU_TT_MAGIC_NTAG |
2424-
MFU_TT_MAGIC_2 | MFU_TT_MAGIC_4 | MFU_TT_MAGIC_4_GDM | MFU_TT_MAGIC_NTAG21X)) == 0)) {
2423+
((tagtype & (MFU_TT_MAGIC | MFU_TT_MAGIC_1A | MFU_TT_MAGIC_1B | MFU_TT_MAGIC_NTAG |
2424+
MFU_TT_MAGIC_2 | MFU_TT_MAGIC_4 | MFU_TT_MAGIC_4_GDM | MFU_TT_MAGIC_NTAG21X)) == 0)) {
24252425
// print silicon info
24262426
ul_print_nxp_silicon_info(card.uid);
24272427
}
@@ -3713,7 +3713,8 @@ int CmdHF14MfUTamper(const char *Cmd) {
37133713
int tt_msg_page = 45;
37143714
packet.block_no = tt_msg_page;
37153715

3716-
SendCommandNG(CMD_HF_MIFAREU_WRITEBL, (uint8_t*)&packet, sizeof(packet));
3716+
clearCommandBuffer();
3717+
SendCommandNG(CMD_HF_MIFAREU_WRITEBL, (uint8_t *)&packet, sizeof(packet));
37173718
PacketResponseNG resp;
37183719
if (WaitForResponseTimeout(CMD_HF_MIFAREU_WRITEBL, &resp, 1500) == false) {
37193720
PrintAndLogEx(WARNING, "command execution time out");
@@ -3767,7 +3768,9 @@ int CmdHF14MfUTamper(const char *Cmd) {
37673768

37683769
packet.block_no = tt_cfg_page;
37693770
memcpy(packet.data, cfg_page, sizeof(cfg_page));
3770-
SendCommandNG(CMD_HF_MIFAREU_WRITEBL, (uint8_t*)&packet, sizeof(packet));
3771+
3772+
clearCommandBuffer();
3773+
SendCommandNG(CMD_HF_MIFAREU_WRITEBL, (uint8_t *)&packet, sizeof(packet));
37713774
PacketResponseNG resp;
37723775
if (WaitForResponseTimeout(CMD_HF_MIFAREU_WRITEBL, &resp, 1500) == false) {
37733776
PrintAndLogEx(WARNING, "command execution time out");
@@ -3807,6 +3810,7 @@ static int CmdHF14AMfURestore(const char *Cmd) {
38073810
arg_lit0("r", NULL, "use password found in dumpfile to configure tag. Requires " _YELLOW_("'-e'") " parameter to work"),
38083811
arg_lit0("v", "verbose", "verbose output"),
38093812
arg_lit0("z", "dense", "dense dump output style"),
3813+
arg_lit0(NULL, "schann", "use secure channel. Must have key"),
38103814
arg_param_end
38113815
};
38123816
CLIExecWithReturn(ctx, Cmd, argtable, false);
@@ -3826,6 +3830,7 @@ static int CmdHF14AMfURestore(const char *Cmd) {
38263830
bool read_key = arg_get_lit(ctx, 6);
38273831
bool verbose = arg_get_lit(ctx, 7);
38283832
bool dense_output = (g_session.dense_output || arg_get_lit(ctx, 8));
3833+
bool use_schann = arg_get_lit(ctx, 9);
38293834
CLIParserFree(ctx);
38303835

38313836
bool has_key = false;
@@ -3883,8 +3888,9 @@ static int CmdHF14AMfURestore(const char *Cmd) {
38833888
if (tagtype == MFU_TT_UL_ERROR) {
38843889
return PM3_ESOFT;
38853890
}
3891+
38863892
if ((tagtype & MFU_TT_UL_AES) == MFU_TT_UL_AES) {
3887-
PrintAndLogEx(ERR, "Sorry, UL-AES not yet supported");
3893+
PrintAndLogEx(ERR, "Sorry, UL-AES not yet supported. Feel free to implement!");
38883894
free(dump);
38893895
return PM3_ENOTIMPL;
38903896
}
@@ -3909,12 +3915,14 @@ static int CmdHF14AMfURestore(const char *Cmd) {
39093915
uint8_t data[20] = {0};
39103916
uint8_t keytype = 0;
39113917
if (has_key) {
3912-
if ((tagtype & MFU_TT_UL_C) == MFU_TT_UL_C)
3918+
3919+
if ((tagtype & MFU_TT_UL_C) == MFU_TT_UL_C) {
39133920
keytype = 1; // UL_C auth
3914-
else if ((tagtype & MFU_TT_UL_AES) == MFU_TT_UL_AES)
3921+
} else if ((tagtype & MFU_TT_UL_AES) == MFU_TT_UL_AES) {
39153922
keytype = 3; // UL_AES auth
3916-
else
3923+
} else {
39173924
keytype = 2; // UL_EV1/NTAG auth
3925+
}
39183926
memcpy(data + 4, auth_key_ptr, ak_len);
39193927
}
39203928

0 commit comments

Comments
 (0)