BLE Spam base config support ok interaction

This commit is contained in:
Willy-JL
2023-10-21 06:35:49 +01:00
parent 9db35bd479
commit c73c487cfe
7 changed files with 99 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);
}