From a0597a9e6ee41e2e61050ba7e33ae6fdb76df848 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 23 Apr 2023 01:57:38 +0300 Subject: [PATCH] Fix RFID Fuzzer and iButton Fuzzer Bugs --- .../external/flipfrid/application.fam | 2 +- applications/external/flipfrid/flipfrid.c | 18 +++ applications/external/flipfrid/flipfrid.h | 2 + .../scene/flipfrid_scene_entrypoint.c | 130 +++++++--------- .../external/ibtn_fuzzer/ibtnfuzzer.c | 16 ++ .../external/ibtn_fuzzer/ibtnfuzzer.h | 2 + .../scene/ibtnfuzzer_scene_entrypoint.c | 140 ++++++++---------- 7 files changed, 159 insertions(+), 151 deletions(-) diff --git a/applications/external/flipfrid/application.fam b/applications/external/flipfrid/application.fam index 8f620f4ac..343d4f62d 100644 --- a/applications/external/flipfrid/application.fam +++ b/applications/external/flipfrid/application.fam @@ -4,7 +4,7 @@ App( apptype=FlipperAppType.EXTERNAL, entry_point="flipfrid_start", requires=["gui", "storage", "dialogs", "input", "notification"], - stack_size=1 * 1024, + stack_size=2 * 1024, order=15, fap_icon="rfid_10px.png", fap_category="Tools", diff --git a/applications/external/flipfrid/flipfrid.c b/applications/external/flipfrid/flipfrid.c index 9ddbdd42e..4608bab16 100644 --- a/applications/external/flipfrid/flipfrid.c +++ b/applications/external/flipfrid/flipfrid.c @@ -58,6 +58,16 @@ FlipFridState* flipfrid_alloc() { flipfrid->proto_name = furi_string_alloc(); flipfrid->data_str = furi_string_alloc(); + flipfrid->main_menu_items[0] = furi_string_alloc_set("Default Values"); + flipfrid->main_menu_items[1] = furi_string_alloc_set("BF Customer ID"); + flipfrid->main_menu_items[2] = furi_string_alloc_set("Load File"); + flipfrid->main_menu_items[3] = furi_string_alloc_set("Load UIDs from file"); + + flipfrid->main_menu_proto_items[0] = furi_string_alloc_set("EM4100"); + flipfrid->main_menu_proto_items[1] = furi_string_alloc_set("HIDProx"); + flipfrid->main_menu_proto_items[2] = furi_string_alloc_set("PAC/Stanley"); + flipfrid->main_menu_proto_items[3] = furi_string_alloc_set("H10301"); + flipfrid->previous_scene = NoneScene; flipfrid->current_scene = SceneEntryPoint; flipfrid->is_running = true; @@ -100,6 +110,14 @@ void flipfrid_free(FlipFridState* flipfrid) { furi_string_free(flipfrid->proto_name); furi_string_free(flipfrid->data_str); + for(uint32_t i = 0; i < 4; i++) { + furi_string_free(flipfrid->main_menu_items[i]); + } + + for(uint32_t i = 0; i < 4; i++) { + furi_string_free(flipfrid->main_menu_proto_items[i]); + } + free(flipfrid->data); free(flipfrid->payload); diff --git a/applications/external/flipfrid/flipfrid.h b/applications/external/flipfrid/flipfrid.h index e4122054b..0ee8aa320 100644 --- a/applications/external/flipfrid/flipfrid.h +++ b/applications/external/flipfrid/flipfrid.h @@ -75,6 +75,8 @@ typedef struct { FlipFridProtos proto; FuriString* attack_name; FuriString* proto_name; + FuriString* main_menu_items[4]; + FuriString* main_menu_proto_items[4]; DialogsApp* dialogs; FuriString* notification_msg; diff --git a/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c index 24c19dc4c..f4b39aa66 100644 --- a/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c +++ b/applications/external/flipfrid/scene/flipfrid_scene_entrypoint.c @@ -1,8 +1,5 @@ #include "flipfrid_scene_entrypoint.h" -FuriString* main_menu_items[4]; -FuriString* main_menu_proto_items[4]; - void flipfrid_scene_entrypoint_menu_callback( FlipFridState* context, uint32_t index, @@ -68,31 +65,14 @@ void flipfrid_scene_entrypoint_on_enter(FlipFridState* context) { menu_items[i] = furi_string_alloc(); }*/ - main_menu_items[0] = furi_string_alloc_set("Default Values"); - main_menu_items[1] = furi_string_alloc_set("BF Customer ID"); - main_menu_items[2] = furi_string_alloc_set("Load File"); - main_menu_items[3] = furi_string_alloc_set("Load UIDs from file"); - context->menu_proto_index = 0; /*for(uint32_t i = 0; i < 4; i++) { menu_proto_items[i] = furi_string_alloc(); }*/ - - main_menu_proto_items[0] = furi_string_alloc_set("EM4100"); - main_menu_proto_items[1] = furi_string_alloc_set("HIDProx"); - main_menu_proto_items[2] = furi_string_alloc_set("PAC/Stanley"); - main_menu_proto_items[3] = furi_string_alloc_set("H10301"); } void flipfrid_scene_entrypoint_on_exit(FlipFridState* context) { UNUSED(context); - for(uint32_t i = 0; i < 4; i++) { - furi_string_free(main_menu_items[i]); - } - - for(uint32_t i = 0; i < 4; i++) { - furi_string_free(main_menu_proto_items[i]); - } } void flipfrid_scene_entrypoint_on_tick(FlipFridState* context) { @@ -145,73 +125,77 @@ void flipfrid_scene_entrypoint_on_draw(Canvas* canvas, FlipFridState* context) { canvas_clear(canvas); canvas_set_color(canvas, ColorBlack); - if(main_menu_items[context->menu_index] != NULL) { - if(context->menu_index > FlipFridAttackDefaultValues) { - canvas_set_font(canvas, FontSecondary); + if(context->main_menu_items != NULL) { + if(context->main_menu_items[context->menu_index] != NULL) { + if(context->menu_index > FlipFridAttackDefaultValues) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + 24, + AlignCenter, + AlignTop, + furi_string_get_cstr(context->main_menu_items[context->menu_index - 1])); + } + + canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned( canvas, 64, - 24, + 36, AlignCenter, AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index - 1])); - } + furi_string_get_cstr(context->main_menu_items[context->menu_index])); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned( - canvas, - 64, - 36, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index])); + if(context->menu_index < FlipFridAttackLoadFileCustomUids) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + 48, + AlignCenter, + AlignTop, + furi_string_get_cstr(context->main_menu_items[context->menu_index + 1])); + } - if(context->menu_index < FlipFridAttackLoadFileCustomUids) { - canvas_set_font(canvas, FontSecondary); + if(context->menu_proto_index > EM4100) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + -12, + AlignCenter, + AlignTop, + furi_string_get_cstr( + context->main_menu_proto_items[context->menu_proto_index - 1])); + } + + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 27, 4, AlignCenter, AlignTop, "<"); + + canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned( canvas, 64, - 48, + 4, AlignCenter, AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index + 1])); - } + furi_string_get_cstr(context->main_menu_proto_items[context->menu_proto_index])); - if(context->menu_proto_index > EM4100) { - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned( - canvas, - 64, - -12, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index - 1])); - } + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 101, 4, AlignCenter, AlignTop, ">"); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 27, 4, AlignCenter, AlignTop, "<"); - - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned( - canvas, - 64, - 4, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index])); - - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 101, 4, AlignCenter, AlignTop, ">"); - - if(context->menu_proto_index < H10301) { - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned( - canvas, - 64, - -12, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index + 1])); + if(context->menu_proto_index < H10301) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + -12, + AlignCenter, + AlignTop, + furi_string_get_cstr( + context->main_menu_proto_items[context->menu_proto_index + 1])); + } } } } \ No newline at end of file diff --git a/applications/external/ibtn_fuzzer/ibtnfuzzer.c b/applications/external/ibtn_fuzzer/ibtnfuzzer.c index c5f2a5f7c..d385a22d2 100644 --- a/applications/external/ibtn_fuzzer/ibtnfuzzer.c +++ b/applications/external/ibtn_fuzzer/ibtnfuzzer.c @@ -58,6 +58,14 @@ iBtnFuzzerState* ibtnfuzzer_alloc() { ibtnfuzzer->proto_name = furi_string_alloc(); ibtnfuzzer->data_str = furi_string_alloc(); + ibtnfuzzer->main_menu_items[0] = furi_string_alloc_set("Default Values"); + ibtnfuzzer->main_menu_items[1] = furi_string_alloc_set("Load File"); + ibtnfuzzer->main_menu_items[2] = furi_string_alloc_set("Load UIDs from file"); + + ibtnfuzzer->main_menu_proto_items[0] = furi_string_alloc_set("DS1990"); + ibtnfuzzer->main_menu_proto_items[1] = furi_string_alloc_set("Metakom"); + ibtnfuzzer->main_menu_proto_items[2] = furi_string_alloc_set("Cyfral"); + ibtnfuzzer->previous_scene = NoneScene; ibtnfuzzer->current_scene = SceneEntryPoint; ibtnfuzzer->is_running = true; @@ -104,6 +112,14 @@ void ibtnfuzzer_free(iBtnFuzzerState* ibtnfuzzer) { furi_string_free(ibtnfuzzer->proto_name); furi_string_free(ibtnfuzzer->data_str); + for(uint32_t i = 0; i < 3; i++) { + furi_string_free(ibtnfuzzer->main_menu_items[i]); + } + + for(uint32_t i = 0; i < 3; i++) { + furi_string_free(ibtnfuzzer->main_menu_proto_items[i]); + } + free(ibtnfuzzer->data); free(ibtnfuzzer->payload); diff --git a/applications/external/ibtn_fuzzer/ibtnfuzzer.h b/applications/external/ibtn_fuzzer/ibtnfuzzer.h index ed42cc541..3a3a1d21f 100644 --- a/applications/external/ibtn_fuzzer/ibtnfuzzer.h +++ b/applications/external/ibtn_fuzzer/ibtnfuzzer.h @@ -73,6 +73,8 @@ typedef struct { iBtnFuzzerProtos proto; FuriString* attack_name; FuriString* proto_name; + FuriString* main_menu_items[3]; + FuriString* main_menu_proto_items[3]; DialogsApp* dialogs; FuriString* notification_msg; diff --git a/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c index 3ea7e49e6..1dd239c3b 100644 --- a/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c +++ b/applications/external/ibtn_fuzzer/scene/ibtnfuzzer_scene_entrypoint.c @@ -1,8 +1,5 @@ #include "ibtnfuzzer_scene_entrypoint.h" -FuriString* main_menu_items[3]; -FuriString* main_menu_proto_items[3]; - void ibtnfuzzer_scene_entrypoint_menu_callback( iBtnFuzzerState* context, uint32_t index, @@ -61,30 +58,14 @@ void ibtnfuzzer_scene_entrypoint_on_enter(iBtnFuzzerState* context) { menu_items[i] = furi_string_alloc(); }*/ - main_menu_items[0] = furi_string_alloc_set("Default Values"); - main_menu_items[1] = furi_string_alloc_set("Load File"); - main_menu_items[2] = furi_string_alloc_set("Load UIDs from file"); - context->menu_proto_index = 0; /*for(uint32_t i = 0; i < 4; i++) { menu_proto_items[i] = furi_string_alloc(); }*/ - - main_menu_proto_items[0] = furi_string_alloc_set("DS1990"); - main_menu_proto_items[1] = furi_string_alloc_set("Metakom"); - main_menu_proto_items[2] = furi_string_alloc_set("Cyfral"); } void ibtnfuzzer_scene_entrypoint_on_exit(iBtnFuzzerState* context) { context->enter_rerun = false; - - for(uint32_t i = 0; i < 3; i++) { - furi_string_free(main_menu_items[i]); - } - - for(uint32_t i = 0; i < 3; i++) { - furi_string_free(main_menu_proto_items[i]); - } } void ibtnfuzzer_scene_entrypoint_on_tick(iBtnFuzzerState* context) { @@ -142,74 +123,79 @@ void ibtnfuzzer_scene_entrypoint_on_draw(Canvas* canvas, iBtnFuzzerState* contex canvas_clear(canvas); canvas_set_color(canvas, ColorBlack); - if(main_menu_items[context->menu_index] != NULL) { - if(context->menu_index > iBtnFuzzerAttackDefaultValues) { - canvas_set_font(canvas, FontSecondary); + if(context->main_menu_items != NULL) { + if(context->main_menu_items[context->menu_index] != NULL) { + if(context->menu_index > iBtnFuzzerAttackDefaultValues) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + 24, + AlignCenter, + AlignTop, + furi_string_get_cstr(context->main_menu_items[context->menu_index - 1])); + } + + canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned( canvas, 64, - 24, + 36, AlignCenter, AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index - 1])); - } + furi_string_get_cstr(context->main_menu_items[context->menu_index])); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned( - canvas, - 64, - 36, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index])); + if(context->menu_index < iBtnFuzzerAttackLoadFileCustomUids) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + 48, + AlignCenter, + AlignTop, + furi_string_get_cstr(context->main_menu_items[context->menu_index + 1])); + } - if(context->menu_index < iBtnFuzzerAttackLoadFileCustomUids) { - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned( - canvas, - 64, - 48, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_items[context->menu_index + 1])); - } + if(context->menu_proto_index > DS1990) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + -12, + AlignCenter, + AlignTop, + furi_string_get_cstr( + context->main_menu_proto_items[context->menu_proto_index - 1])); + } - if(context->menu_proto_index > DS1990) { - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned( - canvas, - 64, - -12, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index - 1])); - } + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 27, 4, AlignCenter, AlignTop, "<"); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 27, 4, AlignCenter, AlignTop, "<"); + canvas_set_font(canvas, FontPrimary); + if(context->main_menu_proto_items[context->menu_proto_index] != NULL) { + canvas_draw_str_aligned( + canvas, + 64, + 4, + AlignCenter, + AlignTop, + furi_string_get_cstr( + context->main_menu_proto_items[context->menu_proto_index])); + } + canvas_set_font(canvas, FontPrimary); + canvas_draw_str_aligned(canvas, 101, 4, AlignCenter, AlignTop, ">"); - canvas_set_font(canvas, FontPrimary); - if(main_menu_proto_items[context->menu_proto_index] != NULL) { - canvas_draw_str_aligned( - canvas, - 64, - 4, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index])); - } - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 101, 4, AlignCenter, AlignTop, ">"); - - if(context->menu_proto_index < Cyfral) { - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned( - canvas, - 64, - -12, - AlignCenter, - AlignTop, - furi_string_get_cstr(main_menu_proto_items[context->menu_proto_index + 1])); + if(context->menu_proto_index < Cyfral) { + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned( + canvas, + 64, + -12, + AlignCenter, + AlignTop, + furi_string_get_cstr( + context->main_menu_proto_items[context->menu_proto_index + 1])); + } } } } \ No newline at end of file