1 //-----------------------------------------------------------------------------
2 // Copyright (C) Proxmark3 contributors. See AUTHORS.md for details.
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // See LICENSE.txt for the text of the license.
15 //-----------------------------------------------------------------------------
16 // High frequency MIFARE ULTRALIGHT (C) commands
17 //-----------------------------------------------------------------------------
23 #include "mifare.h" // structs
26 #define MFU_BLOCK_SIZE 0x04
27 #define MFU_MAX_BLOCKS 0xFF
28 #define MFU_MAX_BYTES (MFU_MAX_BLOCKS * MFU_BLOCK_SIZE)
30 // Old Ultralight/NTAG dump file format
31 // It is used only for converting
32 #define OLD_MFU_DUMP_PREFIX_LENGTH 48
40 uint8_t signature
[32];
43 } PACKED old_mfu_dump_t
;
51 uint64_t GetHF14AMfU_Type(void);
52 int ul_print_type(uint64_t tagtype
, uint8_t spaces
);
53 void mfu_print_dump(mfu_dump_t
*card
, uint16_t pages
, uint8_t startpage
, bool dense_output
);
54 int ul_read_uid(uint8_t *uid
);
55 int trace_mfuc_try_default_3des_keys(uint8_t **correct_key
, int state
, uint8_t (*authdata
)[16]);
57 int CmdHFMFUltra(const char *Cmd
);
58 int CmdHF14MfuNDEFRead(const char *Cmd
);
59 int CmdHF14MfUTamper(const char *Cmd
);
61 #define MFU_TT_UNKNOWN 0x0ULL
62 #define MFU_TT_UL 0x1ULL
63 #define MFU_TT_UL_C 0x2ULL
64 #define MFU_TT_UL_EV1_48 0x4ULL
65 #define MFU_TT_UL_EV1_128 0x8ULL
66 #define MFU_TT_NTAG 0x10ULL
67 #define MFU_TT_NTAG_203 0x20ULL
68 #define MFU_TT_NTAG_210 0x40ULL
69 #define MFU_TT_NTAG_212 0x80ULL
70 #define MFU_TT_NTAG_213 0x100ULL
71 #define MFU_TT_NTAG_215 0x200ULL
72 #define MFU_TT_NTAG_216 0x400ULL
73 #define MFU_TT_MY_D 0x800ULL
74 #define MFU_TT_MY_D_NFC 0x1000ULL
75 #define MFU_TT_MY_D_MOVE 0x2000ULL
76 #define MFU_TT_MY_D_MOVE_NFC 0x4000ULL
77 #define MFU_TT_MY_D_MOVE_LEAN 0x8000ULL
78 #define MFU_TT_NTAG_I2C_1K 0x10000ULL
79 #define MFU_TT_NTAG_I2C_2K 0x20000ULL
80 #define MFU_TT_NTAG_I2C_1K_PLUS 0x40000ULL
81 #define MFU_TT_NTAG_I2C_2K_PLUS 0x80000ULL
82 #define MFU_TT_FUDAN_UL 0x100000ULL
83 #define MFU_TT_MAGIC 0x200000ULL
84 #define MFU_TT_NTAG_213_F 0x400000ULL
85 #define MFU_TT_NTAG_216_F 0x800000ULL
86 #define MFU_TT_UL_EV1 0x1000000ULL
87 #define MFU_TT_UL_NANO_40 0x2000000ULL
88 #define MFU_TT_NTAG_213_TT 0x4000000ULL
89 #define MFU_TT_NTAG_213_C 0x8000000ULL
90 #define MFU_TT_MAGIC_1A 0x10000000ULL
91 #define MFU_TT_MAGIC_1B 0x20000000ULL
92 #define MFU_TT_MAGIC_NTAG 0x40000000ULL
93 #define MFU_TT_NTAG_210u 0x80000000ULL
94 #define MFU_TT_UL_AES 0x100000000ULL
95 #define MFU_TT_MAGIC_2 0x200000000ULL
96 #define MFU_TT_MAGIC_4 0x400000000ULL
97 #define MFU_TT_MAGIC_4_GDM 0x800000000ULL
98 #define MFU_TT_MAGIC_NTAG21X 0x1000000000ULL
99 #define MFU_TT_UL_MAGIC (MFU_TT_UL | MFU_TT_MAGIC)
100 #define MFU_TT_UL_C_MAGIC (MFU_TT_UL_C | MFU_TT_MAGIC)
101 // Don't forget to fill UL_TYPES_ARRAY and UL_MEMORY_ARRAY if new types are added
102 #define MFU_TT_UL_ERROR 0x7FFFFFFFULL