diff --git a/applications/plugins/subbrute/README.md b/applications/plugins/subbrute/README.md index ab4bb067f..2c5eb9636 100644 --- a/applications/plugins/subbrute/README.md +++ b/applications/plugins/subbrute/README.md @@ -46,6 +46,23 @@ We do not condone illegal activity and strongly encourage keeping transmissions - Linear 10bit 300MHz - Linear 10bit 310MHz +#### UNILARM + +- UNILARM 25bit 330MHz +- UNILARM 25bit 433MHz + +#### SMC5326 + +- SMC5326 25bit 330MHz +- SMC5326 25bit 433MHz + +#### PT2260 + +- PT2260 24bit 315MHz +- PT2260 24bit 330MHz +- PT2260 24bit 390MHz +- PT2260 24bit 433MHz + #### Additional -- BF Existing dump works for all other static protocols supported by Flipper Zero +- BF Existing dump works for most other static protocols supported by Flipper Zero diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.c b/applications/plugins/subbrute/helpers/subbrute_worker.c index 6bf0cd028..118e63c65 100644 --- a/applications/plugins/subbrute/helpers/subbrute_worker.c +++ b/applications/plugins/subbrute/helpers/subbrute_worker.c @@ -108,7 +108,7 @@ bool subbrute_worker_init_default_attack( #ifdef FURI_DEBUG FURI_LOG_I( TAG, - "subbrute_worker_init_default_attack: %s, bits: %d, preset: %s, file: %s, te: %d, repeat: %d, max_value: %lld", + "subbrute_worker_init_default_attack: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld", subbrute_protocol_name(instance->attack), instance->bits, subbrute_protocol_preset(instance->preset), @@ -157,7 +157,7 @@ bool subbrute_worker_init_file_attack( #ifdef FURI_DEBUG FURI_LOG_I( TAG, - "subbrute_worker_init_file_attack: %s, bits: %d, preset: %s, file: %s, te: %d, repeat: %d, max_value: %lld, key: %llX", + "subbrute_worker_init_file_attack: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld, key: %llX", subbrute_protocol_name(instance->attack), instance->bits, subbrute_protocol_preset(instance->preset), @@ -256,7 +256,7 @@ bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t ste instance->two_bytes); } else { subbrute_protocol_default_payload( - stream, step, instance->bits, instance->te, instance->repeat); + stream, instance->file, step, instance->bits, instance->te, instance->repeat); } // size_t written = stream_write_string(stream, payload); @@ -386,7 +386,12 @@ int32_t subbrute_worker_thread(void* context) { instance->two_bytes); } else { subbrute_protocol_default_payload( - stream, instance->step, instance->bits, instance->te, instance->repeat); + stream, + instance->file, + instance->step, + instance->bits, + instance->te, + instance->repeat); } #ifdef FURI_DEBUG //FURI_LOG_I(TAG, "Payload: %s", furi_string_get_cstr(payload)); diff --git a/applications/plugins/subbrute/helpers/subbrute_worker_private.h b/applications/plugins/subbrute/helpers/subbrute_worker_private.h index eb12be284..e38e77dc4 100644 --- a/applications/plugins/subbrute/helpers/subbrute_worker_private.h +++ b/applications/plugins/subbrute/helpers/subbrute_worker_private.h @@ -28,7 +28,7 @@ struct SubBruteWorker { FuriHalSubGhzPreset preset; SubBruteFileProtocol file; uint8_t bits; - uint8_t te; + uint32_t te; uint8_t repeat; uint8_t load_index; // Index of group to bruteforce in loaded file uint64_t file_key; diff --git a/applications/plugins/subbrute/subbrute_device.c b/applications/plugins/subbrute/subbrute_device.c index ea5483852..0971c380e 100644 --- a/applications/plugins/subbrute/subbrute_device.c +++ b/applications/plugins/subbrute/subbrute_device.c @@ -159,7 +159,7 @@ SubBruteFileResult subbrute_device_attack_set( uint8_t protocol_check_result = SubBruteFileResultProtocolNotFound; #ifdef FURI_DEBUG uint8_t bits; - uint8_t te; + uint32_t te; uint8_t repeat; FuriHalSubGhzPreset preset; SubBruteFileProtocol file; @@ -211,7 +211,7 @@ SubBruteFileResult subbrute_device_attack_set( #ifdef FURI_DEBUG FURI_LOG_I( TAG, - "subbrute_device_attack_set: %s, bits: %d, preset: %s, file: %s, te: %d, repeat: %d, max_value: %lld", + "subbrute_device_attack_set: %s, bits: %d, preset: %s, file: %s, te: %ld, repeat: %d, max_value: %lld", subbrute_protocol_name(instance->attack), bits, subbrute_protocol_preset(preset), @@ -320,25 +320,6 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil FURI_LOG_D(TAG, "Bit: %d", instance->file_protocol_info->bits); #endif - // TODO: Delete this - // Key - // if(!flipper_format_read_string(fff_data_file, "Key", temp_str)) { - // FURI_LOG_E(TAG, "Missing or incorrect Key"); - // result = SubBruteFileResultMissingOrIncorrectKey; - // break; - // } else { - // snprintf( - // instance->current_key_from_file, - // sizeof(instance->current_key_from_file), - // "%s", - // furi_string_get_cstr(temp_str)); - // #ifdef FURI_DEBUG - // FURI_LOG_D(TAG, "Key: %s", instance->current_key_from_file); - // #endif - // } - // - // flipper_format_rewind(fff_data_file); - uint8_t key_data[sizeof(uint64_t)] = {0}; if(!flipper_format_read_hex(fff_data_file, "Key", key_data, sizeof(uint64_t))) { FURI_LOG_E(TAG, "Missing Key"); @@ -354,81 +335,6 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil #endif instance->key_from_file = data; - // uint16_t add_value = 0x0001; - // uint8_t bit_index = 7; - // bool two_bytes = true; - // uint8_t p[8]; - // for(int i = 0; i < 8; i++) { - // p[i] = (uint8_t)(instance->key_from_file >> 8 * (7 - i)) & 0xFF; - // } - // uint16_t num = two_bytes ? (p[bit_index - 1] << 8) | p[bit_index] : p[bit_index]; - // FURI_LOG_D(TAG, "num: 0x%04X", num); - // num += add_value; - // FURI_LOG_D(TAG, "num added: 0x%04X", num); - // uint8_t low_byte = num & (0xff); - // uint8_t high_byte = (num >> 8) & 0xff; - - // data = 0; - // for(uint8_t i = 0; i < sizeof(uint64_t); i++) { - // if(i == bit_index - 1 && two_bytes) { - // data = (data << 8) | high_byte; - // data = (data << 8) | low_byte; - // i++; - // } else if(i == bit_index) { - // data = (data << 8) | low_byte; - // } else { - // data = (data << 8) | p[i]; - // } - // } - // #if FURI_DEBUG - // furi_string_printf(temp_str, "Key: %lX", (uint32_t)(data & 0xFFFFFFFF)); - // FURI_LOG_D( - // TAG, "H: 0x%02X, L: 0x%02X, %s", high_byte, low_byte, furi_string_get_cstr(temp_str)); - // #endif - // uint8_t key_data[sizeof(uint64_t)] = {0}; - // if(!flipper_format_read_hex(fff_data_file, "Key", key_data, sizeof(uint64_t))) { - // FURI_LOG_E(TAG, "Missing Key"); - // result = SubBruteFileResultMissingOrIncorrectKey; - // break; - // } - // uint64_t data = 0; - // for(uint8_t i = 0; i < sizeof(uint64_t); i++) { - // data = (data << 8) | key_data[i]; - // } - // instance->key_from_file = data; - - // uint16_t add_value = 0x0001; - // uint8_t bit_index = 7; - // bool two_bytes = true; - - // uint8_t p[8]; - // for(int i = 0; i < 8; i++) { - // p[i] = (uint8_t)(instance->key_from_file >> 8 * (7 - i)) & 0xFF; - // } - // uint16_t num = two_bytes ? (p[bit_index - 1] << 8) | p[bit_index] : p[bit_index]; - // FURI_LOG_D(TAG, "num: 0x%04X", num); - // num += add_value; - // FURI_LOG_D(TAG, "num added: 0x%04X", num); - // uint8_t low_byte = num & (0xff); - // uint8_t high_byte = (num >> 8) & 0xff; - - // data = 0; - // for(uint8_t i = 0; i < sizeof(uint64_t); i++) { - // if(i == bit_index - 1 && two_bytes) { - // data = (data << 8) | high_byte; - // data = (data << 8) | low_byte; - // i++; - // } else if(i == bit_index) { - // data = (data << 8) | low_byte; - // } else { - // data = (data << 8) | p[i]; - // } - // } - - // furi_string_printf(temp_str, "Key: %lX", (uint32_t)(data & 0xFFFFFFFF)); - // FURI_LOG_D( - // TAG, "H: 0x%02X, L: 0x%02X, %s", high_byte, low_byte, furi_string_get_cstr(temp_str)); - // TE if(!flipper_format_read_uint32(fff_data_file, "TE", &temp_data32, 1)) { FURI_LOG_E(TAG, "Missing or incorrect TE"); @@ -487,7 +393,6 @@ void subbrute_device_attack_set_default_values( instance->bit_index = 0x00; instance->extra_repeats = 0; instance->two_bytes = false; - memset(instance->current_key, 0, sizeof(instance->current_key)); if(default_attack != SubBruteAttackLoadFile) { instance->max_value = subbrute_protocol_calc_max_value( diff --git a/applications/plugins/subbrute/subbrute_device.h b/applications/plugins/subbrute/subbrute_device.h index e8b96a755..7ff650e93 100644 --- a/applications/plugins/subbrute/subbrute_device.h +++ b/applications/plugins/subbrute/subbrute_device.h @@ -49,7 +49,6 @@ typedef struct { uint8_t extra_repeats; // Loaded info for attack type - char current_key[SUBBRUTE_PAYLOAD_SIZE]; uint64_t key_from_file; uint64_t current_key_from_file; bool two_bytes; diff --git a/applications/plugins/subbrute/subbrute_i.h b/applications/plugins/subbrute/subbrute_i.h index 24f2c57c0..eff9a9075 100644 --- a/applications/plugins/subbrute/subbrute_i.h +++ b/applications/plugins/subbrute/subbrute_i.h @@ -29,6 +29,8 @@ #include "views/subbrute_attack_view.h" #include "views/subbrute_main_view.h" +#define SUBBRUTEFORCER_VER "Sub-GHz BruteForcer 3.4" + #ifdef FURI_DEBUG //#define SUBBRUTE_FAST_TRACK false #endif diff --git a/applications/plugins/subbrute/subbrute_protocols.c b/applications/plugins/subbrute/subbrute_protocols.c index a139bca3e..c3756de00 100644 --- a/applications/plugins/subbrute/subbrute_protocols.c +++ b/applications/plugins/subbrute/subbrute_protocols.c @@ -1,4 +1,5 @@ #include "subbrute_protocols.h" +#include "math.h" #include #define TAG "SubBruteProtocols" @@ -245,6 +246,94 @@ const SubBruteProtocol subbrute_protocol_linear_10bit_310 = { .preset = FuriHalSubGhzPresetOok650Async, .file = LinearFileProtocol}; +/** + * UNILARM 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_unilarm_24bit_330 = { + .frequency = 330000000, + .bits = 25, + .te = 209, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = UNILARMFileProtocol}; + +/** + * UNILARM 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_unilarm_24bit_433 = { + .frequency = 433920000, + .bits = 25, + .te = 209, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = UNILARMFileProtocol}; + +/** + * SMC5326 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_smc5326_24bit_330 = { + .frequency = 330000000, + .bits = 25, + .te = 320, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = SMC5326FileProtocol}; + +/** + * SMC5326 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_smc5326_24bit_433 = { + .frequency = 433920000, + .bits = 25, + .te = 320, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = SMC5326FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_315 = { + .frequency = 315000000, + .bits = 24, + .te = 286, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 330MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_330 = { + .frequency = 330000000, + .bits = 24, + .te = 286, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_390 = { + .frequency = 390000000, + .bits = 24, + .te = 286, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + +/** + * PT2260 (Princeton) 24bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_pt2260_24bit_433 = { + .frequency = 433920000, + .bits = 24, + .te = 286, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = PT2260FileProtocol}; + /** * BF existing dump */ @@ -274,6 +363,14 @@ static const char* subbrute_protocol_names[] = { [SubBruteAttackChamberlain7bit390] = "Chamberlain 7bit 390MHz", [SubBruteAttackLinear10bit300] = "Linear 10bit 300MHz", [SubBruteAttackLinear10bit310] = "Linear 10bit 310MHz", + [SubBruteAttackUNILARM24bit330] = "UNILARM 25bit 330MHz", + [SubBruteAttackUNILARM24bit433] = "UNILARM 25bit 433MHz", + [SubBruteAttackSMC532624bit330] = "SMC5326 25bit 330MHz", + [SubBruteAttackSMC532624bit433] = "SMC5326 25bit 433MHz", + [SubBruteAttackPT226024bit315] = "PT2260 24bit 315MHz", + [SubBruteAttackPT226024bit330] = "PT2260 24bit 330MHz", + [SubBruteAttackPT226024bit390] = "PT2260 24bit 390MHz", + [SubBruteAttackPT226024bit433] = "PT2260 24bit 433MHz", [SubBruteAttackLoadFile] = "BF existing dump", [SubBruteAttackTotalCount] = "Total Count", }; @@ -311,6 +408,14 @@ const SubBruteProtocol* subbrute_protocol_registry[] = { [SubBruteAttackChamberlain7bit390] = &subbrute_protocol_chamberlain_7bit_390, [SubBruteAttackLinear10bit300] = &subbrute_protocol_linear_10bit_300, [SubBruteAttackLinear10bit310] = &subbrute_protocol_linear_10bit_310, + [SubBruteAttackUNILARM24bit330] = &subbrute_protocol_unilarm_24bit_330, + [SubBruteAttackUNILARM24bit433] = &subbrute_protocol_unilarm_24bit_433, + [SubBruteAttackSMC532624bit330] = &subbrute_protocol_smc5326_24bit_330, + [SubBruteAttackSMC532624bit433] = &subbrute_protocol_smc5326_24bit_433, + [SubBruteAttackPT226024bit315] = &subbrute_protocol_pt2260_24bit_315, + [SubBruteAttackPT226024bit330] = &subbrute_protocol_pt2260_24bit_330, + [SubBruteAttackPT226024bit390] = &subbrute_protocol_pt2260_24bit_390, + [SubBruteAttackPT226024bit433] = &subbrute_protocol_pt2260_24bit_433, [SubBruteAttackLoadFile] = &subbrute_protocol_load_file}; static const char* subbrute_protocol_file_types[] = { @@ -327,6 +432,9 @@ static const char* subbrute_protocol_file_types[] = { [MagellanFileProtocol] = "Magellan", [IntertechnoV3FileProtocol] = "Intertechno_V3", [AnsonicFileProtocol] = "Ansonic", + [SMC5326FileProtocol] = "SMC5326", + [UNILARMFileProtocol] = "SMC5326", + [PT2260FileProtocol] = "Princeton", [HoneywellFileProtocol] = "Honeywell", [UnknownFileProtocol] = "Unknown"}; @@ -338,6 +446,8 @@ static const char* subbrute_key_file_start_no_tail = static const char* subbrute_key_file_start_with_tail = "Filetype: Flipper SubGhz Key File\nVersion: 1\nFrequency: %u\nPreset: %s\nProtocol: %s\nBit: %d\nKey: %s\nTE: %d\nRepeat: %d\n"; static const char* subbrute_key_small_no_tail = "Bit: %d\nKey: %s\nRepeat: %d\n"; +//static const char* subbrute_key_small_raw = +// "Filetype: Flipper SubGhz Key File\nVersion: 1\nFrequency: %u\nPreset: %s\nProtocol: %s\nBit: %d\n"; static const char* subbrute_key_small_with_tail = "Bit: %d\nKey: %s\nTE: %d\nRepeat: %d\n"; const char* subbrute_protocol_name(SubBruteAttacks index) { @@ -416,10 +526,68 @@ void subbrute_protocol_create_candidate_for_existing_file( #endif } -void subbrute_protocol_create_candidate_for_default(FuriString* candidate, uint64_t step) { +void subbrute_protocol_create_candidate_for_default( + FuriString* candidate, + SubBruteFileProtocol file, + uint64_t step) { uint8_t p[8]; - for(int i = 0; i < 8; i++) { - p[i] = (uint8_t)(step >> 8 * (7 - i)) & 0xFF; + if(file == SMC5326FileProtocol) { + const uint8_t lut[] = {0x00, 0x02, 0x03}; // 00, 10, 11 + const uint64_t gate1 = 0x01D5; // 111010101 + //const uint8_t gate2 = 0x0175; // 101110101 + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 9; + total |= gate1; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else if(file == UNILARMFileProtocol) { + const uint8_t lut[] = {0x00, 0x02, 0x03}; // 00, 10, 11 + const uint64_t gate1 = 3 << 7; + //const uint8_t gate2 = 3 << 5; + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 9; + total |= gate1; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else if(file == PT2260FileProtocol) { + const uint8_t lut[] = {0x00, 0x01, 0x03}; // 00, 01, 11 + const uint64_t button_open = 0x03; // 11 + //const uint8_t button_lock = 0x0C; // 1100 + //const uint8_t button_stop = 0x30; // 110000 + //const uint8_t button_close = 0xC0; // 11000000 + + uint64_t total = 0; + for(size_t j = 0; j < 8; j++) { + total |= lut[step % 3] << (2 * j); + double sub_step = step / 3; + step = (uint64_t)floor(sub_step); + } + total <<= 8; + total |= button_open; + + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(total >> 8 * (7 - i)) & 0xFF; + } + } else { + for(int i = 0; i < 8; i++) { + p[i] = (uint8_t)(step >> 8 * (7 - i)) & 0xFF; + } } size_t size = sizeof(uint64_t); @@ -442,12 +610,13 @@ void subbrute_protocol_create_candidate_for_default(FuriString* candidate, uint6 void subbrute_protocol_default_payload( Stream* stream, + SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat) { FuriString* candidate = furi_string_alloc(); - subbrute_protocol_create_candidate_for_default(candidate, step); + subbrute_protocol_create_candidate_for_default(candidate, file, step); #ifdef FURI_DEBUG FURI_LOG_D( @@ -479,7 +648,7 @@ void subbrute_protocol_file_payload( Stream* stream, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat, uint8_t bit_index, uint64_t file_key, @@ -522,10 +691,10 @@ void subbrute_protocol_default_generate_file( SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat) { FuriString* candidate = furi_string_alloc(); - subbrute_protocol_create_candidate_for_default(candidate, step); + subbrute_protocol_create_candidate_for_default(candidate, file, step); #ifdef FURI_DEBUG FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); @@ -565,7 +734,7 @@ void subbrute_protocol_file_generate_file( SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat, uint8_t bit_index, uint64_t file_key, @@ -608,6 +777,16 @@ uint64_t uint64_t max_value; if(attack_type == SubBruteAttackLoadFile) { max_value = two_bytes ? 0xFFFF : 0xFF; + } else if( + attack_type == SubBruteAttackSMC532624bit330 || + attack_type == SubBruteAttackSMC532624bit433 || + attack_type == SubBruteAttackUNILARM24bit330 || + attack_type == SubBruteAttackUNILARM24bit433 || + attack_type == SubBruteAttackPT226024bit315 || + attack_type == SubBruteAttackPT226024bit330 || + attack_type == SubBruteAttackPT226024bit390 || + attack_type == SubBruteAttackPT226024bit433) { + max_value = 6561; } else { FuriString* max_value_s; max_value_s = furi_string_alloc(); diff --git a/applications/plugins/subbrute/subbrute_protocols.h b/applications/plugins/subbrute/subbrute_protocols.h index bfc6ed2a9..b0e20f0ff 100644 --- a/applications/plugins/subbrute/subbrute_protocols.h +++ b/applications/plugins/subbrute/subbrute_protocols.h @@ -19,6 +19,9 @@ typedef enum { MagellanFileProtocol, IntertechnoV3FileProtocol, AnsonicFileProtocol, + SMC5326FileProtocol, + UNILARMFileProtocol, + PT2260FileProtocol, HoneywellFileProtocol, UnknownFileProtocol, TotalFileProtocol, @@ -47,6 +50,14 @@ typedef enum { SubBruteAttackChamberlain7bit390, SubBruteAttackLinear10bit300, SubBruteAttackLinear10bit310, + SubBruteAttackUNILARM24bit330, + SubBruteAttackUNILARM24bit433, + SubBruteAttackSMC532624bit330, + SubBruteAttackSMC532624bit433, + SubBruteAttackPT226024bit315, + SubBruteAttackPT226024bit330, + SubBruteAttackPT226024bit390, + SubBruteAttackPT226024bit433, SubBruteAttackLoadFile, SubBruteAttackTotalCount, } SubBruteAttacks; @@ -54,7 +65,7 @@ typedef enum { typedef struct { uint32_t frequency; uint8_t bits; - uint8_t te; + uint32_t te; uint8_t repeat; FuriHalSubGhzPreset preset; SubBruteFileProtocol file; @@ -70,15 +81,16 @@ const char* subbrute_protocol_name(SubBruteAttacks index); void subbrute_protocol_default_payload( Stream* stream, + SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat); void subbrute_protocol_file_payload( Stream* stream, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat, uint8_t bit_index, uint64_t file_key, @@ -90,7 +102,7 @@ void subbrute_protocol_default_generate_file( SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat); void subbrute_protocol_file_generate_file( Stream* stream, @@ -99,7 +111,7 @@ void subbrute_protocol_file_generate_file( SubBruteFileProtocol file, uint64_t step, uint8_t bits, - uint8_t te, + uint32_t te, uint8_t repeat, uint8_t bit_index, uint64_t file_key, diff --git a/applications/plugins/subbrute/views/subbrute_main_view.c b/applications/plugins/subbrute/views/subbrute_main_view.c index d87d249fb..c21f2ea33 100644 --- a/applications/plugins/subbrute/views/subbrute_main_view.c +++ b/applications/plugins/subbrute/views/subbrute_main_view.c @@ -149,7 +149,7 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) { canvas_set_font(canvas, FontPrimary); canvas_draw_box(canvas, 0, 0, canvas_width(canvas), STATUS_BAR_Y_SHIFT); canvas_invert_color(canvas); - canvas_draw_str_aligned(canvas, 64, 3, AlignCenter, AlignTop, "Sub-GHz BruteForcer 3.3"); + canvas_draw_str_aligned(canvas, 64, 3, AlignCenter, AlignTop, SUBBRUTEFORCER_VER); canvas_invert_color(canvas); // Menu