wifi marauder app update

by @0xchocolate / with some changes applied
This commit is contained in:
MX 2022-08-17 01:46:40 +03:00
parent a928cb6ed7
commit 077898f068
No known key found for this signature in database
GPG Key ID: 6C4C311DFD4B4AB5
5 changed files with 162 additions and 48 deletions

View File

@ -32,6 +32,18 @@ void wifi_marauder_scene_console_output_on_enter(void* context) {
if(app->is_command) {
string_reset(app->text_box_store);
app->text_box_store_strlen = 0;
if(0 == strncmp("help", app->selected_tx_string, strlen("help"))) {
const char* help_msg =
"For app support/feedback,\nreach out to me:\n@cococode#6011 (discord)\n0xchocolate (github)\n";
string_cat_str(app->text_box_store, help_msg);
app->text_box_store_strlen += strlen(help_msg);
}
if(app->show_stopscan_tip) {
const char* help_msg = "Press BACK to send stopscan\n";
string_cat_str(app->text_box_store, help_msg);
app->text_box_store_strlen += strlen(help_msg);
}
} else { // "View Log" menu action
text_box_set_text(app->text_box, string_get_cstr(app->text_box_store));
}

View File

@ -1,67 +1,135 @@
#include "../wifi_marauder_app_i.h"
#define NUM_MENU_ITEMS (29)
// For each command, define whether additional arguments are needed
// (enabling text input to fill them out), and whether the console
// text box should focus at the start of the output or the end
#define INPUT_ARGS (true)
#define NO_ARGS (false)
#define FOCUS_CONSOLE_START (true)
#define FOCUS_CONSOLE_END (false)
struct WifiMarauderItem {
const char* item_string;
bool needs_keyboard;
bool focus_console_start;
};
typedef enum { NO_ARGS = 0, INPUT_ARGS, TOGGLE_ARGS } InputArgs;
const struct WifiMarauderItem items[NUM_MENU_ITEMS] = {
{"View Log (start)", NO_ARGS, FOCUS_CONSOLE_START},
{"View Log (end)", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t beacon -l", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t beacon -r", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t beacon -a", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t deauth", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t probe", NO_ARGS, FOCUS_CONSOLE_END},
{"attack -t rickroll", NO_ARGS, FOCUS_CONSOLE_END},
{"channel", NO_ARGS, FOCUS_CONSOLE_END},
{"channel -s", INPUT_ARGS, FOCUS_CONSOLE_END},
{"clearlist -a", NO_ARGS, FOCUS_CONSOLE_END},
{"clearlist -s", NO_ARGS, FOCUS_CONSOLE_END},
{"help", NO_ARGS, FOCUS_CONSOLE_START},
{"list -a", NO_ARGS, FOCUS_CONSOLE_START},
{"list -s", NO_ARGS, FOCUS_CONSOLE_START},
{"reboot", NO_ARGS, FOCUS_CONSOLE_END},
{"scanap", NO_ARGS, FOCUS_CONSOLE_END},
{"select -a", INPUT_ARGS, FOCUS_CONSOLE_END},
{"select -s", INPUT_ARGS, FOCUS_CONSOLE_END},
{"sniffbeacon", NO_ARGS, FOCUS_CONSOLE_END},
{"sniffdeauth", NO_ARGS, FOCUS_CONSOLE_END},
{"sniffesp", NO_ARGS, FOCUS_CONSOLE_END},
{"sniffpmkid", NO_ARGS, FOCUS_CONSOLE_END},
{"sniffpmkid -c", INPUT_ARGS, FOCUS_CONSOLE_END},
{"sniffpwn", NO_ARGS, FOCUS_CONSOLE_END},
{"ssid -a -g", INPUT_ARGS, FOCUS_CONSOLE_END},
{"ssid -a -n", INPUT_ARGS, FOCUS_CONSOLE_END},
{"ssid -r", INPUT_ARGS, FOCUS_CONSOLE_END},
{"update -w", NO_ARGS, FOCUS_CONSOLE_END},
typedef enum { FOCUS_CONSOLE_END = 0, FOCUS_CONSOLE_START, FOCUS_CONSOLE_TOGGLE } FocusConsole;
#define SHOW_STOPSCAN_TIP (true)
#define NO_TIP (false)
#define MAX_OPTIONS (6)
typedef struct {
const char* item_string;
const char* options_menu[MAX_OPTIONS];
int num_options_menu;
const char* actual_commands[MAX_OPTIONS];
InputArgs needs_keyboard;
FocusConsole focus_console;
bool show_stopscan_tip;
} WifiMarauderItem;
// NUM_MENU_ITEMS defined in wifi_marauder_app_i.h - if you add an entry here, increment it!
const WifiMarauderItem items[NUM_MENU_ITEMS] = {
{"View Log from", {"start", "end"}, 2, {}, NO_ARGS, FOCUS_CONSOLE_TOGGLE, NO_TIP},
{"Scan AP", {""}, 1, {"scanap"}, NO_ARGS, FOCUS_CONSOLE_END, SHOW_STOPSCAN_TIP},
{"SSID",
{"add random", "add name", "remove"},
3,
{"ssid -a -g", "ssid -a -n", "ssid -r"},
INPUT_ARGS,
FOCUS_CONSOLE_START,
NO_TIP},
{"List", {"ap", "ssid"}, 2, {"list -a", "list -s"}, NO_ARGS, FOCUS_CONSOLE_START, NO_TIP},
{"Select", {"ap", "ssid"}, 2, {"select -a", "select -s"}, INPUT_ARGS, FOCUS_CONSOLE_END, NO_TIP},
{"Clear List",
{"ap", "ssid"},
2,
{"clearlist -a", "clearlist -s"},
NO_ARGS,
FOCUS_CONSOLE_END,
NO_TIP},
{"Attack",
{"deauth", "probe", "rickroll"},
3,
{"attack -t deauth", "attack -t probe", "attack -t rickroll"},
NO_ARGS,
FOCUS_CONSOLE_END,
SHOW_STOPSCAN_TIP},
{"Beacon Spam",
{"ap list", "ssid list", "random"},
3,
{"attack -t beacon -a", "attack -t beacon -l", "attack -t beacon -r"},
NO_ARGS,
FOCUS_CONSOLE_END,
SHOW_STOPSCAN_TIP},
{"Sniff",
{"beacon", "deauth", "esp", "pmkid", "pwn"},
5,
{"sniffbeacon", "sniffdeauth", "sniffesp", "sniffpmkid", "sniffpwn"},
NO_ARGS,
FOCUS_CONSOLE_END,
SHOW_STOPSCAN_TIP},
{"Sniff PMKID on channel",
{""},
1,
{"sniffpmkid -c"},
INPUT_ARGS,
FOCUS_CONSOLE_END,
SHOW_STOPSCAN_TIP},
{"Channel",
{"get", "set"},
2,
{"channel", "channel -s"},
TOGGLE_ARGS,
FOCUS_CONSOLE_END,
NO_TIP},
{"Settings",
{"display", "restore", "ForcePMKID", "ForceProbe", "SavePCAP", "other"},
6,
{"settings",
"settings -r",
"settings -s ForcePMKID enable",
"settings -s ForceProbe enable",
"settings -s SavePCAP enable",
"settings -s"},
TOGGLE_ARGS,
FOCUS_CONSOLE_START,
NO_TIP},
{"Update", {""}, 1, {"update -w"}, NO_ARGS, FOCUS_CONSOLE_END, NO_TIP},
{"Reboot", {""}, 1, {"reboot"}, NO_ARGS, FOCUS_CONSOLE_END, NO_TIP},
{"Help", {""}, 1, {"help"}, NO_ARGS, FOCUS_CONSOLE_START, SHOW_STOPSCAN_TIP},
};
static void wifi_marauder_scene_start_var_list_enter_callback(void* context, uint32_t index) {
furi_assert(context);
WifiMarauderApp* app = context;
app->selected_tx_string = items[index].item_string;
app->is_command = (2 <= index);
if(app->selected_option_index[index] < items[index].num_options_menu) {
app->selected_tx_string = items[index].actual_commands[app->selected_option_index[index]];
}
app->is_command = (1 <= index);
app->is_custom_tx_string = false;
app->selected_menu_index = index;
app->focus_console_start = items[index].focus_console_start;
if(items[index].needs_keyboard) {
app->focus_console_start = (items[index].focus_console == FOCUS_CONSOLE_TOGGLE) ?
(app->selected_option_index[index] == 0) :
items[index].focus_console;
app->show_stopscan_tip = items[index].show_stopscan_tip;
bool needs_keyboard = (items[index].needs_keyboard == TOGGLE_ARGS) ?
(app->selected_option_index[index] != 0) :
items[index].needs_keyboard;
if(needs_keyboard) {
view_dispatcher_send_custom_event(app->view_dispatcher, WifiMarauderEventStartKeyboard);
} else {
view_dispatcher_send_custom_event(app->view_dispatcher, WifiMarauderEventStartConsole);
}
}
static void wifi_marauder_scene_start_var_list_change_callback(VariableItem* item) {
furi_assert(item);
WifiMarauderApp* app = variable_item_get_context(item);
furi_assert(app);
const WifiMarauderItem* menu_item = &items[app->selected_menu_index];
uint8_t item_index = variable_item_get_current_value_index(item);
furi_assert(item_index < menu_item->num_options_menu);
variable_item_set_current_value_text(item, menu_item->options_menu[item_index]);
app->selected_option_index[app->selected_menu_index] = item_index;
}
void wifi_marauder_scene_start_on_enter(void* context) {
WifiMarauderApp* app = context;
VariableItemList* var_item_list = app->var_item_list;
@ -69,9 +137,19 @@ void wifi_marauder_scene_start_on_enter(void* context) {
variable_item_list_set_enter_callback(
var_item_list, wifi_marauder_scene_start_var_list_enter_callback, app);
// TODO: organize menu
VariableItem* item;
for(int i = 0; i < NUM_MENU_ITEMS; ++i) {
variable_item_list_add(var_item_list, items[i].item_string, 0, NULL, NULL);
item = variable_item_list_add(
var_item_list,
items[i].item_string,
items[i].num_options_menu,
wifi_marauder_scene_start_var_list_change_callback,
app);
if(items[i].num_options_menu) {
variable_item_set_current_value_index(item, app->selected_option_index[i]);
variable_item_set_current_value_text(
item, items[i].options_menu[app->selected_option_index[i]]);
}
}
variable_item_list_set_selected_item(
@ -96,6 +174,9 @@ bool wifi_marauder_scene_start_on_event(void* context, SceneManagerEvent event)
scene_manager_next_scene(app->scene_manager, WifiMarauderAppViewConsoleOutput);
}
consumed = true;
} else if(event.type == SceneManagerEventTypeTick) {
app->selected_menu_index = variable_item_list_get_selected_item_index(app->var_item_list);
consumed = true;
}
return consumed;

View File

@ -24,7 +24,20 @@ void wifi_marauder_scene_text_input_on_enter(void* context) {
// Setup view
TextInput* text_input = app->text_input;
text_input_set_header_text(text_input, "Add command arguments");
// Add help message to header
if(0 == strncmp("ssid -a -g", app->selected_tx_string, strlen("ssid -a -g"))) {
text_input_set_header_text(text_input, "Enter # SSIDs to generate");
} else if(0 == strncmp("ssid -a -n", app->selected_tx_string, strlen("ssid -a -n"))) {
text_input_set_header_text(text_input, "Enter SSID name to add");
} else if(0 == strncmp("ssid -r", app->selected_tx_string, strlen("ssid -r"))) {
text_input_set_header_text(text_input, "Remove target from SSID list");
} else if(0 == strncmp("select -a", app->selected_tx_string, strlen("select -a"))) {
text_input_set_header_text(text_input, "Add target from AP list");
} else if(0 == strncmp("select -s", app->selected_tx_string, strlen("select -s"))) {
text_input_set_header_text(text_input, "Add target from SSID list");
} else {
text_input_set_header_text(text_input, "Add command arguments");
}
text_input_set_result_callback(
text_input,
wifi_marauder_scene_text_input_callback,

View File

@ -46,6 +46,10 @@ WifiMarauderApp* wifi_marauder_app_alloc() {
WifiMarauderAppViewVarItemList,
variable_item_list_get_view(app->var_item_list));
for(int i = 0; i < NUM_MENU_ITEMS; ++i) {
app->selected_option_index[i] = 0;
}
app->text_box = text_box_alloc();
view_dispatcher_add_view(
app->view_dispatcher, WifiMarauderAppViewConsoleOutput, text_box_get_view(app->text_box));

View File

@ -12,6 +12,8 @@
#include <gui/modules/text_input.h>
#include <gui/modules/variable_item_list.h>
#define NUM_MENU_ITEMS (15)
#define WIFI_MARAUDER_TEXT_BOX_STORE_SIZE (4096)
#define WIFI_MARAUDER_TEXT_INPUT_STORE_SIZE (512)
@ -31,10 +33,12 @@ struct WifiMarauderApp {
WifiMarauderUart* uart;
int selected_menu_index;
int selected_option_index[NUM_MENU_ITEMS];
const char* selected_tx_string;
bool is_command;
bool is_custom_tx_string;
bool focus_console_start;
bool show_stopscan_tip;
};
// Supported commands: