From c73c487cfe292be301355ce96b5c39835204071a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:35:49 +0100 Subject: [PATCH] BLE Spam base config support ok interaction --- applications/external/ble_spam/ble_spam.h | 1 + .../external/ble_spam/protocols/_base.h | 1 + .../external/ble_spam/protocols/continuity.c | 38 +++++++++++++++++++ .../external/ble_spam/protocols/easysetup.c | 18 +++++++++ .../external/ble_spam/protocols/fastpair.c | 12 ++++++ .../external/ble_spam/protocols/swiftpair.c | 12 ++++++ .../external/ble_spam/scenes/config.c | 17 +++++++++ 7 files changed, 99 insertions(+) diff --git a/applications/external/ble_spam/ble_spam.h b/applications/external/ble_spam/ble_spam.h index edf2c55ca..eaf06b9e1 100644 --- a/applications/external/ble_spam/ble_spam.h +++ b/applications/external/ble_spam/ble_spam.h @@ -26,6 +26,7 @@ typedef struct Attack Attack; typedef struct { Attack* attack; uint8_t byte_store[3]; + VariableItemListEnterCallback fallback_config_enter; ViewDispatcher* view_dispatcher; SceneManager* scene_manager; diff --git a/applications/external/ble_spam/protocols/_base.h b/applications/external/ble_spam/protocols/_base.h index 0b6fdacbd..6f32b9990 100644 --- a/applications/external/ble_spam/protocols/_base.h +++ b/applications/external/ble_spam/protocols/_base.h @@ -17,4 +17,5 @@ typedef struct { const char* (*get_name)(const ProtocolCfg* _cfg); void (*make_packet)(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg); void (*extra_config)(Ctx* ctx); + uint8_t (*config_count)(const ProtocolCfg* _cfg); } Protocol; diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 4233f0457..4b29683ab 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -277,11 +277,19 @@ enum { _ConfigPpExtraStart = ConfigExtraStart, ConfigPpModel, ConfigPpPrefix, + ConfigPpCOUNT, }; enum { _ConfigNaExtraStart = ConfigExtraStart, ConfigNaAction, ConfigNaFlags, + ConfigNaCOUNT, +}; +enum { + _ConfigCcExtraStart = ConfigExtraStart, + ConfigCcInfoLock, + ConfigCcInfoDevice, + ConfigCcCOUNT, }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; @@ -297,6 +305,7 @@ static void config_callback(void* _ctx, uint32_t index) { scene_manager_next_scene(ctx->scene_manager, SceneContinuityPpPrefix); break; default: + ctx->fallback_config_enter(ctx, index); break; } break; @@ -310,11 +319,24 @@ static void config_callback(void* _ctx, uint32_t index) { scene_manager_next_scene(ctx->scene_manager, SceneContinuityNaFlags); break; default: + ctx->fallback_config_enter(ctx, index); + break; + } + break; + } + case ContinuityTypeCustomCrash: { + switch(index) { + case ConfigCcInfoLock: + case ConfigCcInfoDevice: + break; + default: + ctx->fallback_config_enter(ctx, index); break; } break; } default: + ctx->fallback_config_enter(ctx, index); break; } } @@ -470,11 +492,27 @@ static void continuity_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } +static uint8_t config_counts[ContinuityTypeCOUNT] = { + [ContinuityTypeAirDrop] = 0, + [ContinuityTypeProximityPair] = ConfigPpCOUNT - ConfigExtraStart - 1, + [ContinuityTypeAirplayTarget] = 0, + [ContinuityTypeHandoff] = 0, + [ContinuityTypeTetheringSource] = 0, + [ContinuityTypeNearbyAction] = ConfigNaCOUNT - ConfigExtraStart - 1, + [ContinuityTypeNearbyInfo] = 0, + [ContinuityTypeCustomCrash] = ConfigCcCOUNT - ConfigExtraStart - 1, +}; +static uint8_t continuity_config_count(const ProtocolCfg* _cfg) { + const ContinuityCfg* cfg = &_cfg->continuity; + return config_counts[cfg->type]; +} + const Protocol protocol_continuity = { .icon = &I_apple, .get_name = continuity_get_name, .make_packet = continuity_make_packet, .extra_config = continuity_extra_config, + .config_count = continuity_config_count, }; static void pp_model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index fa0a98aa2..98a9541de 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -171,10 +171,13 @@ void easysetup_make_packet(uint8_t* out_size, uint8_t** out_packet, const Protoc enum { _ConfigBudsExtraStart = ConfigExtraStart, ConfigBudsModel, + ConfigBudsInfoVersion, + ConfigBudsCOUNT, }; enum { _ConfigWatchExtraStart = ConfigExtraStart, ConfigWatchModel, + ConfigWatchCOUNT, }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; @@ -186,7 +189,10 @@ static void config_callback(void* _ctx, uint32_t index) { case ConfigBudsModel: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupBudsModel); break; + case ConfigBudsInfoVersion: + break; default: + ctx->fallback_config_enter(ctx, index); break; } break; @@ -197,11 +203,13 @@ static void config_callback(void* _ctx, uint32_t index) { scene_manager_next_scene(ctx->scene_manager, SceneEasysetupWatchModel); break; default: + ctx->fallback_config_enter(ctx, index); break; } break; } default: + ctx->fallback_config_enter(ctx, index); break; } } @@ -297,11 +305,21 @@ static void easysetup_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } +static uint8_t config_counts[EasysetupTypeCOUNT] = { + [EasysetupTypeBuds] = ConfigBudsCOUNT - ConfigExtraStart - 1, + [EasysetupTypeWatch] = ConfigWatchCOUNT - ConfigExtraStart - 1, +}; +static uint8_t easysetup_config_count(const ProtocolCfg* _cfg) { + const EasysetupCfg* cfg = &_cfg->easysetup; + return config_counts[cfg->type]; +} + const Protocol protocol_easysetup = { .icon = &I_android, .get_name = easysetup_get_name, .make_packet = easysetup_make_packet, .extra_config = easysetup_extra_config, + .config_count = easysetup_config_count, }; static void buds_model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index 2e8f6749b..a5caf80cc 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -82,6 +82,8 @@ static void fastpair_make_packet(uint8_t* _size, uint8_t** _packet, const Protoc enum { _ConfigExtraStart = ConfigExtraStart, ConfigModel, + ConfigInfoRequire, + ConfigCOUNT, }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; @@ -89,7 +91,11 @@ static void config_callback(void* _ctx, uint32_t index) { switch(index) { case ConfigModel: scene_manager_next_scene(ctx->scene_manager, SceneFastpairModel); + break; + case ConfigInfoRequire: + break; default: + ctx->fallback_config_enter(ctx, index); break; } } @@ -139,11 +145,17 @@ static void fastpair_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } +static uint8_t fastpair_config_count(const ProtocolCfg* _cfg) { + UNUSED(_cfg); + return ConfigCOUNT; +} + const Protocol protocol_fastpair = { .icon = &I_android, .get_name = fastpair_get_name, .make_packet = fastpair_make_packet, .extra_config = fastpair_extra_config, + .config_count = fastpair_config_count, }; static void model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/swiftpair.c b/applications/external/ble_spam/protocols/swiftpair.c index d8280e598..fc21f1778 100644 --- a/applications/external/ble_spam/protocols/swiftpair.c +++ b/applications/external/ble_spam/protocols/swiftpair.c @@ -49,6 +49,8 @@ static void swiftpair_make_packet(uint8_t* _size, uint8_t** _packet, const Proto enum { _ConfigExtraStart = ConfigExtraStart, ConfigName, + ConfigInfoRequire, + ConfigCOUNT, }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; @@ -56,7 +58,11 @@ static void config_callback(void* _ctx, uint32_t index) { switch(index) { case ConfigName: scene_manager_next_scene(ctx->scene_manager, SceneSwiftpairName); + break; + case ConfigInfoRequire: + break; default: + ctx->fallback_config_enter(ctx, index); break; } } @@ -73,11 +79,17 @@ static void swiftpair_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } +static uint8_t swiftpair_config_count(const ProtocolCfg* _cfg) { + UNUSED(_cfg); + return ConfigCOUNT; +} + const Protocol protocol_swiftpair = { .icon = &I_windows, .get_name = swiftpair_get_name, .make_packet = swiftpair_make_packet, .extra_config = swiftpair_extra_config, + .config_count = swiftpair_config_count, }; static void name_callback(void* _ctx) { diff --git a/applications/external/ble_spam/scenes/config.c b/applications/external/ble_spam/scenes/config.c index afd7159af..5d1267276 100644 --- a/applications/external/ble_spam/scenes/config.c +++ b/applications/external/ble_spam/scenes/config.c @@ -8,6 +8,21 @@ static void random_mac_changed(VariableItem* item) { variable_item_set_current_value_text(item, ctx->attack->payload.random_mac ? "ON" : "OFF"); } +static void config_callback(void* _ctx, uint32_t index) { + Ctx* ctx = _ctx; + scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index); + if(ctx->attack->protocol && ctx->attack->protocol->config_count) { + uint8_t extra = ctx->attack->protocol->config_count(&ctx->attack->payload.cfg); + if(index > extra) index -= extra; + } + + switch(index) { + case ConfigRandomMac: + break; + default: + break; + } +} void scene_config_on_enter(void* _ctx) { Ctx* ctx = _ctx; VariableItem* item; @@ -20,9 +35,11 @@ void scene_config_on_enter(void* _ctx) { variable_item_set_current_value_index(item, ctx->attack->payload.random_mac); variable_item_set_current_value_text(item, ctx->attack->payload.random_mac ? "ON" : "OFF"); + variable_item_list_set_enter_callback(list, config_callback, ctx); if(!ctx->attack->protocol) { variable_item_list_add(list, "None shall escape the S I N K", 0, NULL, NULL); } else if(ctx->attack->protocol->extra_config) { + ctx->fallback_config_enter = config_callback; ctx->attack->protocol->extra_config(ctx); }