Check for silicon version in iclass info

Updated hf iclass info to check whether the card's chipset is old silicon (supporting 14b) or new silicon (without the 14b support)
This commit is contained in:
Antiklesys 2024-10-20 12:33:25 +08:00
commit 4f85def6b0
4 changed files with 16 additions and 4 deletions

View file

@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
## [unreleased][unreleased] ## [unreleased][unreleased]
- Changed `hf iclass info` - now checks for cards silicon version (@antiklesys)
- Changed `hf iclass legrec` - updated script implementation to ensure functionality (@antiklesys) - Changed `hf iclass legrec` - updated script implementation to ensure functionality (@antiklesys)
- Added recovered iclass custom key to dictionary (@antiklesys) - Added recovered iclass custom key to dictionary (@antiklesys)
- Changed `hf mf sim` - add option to allow key b to be used even if readable (@doegox) - Changed `hf mf sim` - add option to allow key b to be used even if readable (@doegox)

View file

@ -1411,7 +1411,7 @@ static bool HF14B_ask_ct_reader(bool verbose) {
return false; return false;
} }
static bool HF14B_picopass_reader(bool verbose) { bool HF14B_picopass_reader(bool verbose, bool info) {
iso14b_raw_cmd_t packet = { iso14b_raw_cmd_t packet = {
.flags = (ISO14B_CONNECT | ISO14B_SELECT_PICOPASS | ISO14B_DISCONNECT), .flags = (ISO14B_CONNECT | ISO14B_SELECT_PICOPASS | ISO14B_DISCONNECT),
@ -1437,8 +1437,10 @@ static bool HF14B_picopass_reader(bool verbose) {
return false; return false;
} }
memcpy(card, resp.data.asBytes, sizeof(picopass_hdr_t)); memcpy(card, resp.data.asBytes, sizeof(picopass_hdr_t));
PrintAndLogEx(NORMAL, ""); if(info){
PrintAndLogEx(SUCCESS, "iCLASS / Picopass CSN: " _GREEN_("%s"), sprint_hex(card->csn, sizeof(card->csn))); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(SUCCESS, "iCLASS / Picopass CSN: " _GREEN_("%s"), sprint_hex(card->csn, sizeof(card->csn)));
}
free(card); free(card);
return true; return true;
} }
@ -3034,6 +3036,7 @@ int infoHF14B(bool verbose, bool do_aid_search) {
// get and print general info about all known 14b chips // get and print general info about all known 14b chips
int readHF14B(bool loop, bool verbose, bool read_plot) { int readHF14B(bool loop, bool verbose, bool read_plot) {
bool found = false; bool found = false;
bool info = true;
int res = PM3_SUCCESS; int res = PM3_SUCCESS;
do { do {
found = false; found = false;
@ -3049,7 +3052,7 @@ int readHF14B(bool loop, bool verbose, bool read_plot) {
goto plot; goto plot;
// Picopass // Picopass
found |= HF14B_picopass_reader(verbose); found |= HF14B_picopass_reader(verbose, info);
if (found) if (found)
goto plot; goto plot;

View file

@ -31,4 +31,6 @@ int select_card_14443b_4(bool disconnect, iso14b_card_select_t *card);
int infoHF14B(bool verbose, bool do_aid_search); int infoHF14B(bool verbose, bool do_aid_search);
int readHF14B(bool loop, bool verbose, bool read_plot); int readHF14B(bool loop, bool verbose, bool read_plot);
bool HF14B_picopass_reader(bool verbose, bool info);
#endif #endif

View file

@ -40,6 +40,7 @@
#include "crypto/asn1utils.h" // ASN1 decoder #include "crypto/asn1utils.h" // ASN1 decoder
#include "preferences.h" #include "preferences.h"
#include "generator.h" #include "generator.h"
#include "cmdhf14b.h"
#define NUM_CSNS 9 #define NUM_CSNS 9
@ -5379,6 +5380,11 @@ int info_iclass(bool shallow_mod) {
uint8_t cardtype = get_mem_config(hdr); uint8_t cardtype = get_mem_config(hdr);
PrintAndLogEx(SUCCESS, " Card type.... " _GREEN_("%s"), card_types[cardtype]); PrintAndLogEx(SUCCESS, " Card type.... " _GREEN_("%s"), card_types[cardtype]);
if(HF14B_picopass_reader(false, false)){
PrintAndLogEx(SUCCESS, " Card chip.... "_YELLOW_("Old Silicon (14b support)"));
}else{
PrintAndLogEx(SUCCESS, " Card chip.... "_YELLOW_("NEW Silicon (No 14b support)"));
}
if (legacy) { if (legacy) {
int res = PM3_ESOFT; int res = PM3_ESOFT;