Просмотр исходного кода

Merge picopass from https://github.com/flipperdevices/flipperzero-good-faps

Willy-JL 2 лет назад
Родитель
Сommit
a2005d3c10

+ 10 - 0
picopass/picopass_device.c

@@ -422,3 +422,13 @@ ReturnCode picopass_device_parse_wiegand(uint8_t* credential, PicopassPacs* pacs
 
     return ERR_NONE;
 }
+
+bool picopass_device_hid_csn(PicopassDevice* dev) {
+    furi_assert(dev);
+    PicopassBlock* AA1 = dev->dev_data.AA1;
+    uint8_t* csn = AA1[PICOPASS_CSN_BLOCK_INDEX].data;
+    // From Proxmark3 RRG sourcecode
+    bool isHidRange = (memcmp(csn + 5, "\xFF\x12\xE0", 3) == 0) && ((csn[4] & 0xF0) == 0xF0);
+
+    return isHidRange;
+}

+ 1 - 0
picopass/picopass_device.h

@@ -149,3 +149,4 @@ void picopass_device_set_loading_callback(
 
 ReturnCode picopass_device_parse_credential(PicopassBlock* AA1, PicopassPacs* pacs);
 ReturnCode picopass_device_parse_wiegand(uint8_t* credential, PicopassPacs* pacs);
+bool picopass_device_hid_csn(PicopassDevice* dev);

+ 3 - 0
picopass/scenes/picopass_scene_read_card_success.c

@@ -45,9 +45,12 @@ void picopass_scene_read_card_success_on_enter(void* context) {
 
     if(no_key) {
         furi_string_cat_printf(wiegand_str, "Read Failed");
+        bool hid_csn = picopass_device_hid_csn(picopass->dev);
 
         if(pacs->se_enabled) {
             furi_string_cat_printf(credential_str, "SE enabled");
+        } else if(!hid_csn) {
+            furi_string_cat_printf(credential_str, "Non-HID CSN");
         }
 
         widget_add_button_element(