Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .catalog/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Picopass

This application allows you to read, write, save, and emulate legacy HID iClass cards and fobs (based on the picopass chipset). Also supports saving the credential to the Flipper Zero LFRFID data format, changing the keys on the card, performing dictionary attack, and performing the 'online' part of the loclass attack.
This application allows you to read, write, create, save, and emulate legacy HID iClass cards and fobs (based on the picopass chipset). Also supports saving the credential to the Flipper Zero LFRFID data format, changing the keys on the card, performing dictionary attack, and performing the 'online' part of the loclass attack.

# Create (manual credential)

Use _Create_ from the main menu when you want to build a credential without first reading a card.

1. Select _Create_ and choose the Wiegand format, facility code, and card number (numeric keypad).
2. Pick an action: _Emulate_ to start field emulation, _Write_ to program a presented card, or _Save_ to store the file for later.
3. Defaults target iClass Legacy using standard keys and 3DES; CSN is pre-filled with a typical HID value. Values persist if you back out and return.

# Loclass (HID Only)

Expand Down
15 changes: 15 additions & 0 deletions picopass_wiegand.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,21 @@ void picopass_wiegand_format_description(wiegand_message_t* packed, FuriString*
}
}

const char* picopass_wiegand_format_name(WiegandFormat format) {
switch(format) {
case WiegandFormat_H10301:
return "H10301";
case WiegandFormat_C1k35s:
return "C1k35s";
case WiegandFormat_H10302:
return "H10302";
case WiegandFormat_H10304:
return "H10304";
default:
return "Unknown";
}
}

bool picopass_Pack_H10301(wiegand_card_t* card, wiegand_message_t* packed) {
memset(packed, 0, sizeof(wiegand_message_t));

Expand Down
1 change: 1 addition & 0 deletions picopass_wiegand.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,4 @@ bool picopass_Unpack_H10304(wiegand_message_t* packed, wiegand_card_t* card);

int picopass_wiegand_format_count(wiegand_message_t* packed);
void picopass_wiegand_format_description(wiegand_message_t* packed, FuriString* description);
const char* picopass_wiegand_format_name(WiegandFormat format);
2 changes: 2 additions & 0 deletions scenes/picopass_scene_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ ADD_SCENE(picopass, write_key, WriteKey)
ADD_SCENE(picopass, key_menu, KeyMenu)
ADD_SCENE(picopass, elite_dict_attack, EliteDictAttack)
ADD_SCENE(picopass, emulate, Emulate)
ADD_SCENE(picopass, create, Create)
ADD_SCENE(picopass, create_advanced, CreateAdvanced)
ADD_SCENE(picopass, loclass, Loclass)
ADD_SCENE(picopass, key_input, KeyInput)
ADD_SCENE(picopass, nr_mac_saved, NrMacSaved)
Expand Down
Loading