mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-11 06:09:08 -07:00
* Initial structure for nonce collection * Nonce logging * Dictionary attack structure * Fix compilation * Identified method to reduce candidate states * Use EXT_PATH instead of ANY_PATH * Use median calibrated distance, collect parity bits * Modify parity collection * Fixed parity bit collection * Add note to fix nonce logging * Fix nonce logging * Clean redundant code * Fix valid_nonce * First attempt disambiguous nonce implementation * FM11RF08S backdoor detection * Initial accelerated dictionary attack for weak PRNGs * Refactor to nested dictionary attack * Renaming some variables * Hard PRNG support for accelerated dictionary attack * Update found keys, initial attempt * Update found keys, second attempt * Code cleanup * Misc bugfixes * Only use dicts in search_dicts_for_nonce_key if we have them * Collect nonces again * Should be detecting both backdoors now * Relocate backdoor detection * Hardnested support * Fix regression for regular nested attack * Backdoor read * Backdoor working up to calibration * Backdoor nested calibration * Don't recalibrate hard PRNG tags * Static encrypted nonce collection * Update TODO * NFC app UI updates, MVP * Bump f18 API version (all functions are NFC related) * Add new backdoor key, fix UI status update carrying over from previous read * Clear TODO line * Fix v1/v2 backdoor nonce collection * Speed up backdoor detection, alert on new backdoor * Add additional condition to backdoor check * I'll try freeing memory, that's a good trick! * Do not enter nested attack if card is already finished * Do not reset the poller between collected nonces * Clean up various issues * Fix Hardnested sector/key type logging * Add nested_target_key 64 to TODO * Implement progress bar for upgraded attacks in NFC app * Typo * Zero nested_target_key and msb_count on exit * Note TODO (malloc) * Dismiss duplicate nonces * Fix calibration (ensure values are within 3 standard deviations) * Log static * No nested dictionary attack re-entry * Note minor inefficiency * Uniformly use crypto1_ prefix for symbols in Crypto1 API * Fix include paths * Fix include paths cont * Support CUID dictionary * Fix log levels * Avoid storage errors, clean up temporary files * Handle invalid key candidates * Fix memory leak in static encrypted attack * Fix memory leak, use COUNT_OF macro * Use single call to free FuriString * Refactor enums to avoid redefinition * Fix multiple crashes and state machine logic * Fix inconsistent assignment of known key and known key type/sector * Backdoor known key logic still needs the current key * Larger data type for 4K support * Fix typo * Fix issue with resume logic * Mark TODOs for next PR * Remove redundant assignment * Fix size_t format specifier * Simplify auth_passed condition Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com> Co-authored-by: gornekich <n.gorbadey@gmail.com>
62 lines
1.8 KiB
C
62 lines
1.8 KiB
C
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <gui/view.h>
|
|
#include <lib/nfc/protocols/mf_classic/mf_classic_poller.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct DictAttack DictAttack;
|
|
|
|
typedef enum {
|
|
DictAttackEventSkipPressed,
|
|
} DictAttackEvent;
|
|
|
|
typedef void (*DictAttackCallback)(DictAttackEvent event, void* context);
|
|
|
|
DictAttack* dict_attack_alloc(void);
|
|
|
|
void dict_attack_free(DictAttack* instance);
|
|
|
|
void dict_attack_reset(DictAttack* instance);
|
|
|
|
View* dict_attack_get_view(DictAttack* instance);
|
|
|
|
void dict_attack_set_callback(DictAttack* instance, DictAttackCallback callback, void* context);
|
|
|
|
void dict_attack_set_header(DictAttack* instance, const char* header);
|
|
|
|
void dict_attack_set_card_state(DictAttack* instance, bool detected);
|
|
|
|
void dict_attack_set_sectors_total(DictAttack* instance, uint8_t sectors_total);
|
|
|
|
void dict_attack_set_sectors_read(DictAttack* instance, uint8_t sectors_read);
|
|
|
|
void dict_attack_set_keys_found(DictAttack* instance, uint8_t keys_found);
|
|
|
|
void dict_attack_set_current_sector(DictAttack* instance, uint8_t curr_sec);
|
|
|
|
void dict_attack_set_total_dict_keys(DictAttack* instance, size_t dict_keys_total);
|
|
|
|
void dict_attack_set_current_dict_key(DictAttack* instance, size_t cur_key_num);
|
|
|
|
void dict_attack_set_key_attack(DictAttack* instance, uint8_t sector);
|
|
|
|
void dict_attack_reset_key_attack(DictAttack* instance);
|
|
|
|
void dict_attack_set_nested_phase(DictAttack* instance, MfClassicNestedPhase nested_phase);
|
|
|
|
void dict_attack_set_prng_type(DictAttack* instance, MfClassicPrngType prng_type);
|
|
|
|
void dict_attack_set_backdoor(DictAttack* instance, MfClassicBackdoor backdoor);
|
|
|
|
void dict_attack_set_nested_target_key(DictAttack* instance, uint16_t target_key);
|
|
|
|
void dict_attack_set_msb_count(DictAttack* instance, uint16_t msb_count);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|