mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2026-05-12 11:18:11 -07:00
fiddled with pm3 client informative text
This commit is contained in:
+174
-95
File diff suppressed because it is too large
Load Diff
+6
-4
@@ -156,7 +156,9 @@ int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t bl
|
||||
|
||||
// Transmit MIFARE_CLASSIC_AUTH, 0x60 for key A, 0x61 for key B, or 0x80 for GDM backdoor
|
||||
int len = mifare_sendcmd_short(pcs, isNested, cmd, blockNo, receivedAnswer, sizeof(receivedAnswer), receivedAnswerPar, timing);
|
||||
if (len != 4) return 1;
|
||||
if (len != 4) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Save the tag nonce (nt)
|
||||
uint32_t nt = bytes_to_num(receivedAnswer, 4);
|
||||
@@ -334,8 +336,9 @@ int mifare_ul_ev1_auth(uint8_t *keybytes, uint8_t *pack) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (g_dbglevel >= DBG_EXTENDED)
|
||||
if (g_dbglevel >= DBG_EXTENDED) {
|
||||
Dbprintf("Auth Resp: %02x%02x%02x%02x", resp[0], resp[1], resp[2], resp[3]);
|
||||
}
|
||||
|
||||
memcpy(pack, resp, 4);
|
||||
return 1;
|
||||
@@ -490,6 +493,7 @@ int mifare_ultra_aes_auth(uint8_t keyno, uint8_t *keybytes) {
|
||||
memset(IV, 0, 16);
|
||||
mbedtls_aes_setkey_dec(&actx, key, 128);
|
||||
mbedtls_aes_crypt_cbc(&actx, MBEDTLS_AES_DECRYPT, sizeof(random_b), IV, resp + 1, random_b);
|
||||
mbedtls_aes_free(&actx);
|
||||
|
||||
if (memcmp(random_b, random_a, 16) != 0) {
|
||||
if (g_dbglevel >= DBG_INFO) Dbprintf("failed authentication");
|
||||
@@ -507,8 +511,6 @@ int mifare_ultra_aes_auth(uint8_t keyno, uint8_t *keybytes) {
|
||||
Dbprintf("B:");
|
||||
Dbhexdump(16, random_b, false);
|
||||
}
|
||||
|
||||
mbedtls_aes_free(&actx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
+9
-3
@@ -577,19 +577,25 @@ int rdv40_spiffs_make_symlink(const char *linkdest, const char *filename, RDV40S
|
||||
// preexistence, avoiding a link being created if filename exists, or avoiding a file being created if
|
||||
// symlink exists with same name
|
||||
int rdv40_spiffs_read_as_filetype(const char *filename, uint8_t *dst, uint32_t size, RDV40SpiFFSSafetyLevel level) {
|
||||
|
||||
RDV40_SPIFFS_SAFE_FUNCTION(
|
||||
|
||||
RDV40SpiFFSFileType filetype = filetype_in_spiffs((char *)filename);
|
||||
|
||||
switch (filetype) {
|
||||
case RDV40_SPIFFS_FILETYPE_REAL:
|
||||
case RDV40_SPIFFS_FILETYPE_REAL: {
|
||||
rdv40_spiffs_read(filename, dst, size, level);
|
||||
break;
|
||||
case RDV40_SPIFFS_FILETYPE_SYMLINK:
|
||||
}
|
||||
case RDV40_SPIFFS_FILETYPE_SYMLINK: {
|
||||
rdv40_spiffs_read_as_symlink(filename, dst, size, level);
|
||||
break;
|
||||
}
|
||||
case RDV40_SPIFFS_FILETYPE_BOTH:
|
||||
case RDV40_SPIFFS_FILETYPE_UNKNOWN:
|
||||
default:
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+11
-11
@@ -240,47 +240,47 @@ int CmdHFSearch(const char *Cmd) {
|
||||
// no need to print 14A hints, since it will print itself
|
||||
|
||||
if (success[THINFILM]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf thinfilm") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf thinfilm") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[LTO]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf lto") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf lto") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[LEGIC]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf legic") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf legic") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[TOPAZ]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf topaz") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf topaz") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[PROTO_TEXKOM]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf texkom") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf texkom") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[PROTO_XEROX]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf xerox") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf xerox") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[ISO_14443B]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf 14b") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf 14b") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[ISO_15693]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf 15") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf 15") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[ICLASS]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf iclass") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf iclass") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[FELICA]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf felica") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf felica") "` commands\n");
|
||||
}
|
||||
|
||||
if (success[PROTO_CRYPTORF]) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf cryptorf") "` commands\n");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf cryptorf") "` commands\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-14
@@ -520,7 +520,7 @@ int Hf14443_4aGetCardData(iso14a_card_select_t *card) {
|
||||
PrintAndLogEx(INFO, "Card doesn't support standard iso14443-3 anticollision");
|
||||
// identify TOPAZ
|
||||
if (card->atqa[1] == 0x0C && card->atqa[0] == 0x00) {
|
||||
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf topaz info`"));
|
||||
PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf topaz info`"));
|
||||
} else {
|
||||
PrintAndLogEx(SUCCESS, "\tATQA : %02X %02X", card->atqa[1], card->atqa[0]);
|
||||
}
|
||||
@@ -685,7 +685,7 @@ static int CmdHF14AReader(const char *Cmd) {
|
||||
|
||||
// identify TOPAZ
|
||||
if (card.atqa[1] == 0x0C && card.atqa[0] == 0x00) {
|
||||
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf topaz info`"));
|
||||
PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf topaz info`"));
|
||||
} else {
|
||||
PrintAndLogEx(SUCCESS, "ATQA: %02X %02X", card.atqa[1], card.atqa[0]);
|
||||
}
|
||||
@@ -2161,7 +2161,7 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) {
|
||||
|
||||
// identify TOPAZ
|
||||
if (card.atqa[1] == 0x0C && card.atqa[0] == 0x00) {
|
||||
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`hf topaz info`"));
|
||||
PrintAndLogEx(HINT, "Hint: Try " _YELLOW_("`hf topaz info`"));
|
||||
}
|
||||
|
||||
DropField();
|
||||
@@ -2746,42 +2746,42 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) {
|
||||
if (isMifareUltralight) {
|
||||
|
||||
if (((isMagic & MAGIC_FLAG_GEN_1A) == MAGIC_FLAG_GEN_1A) || ((isMagic & MAGIC_FLAG_GEN_1B) == MAGIC_FLAG_GEN_1B)) {
|
||||
PrintAndLogEx(HINT, "Hint: use `" _YELLOW_("hf mfu *") "` magic commands");
|
||||
PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mfu *") "` magic commands");
|
||||
}
|
||||
|
||||
if ((isMagic & MAGIC_FLAG_NTAG21X) == MAGIC_FLAG_NTAG21X) {
|
||||
PrintAndLogEx(HINT, "Hint: use `" _YELLOW_("hf mfu *") "` magic commands");
|
||||
PrintAndLogEx(HINT, "Hint: Use `" _YELLOW_("hf mfu *") "` magic commands");
|
||||
}
|
||||
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf mfu info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf mfu info") "`");
|
||||
}
|
||||
|
||||
if (isMifarePlus && (isMagic == MAGIC_FLAG_NONE)) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf mfp info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf mfp info") "`");
|
||||
}
|
||||
|
||||
if (isMifareDESFire && (isMagic == MAGIC_FLAG_NONE) && isEMV == false) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf mfdes info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf mfdes info") "`");
|
||||
}
|
||||
|
||||
if (isST) {
|
||||
if (card.ats_len > 0) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf st25ta info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf st25ta info") "`");
|
||||
} else {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf mfu info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf mfu info") "`");
|
||||
}
|
||||
}
|
||||
|
||||
if (isEMV) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("emv reader") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("emv reader") "`");
|
||||
}
|
||||
|
||||
if (isSEOS) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf seos info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf seos info") "`");
|
||||
}
|
||||
|
||||
if (isFUDAN) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf fudan dump") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf fudan dump") "`");
|
||||
/*
|
||||
PrintAndLogEx(HINT, " hf 14a raw -a -b 7 -k 26");
|
||||
PrintAndLogEx(HINT, " hf 14a raw -k -c 3000");
|
||||
@@ -2796,7 +2796,7 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) {
|
||||
}
|
||||
|
||||
if (isNTAG424) {
|
||||
PrintAndLogEx(HINT, "Hint: try `" _YELLOW_("hf ntag424 info") "`");
|
||||
PrintAndLogEx(HINT, "Hint: Try `" _YELLOW_("hf ntag424 info") "`");
|
||||
}
|
||||
|
||||
if (isMifareClassic || isMifareMini) {
|
||||
|
||||
+34
-37
@@ -151,8 +151,6 @@ static void lookup_chipid_short(uint32_t iChipID, uint32_t mem_used) {
|
||||
, mem_avail
|
||||
, mem_avail == 0 ? 0.0f : (float)mem_used / (mem_avail * 1024) * 100
|
||||
);
|
||||
|
||||
PrintAndLogEx(NORMAL, "");
|
||||
}
|
||||
|
||||
static void lookupChipID(uint32_t iChipID, uint32_t mem_used) {
|
||||
@@ -1571,6 +1569,23 @@ void pm3_version_short(void) {
|
||||
|
||||
lookup_chipid_short(payload->id, payload->section_size);
|
||||
|
||||
if (IfPm3Rdv4Fw()) {
|
||||
|
||||
bool is_genuine_rdv4 = false;
|
||||
// validate signature data
|
||||
rdv40_validation_t mem;
|
||||
if (rdv4_get_signature(&mem) == PM3_SUCCESS) {
|
||||
if (rdv4_validate(&mem) == PM3_SUCCESS) {
|
||||
is_genuine_rdv4 = true;
|
||||
}
|
||||
}
|
||||
|
||||
PrintAndLogEx(NORMAL, " Target.... %s", (is_genuine_rdv4) ? _YELLOW_("RDV4") : _RED_("device / fw mismatch"));
|
||||
} else {
|
||||
PrintAndLogEx(NORMAL, " Target.... %s", _YELLOW_("PM3 GENERIC"));
|
||||
}
|
||||
PrintAndLogEx(NORMAL, "");
|
||||
|
||||
// client
|
||||
char temp[PM3_CMD_DATA_SIZE - 12]; // same limit as for ARM image
|
||||
format_version_information_short(temp, sizeof(temp), &g_version_information);
|
||||
@@ -1588,42 +1603,24 @@ void pm3_version_short(void) {
|
||||
}
|
||||
|
||||
// bootrom
|
||||
ptr = strstr(payload->versionstr, " bootrom: ");
|
||||
ptr = strstr(payload->versionstr, "Bootrom.... ");
|
||||
if (ptr != NULL) {
|
||||
char *ptr_end = strstr(ptr, "\n");
|
||||
if (ptr_end != NULL) {
|
||||
uint8_t len = ptr_end - 19 - ptr;
|
||||
PrintAndLogEx(NORMAL, " Bootrom... %.*s", len, ptr + 10);
|
||||
PrintAndLogEx(NORMAL, " Bootrom... %.*s", len, ptr + 12);
|
||||
}
|
||||
}
|
||||
|
||||
// os:
|
||||
ptr = strstr(payload->versionstr, " os: ");
|
||||
ptr = strstr(payload->versionstr, "OS......... ");
|
||||
if (ptr != NULL) {
|
||||
char *ptr_end = strstr(ptr, "\n");
|
||||
if (ptr_end != NULL) {
|
||||
uint8_t len = ptr_end - 14 - ptr;
|
||||
PrintAndLogEx(NORMAL, " OS........ %.*s", len, ptr + 5);
|
||||
PrintAndLogEx(NORMAL, " OS........ %.*s", len, ptr + 12);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (IfPm3Rdv4Fw()) {
|
||||
|
||||
bool is_genuine_rdv4 = false;
|
||||
// validate signature data
|
||||
rdv40_validation_t mem;
|
||||
if (rdv4_get_signature(&mem) == PM3_SUCCESS) {
|
||||
if (rdv4_validate(&mem) == PM3_SUCCESS) {
|
||||
is_genuine_rdv4 = true;
|
||||
}
|
||||
}
|
||||
|
||||
PrintAndLogEx(NORMAL, " Target.... %s", (is_genuine_rdv4) ? _YELLOW_("RDV4") : _RED_("device / fw mismatch"));
|
||||
} else {
|
||||
PrintAndLogEx(NORMAL, " Target.... %s", _YELLOW_("PM3 GENERIC"));
|
||||
}
|
||||
|
||||
PrintAndLogEx(NORMAL, "");
|
||||
|
||||
if (armsrc_mismatch) {
|
||||
@@ -1643,7 +1640,7 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
if (oneliner) {
|
||||
// For "proxmark3 -v", simple printf, avoid logging
|
||||
FormatVersionInformation(temp, sizeof(temp), "Client: ", &g_version_information);
|
||||
PrintAndLogEx(NORMAL, "%s compiled with " PM3CLIENTCOMPILER __VERSION__ " OS:" PM3HOSTOS " ARCH:" PM3HOSTARCH "\n", temp);
|
||||
PrintAndLogEx(NORMAL, "%s compiler: " PM3CLIENTCOMPILER __VERSION__ " OS:" PM3HOSTOS " ARCH:" PM3HOSTARCH "\n", temp);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1655,8 +1652,8 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("Client") " ]");
|
||||
FormatVersionInformation(temp, sizeof(temp), " ", &g_version_information);
|
||||
PrintAndLogEx(NORMAL, "%s", temp);
|
||||
PrintAndLogEx(NORMAL, " compiled with............. " PM3CLIENTCOMPILER __VERSION__);
|
||||
PrintAndLogEx(NORMAL, " platform.................. " PM3HOSTOS " / " PM3HOSTARCH);
|
||||
PrintAndLogEx(NORMAL, " Compiler.................. " PM3CLIENTCOMPILER __VERSION__);
|
||||
PrintAndLogEx(NORMAL, " Platform.................. " PM3HOSTOS " / " PM3HOSTARCH);
|
||||
#if defined(HAVE_READLINE)
|
||||
PrintAndLogEx(NORMAL, " Readline support.......... " _GREEN_("present"));
|
||||
#elif defined(HAVE_LINENOISE)
|
||||
@@ -1670,9 +1667,9 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
PrintAndLogEx(NORMAL, " QT GUI support............ " _YELLOW_("absent"));
|
||||
#endif
|
||||
#ifdef HAVE_BLUEZ
|
||||
PrintAndLogEx(NORMAL, " native BT support......... " _GREEN_("present"));
|
||||
PrintAndLogEx(NORMAL, " Native BT support......... " _GREEN_("present"));
|
||||
#else
|
||||
PrintAndLogEx(NORMAL, " native BT support......... " _YELLOW_("absent"));
|
||||
PrintAndLogEx(NORMAL, " Native BT support......... " _YELLOW_("absent"));
|
||||
#endif
|
||||
#ifdef HAVE_PYTHON
|
||||
PrintAndLogEx(NORMAL, " Python script support..... " _GREEN_("present") " ( " _YELLOW_(PY_VERSION) " )");
|
||||
@@ -1692,7 +1689,7 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
#endif
|
||||
|
||||
if (g_session.pm3_present) {
|
||||
PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("Proxmark3") " ]");
|
||||
PrintAndLogEx(NORMAL, "\n [ " _YELLOW_("Model") " ]");
|
||||
|
||||
PacketResponseNG resp;
|
||||
clearCommandBuffer();
|
||||
@@ -1710,15 +1707,15 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
}
|
||||
}
|
||||
|
||||
PrintAndLogEx(NORMAL, " device.................... %s", (is_genuine_rdv4) ? _GREEN_("RDV4") : _RED_("device / fw mismatch"));
|
||||
PrintAndLogEx(NORMAL, " firmware.................. %s", (is_genuine_rdv4) ? _GREEN_("RDV4") : _YELLOW_("RDV4"));
|
||||
PrintAndLogEx(NORMAL, " external flash............ %s", IfPm3Flash() ? _GREEN_("present") : _YELLOW_("absent"));
|
||||
PrintAndLogEx(NORMAL, " smartcard reader.......... %s", IfPm3Smartcard() ? _GREEN_("present") : _YELLOW_("absent"));
|
||||
PrintAndLogEx(NORMAL, " Device.................... %s", (is_genuine_rdv4) ? _GREEN_("RDV4") : _RED_("device / fw mismatch"));
|
||||
PrintAndLogEx(NORMAL, " Firmware.................. %s", (is_genuine_rdv4) ? _GREEN_("RDV4") : _YELLOW_("RDV4"));
|
||||
PrintAndLogEx(NORMAL, " External flash............ %s", IfPm3Flash() ? _GREEN_("present") : _YELLOW_("absent"));
|
||||
PrintAndLogEx(NORMAL, " Smartcard reader.......... %s", IfPm3Smartcard() ? _GREEN_("present") : _YELLOW_("absent"));
|
||||
PrintAndLogEx(NORMAL, " FPC USART for BT add-on... %s", IfPm3FpcUsartHost() ? _GREEN_("present") : _YELLOW_("absent"));
|
||||
} else {
|
||||
PrintAndLogEx(NORMAL, " firmware.................. %s", _YELLOW_("PM3 GENERIC"));
|
||||
PrintAndLogEx(NORMAL, " Firmware.................. %s", _YELLOW_("PM3 GENERIC"));
|
||||
if (IfPm3Flash()) {
|
||||
PrintAndLogEx(NORMAL, " external flash............ %s", _GREEN_("present"));
|
||||
PrintAndLogEx(NORMAL, " External flash............ %s", _GREEN_("present"));
|
||||
}
|
||||
|
||||
if (IfPm3FpcUsartHost()) {
|
||||
@@ -1742,7 +1739,7 @@ void pm3_version(bool verbose, bool oneliner) {
|
||||
struct p *payload = (struct p *)&resp.data.asBytes;
|
||||
|
||||
bool armsrc_mismatch = false;
|
||||
char *ptr = strstr(payload->versionstr, " os: ");
|
||||
char *ptr = strstr(payload->versionstr, "OS......... ");
|
||||
if (ptr != NULL) {
|
||||
ptr = strstr(ptr, "\n");
|
||||
if ((ptr != NULL) && (strlen(g_version_information.armsrc) == 9)) {
|
||||
|
||||
Reference in New Issue
Block a user