@@ -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