brute upd

This commit is contained in:
RogueMaster
2022-10-29 12:06:34 -04:00
parent 3c085436b8
commit df26857076
9 changed files with 51 additions and 33 deletions

View File

@@ -123,7 +123,8 @@ bool subbrute_worker_init_file_attack(
uint64_t step,
uint8_t load_index,
const char* file_key,
SubBruteProtocol* protocol) {
SubBruteProtocol* protocol,
uint8_t extra_repeats) {
furi_assert(instance);
if(instance->worker_running) {
@@ -139,7 +140,7 @@ bool subbrute_worker_init_file_attack(
instance->bits = protocol->bits;
instance->te = protocol->te;
instance->load_index = load_index;
instance->repeat = protocol->repeat;
instance->repeat = protocol->repeat + extra_repeats;
instance->file_key = file_key;
instance->max_value = subbrute_protocol_calc_max_value(instance->attack, instance->bits);

View File

@@ -29,7 +29,8 @@ bool subbrute_worker_init_file_attack(
uint64_t step,
uint8_t load_index,
const char* file_key,
SubBruteProtocol* protocol);
SubBruteProtocol* protocol,
uint8_t extra_repeats);
bool subbrute_worker_start(SubBruteWorker* instance);
void subbrute_worker_stop(SubBruteWorker* instance);
bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t step);

View File

@@ -37,14 +37,18 @@ void subbrute_scene_load_file_on_enter(void* context) {
load_result =
subbrute_device_load_from_file(instance->device, furi_string_get_cstr(load_path));
if(load_result == SubBruteFileResultOk) {
load_result = subbrute_device_attack_set(instance->device, SubBruteAttackLoadFile, 0);
uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
load_result = subbrute_device_attack_set(
instance->device, SubBruteAttackLoadFile, extra_repeats);
if(load_result == SubBruteFileResultOk) {
if(!subbrute_worker_init_file_attack(
instance->worker,
instance->device->key_index,
instance->device->load_index,
instance->device->file_key,
instance->device->file_protocol_info)) {
instance->device->file_protocol_info,
extra_repeats)) {
furi_crash("Invalid attack set!");
}
// Ready to run!

View File

@@ -39,12 +39,15 @@ bool subbrute_scene_load_select_on_event(void* context, SceneManagerEvent event)
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubBruteCustomEventTypeIndexSelected) {
instance->device->load_index = subbrute_main_view_get_index(instance->view_main);
uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
if(!subbrute_worker_init_file_attack(
instance->worker,
instance->device->key_index,
instance->device->load_index,
instance->device->file_key,
instance->device->file_protocol_info)) {
instance->device->file_protocol_info,
extra_repeats)) {
furi_crash("Invalid attack set!");
}
scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);

View File

@@ -52,21 +52,23 @@ bool subbrute_scene_start_on_event(void* context, SceneManagerEvent event) {
SubBruteAttacks attack = subbrute_main_view_get_index(instance->view_main);
uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
if(subbrute_device_attack_set(instance->device, attack, extra_repeats) !=
SubBruteFileResultOk ||
!subbrute_worker_init_default_attack(
if((subbrute_device_attack_set(instance->device, attack, extra_repeats) !=
SubBruteFileResultOk) ||
(!subbrute_worker_init_default_attack(
instance->worker,
attack,
instance->device->key_index,
instance->device->protocol_info,
instance->device->extra_repeats)) {
instance->device->extra_repeats))) {
furi_crash("Invalid attack set!");
}
scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
consumed = true;
} else if(event.event == SubBruteCustomEventTypeLoadFile) {
instance->device->extra_repeats = 0;
//uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
//instance->device->extra_repeats = extra_repeats;
scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadFile);
consumed = true;
}

View File

@@ -146,9 +146,10 @@ SubBruteFileResult subbrute_device_attack_set(
if(type != SubBruteAttackLoadFile) {
subbrute_device_free_protocol_info(instance);
instance->protocol_info = subbrute_protocol(type);
instance->extra_repeats = extra_repeats;
}
instance->extra_repeats = extra_repeats;
// For non-file types we didn't set SubGhzProtocolDecoderBase
instance->receiver = subghz_receiver_alloc_init(instance->environment);
subghz_receiver_set_filter(instance->receiver, SubGhzProtocolFlag_Decodable);
@@ -290,11 +291,12 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil
#endif
}
instance->decoder_result =
subghz_receiver_search_decoder_base_by_name(instance->receiver, protocol_file);
instance->decoder_result = subghz_receiver_search_decoder_base_by_name(
instance->receiver, furi_string_get_cstr(temp_str));
if(!instance->decoder_result || strcmp(protocol_file, "RAW") == 0) {
FURI_LOG_E(TAG, "RAW unsupported");
if((!instance->decoder_result) || (strcmp(protocol_file, "RAW") == 0) ||
(strcmp(protocol_file, "Unknown") == 0)) {
FURI_LOG_E(TAG, "Protocol unsupported");
result = SubBruteFileResultProtocolNotSupported;
break;
}
@@ -429,7 +431,7 @@ const char* subbrute_device_error_get_desc(SubBruteFileResult error_id) {
result = "Missing Protocol";
break;
case(SubBruteFileResultProtocolNotSupported):
result = "RAW unsupported";
result = "Protocol unsupported";
break;
case(SubBruteFileResultDynamicProtocolNotValid):
result = "Dynamic protocol unsupported";

View File

@@ -205,7 +205,7 @@ const SubBruteProtocol subbrute_protocol_linear_10bit_310 = {
* BF existing dump
*/
const SubBruteProtocol subbrute_protocol_load_file =
{0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, RAWFileProtocol};
{0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, UnknownFileProtocol};
static const char* subbrute_protocol_names[] = {
[SubBruteAttackCAME12bit303] = "CAME 12bit 303MHz",
@@ -267,7 +267,14 @@ static const char* subbrute_protocol_file_types[] = {
[ChamberlainFileProtocol] = "Cham_Code",
[LinearFileProtocol] = "Linear",
[PrincetonFileProtocol] = "Princeton",
[RAWFileProtocol] = "RAW"};
[RAWFileProtocol] = "RAW",
[BETTFileProtocol] = "BETT",
[ClemsaFileProtocol] = "Clemsa",
[DoitrandFileProtocol] = "Doitrand",
[GateTXFileProtocol] = "GateTX",
[MagellanFileProtocol] = "Magellan",
[IntertechnoV3FileProtocol] = "Intertechno_V3",
[UnknownFileProtocol] = "Unknown"};
/**
* Values to not use less memory for packet parse operations
@@ -316,7 +323,7 @@ SubBruteFileProtocol subbrute_protocol_file_protocol_name(FuriString* name) {
}
}
return RAWFileProtocol;
return UnknownFileProtocol;
}
void subbrute_protocol_default_payload(

View File

@@ -12,6 +12,13 @@ typedef enum {
LinearFileProtocol,
PrincetonFileProtocol,
RAWFileProtocol,
BETTFileProtocol,
ClemsaFileProtocol,
DoitrandFileProtocol,
GateTXFileProtocol,
MagellanFileProtocol,
IntertechnoV3FileProtocol,
UnknownFileProtocol,
TotalFileProtocol,
} SubBruteFileProtocol;

View File

@@ -200,7 +200,6 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
const uint8_t min_value = 0;
const uint8_t correct_total = SubBruteAttackTotalCount - 1;
uint8_t max_repeats = 9 - subbrute_protocol_repeats_count(instance->index);
uint8_t index = 0;
bool updated = false;
bool consumed = false;
@@ -227,14 +226,16 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
consumed = true;
} else if(event->key == InputKeyLeft && is_short) {
instance->extra_repeats = CLAMP(instance->extra_repeats - 1, max_repeats, 0);
updated = true;
consumed = true;
} else if(event->key == InputKeyRight && is_short) {
instance->extra_repeats = CLAMP(instance->extra_repeats + 1, max_repeats, 0);
updated = true;
consumed = true;
} else if(event->key == InputKeyOk && is_short) {
if(index == SubBruteAttackLoadFile) {
if(instance->index == SubBruteAttackLoadFile) {
instance->callback(SubBruteCustomEventTypeLoadFile, instance->context);
} else {
instance->callback(SubBruteCustomEventTypeMenuSelected, instance->context);
@@ -293,16 +294,6 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
void subbrute_main_view_enter(void* context) {
furi_assert(context);
SubBruteMainView* instance = context;
with_view_model(
instance->view,
SubBruteMainViewModel * model,
{
model->key_field = NULL;
model->is_select_byte = false;
},
true);
#ifdef FURI_DEBUG
FURI_LOG_D(TAG, "subbrute_main_view_enter");
@@ -368,7 +359,7 @@ void subbrute_main_view_set_index(
furi_assert(instance);
furi_assert(idx < SubBruteAttackTotalCount);
#ifdef FURI_DEBUG
FURI_LOG_I(TAG, "Set index: %d", idx);
FURI_LOG_I(TAG, "Set index: %d, IS_SELECT_BYTE: %d", idx, is_select_byte);
#endif
instance->is_select_byte = is_select_byte;
instance->key_field = key_field;