diff --git a/base_pack/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c b/base_pack/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c index 1f3c61b5e1e..236976e26dd 100644 --- a/base_pack/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c +++ b/base_pack/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c @@ -8,7 +8,7 @@ char* _wifi_marauder_get_prefix_from_cmd(const char* command) { return prefix; } -bool _wifi_marauder_is_save_pcaps_enabled(WifiMarauderApp* app) { +bool _wifi_marauder_is_saving_enabled(WifiMarauderApp* app) { // If it is a script that contains a sniff function if(app->script != NULL) { if(app->script->save_pcap == WifiMarauderScriptBooleanFalse) { @@ -32,9 +32,12 @@ bool _wifi_marauder_is_save_pcaps_enabled(WifiMarauderApp* app) { if(!app->ok_to_save_pcaps) { return false; } - // If it is a sniff function + // If it is a sniff/wardrive/btwardrive/evilportal function return app->is_command && app->selected_tx_string && - strncmp("sniff", app->selected_tx_string, strlen("sniff")) == 0; + (strncmp("sniff", app->selected_tx_string, strlen("sniff")) == 0 || + strncmp("wardrive", app->selected_tx_string, strlen("wardrive")) == 0 || + strncmp("btwardrive", app->selected_tx_string, strlen("btwardrive")) == 0 || + strncmp("evilportal", app->selected_tx_string, strlen("evilportal")) == 0); } void wifi_marauder_console_output_handle_rx_data_cb(uint8_t* buf, size_t len, void* context) { @@ -118,10 +121,12 @@ void wifi_marauder_scene_console_output_on_enter(void* context) { // Get ready to send command if((app->is_command && app->selected_tx_string) || app->script) { - const char* prefix = - strlen(app->selected_tx_string) > 0 ? - _wifi_marauder_get_prefix_from_cmd(app->selected_tx_string) : // Function name - app->script->name; // Script name + char* prefix_buf = NULL; + if(strlen(app->selected_tx_string) > 0) { + prefix_buf = _wifi_marauder_get_prefix_from_cmd(app->selected_tx_string); + } + const char* prefix = prefix_buf ? prefix_buf : // Function name + app->script->name; // Script name // Create files *before* sending command // (it takes time to iterate through the directory) @@ -138,13 +143,22 @@ void wifi_marauder_scene_console_output_on_enter(void* context) { } } - // If it is a sniff function or script, open the pcap file for recording - if(_wifi_marauder_is_save_pcaps_enabled(app)) { - if(sequential_file_open( - app->storage, app->capture_file, MARAUDER_APP_FOLDER_PCAPS, prefix, "pcap")) { + // If it is a sniff/wardrive/btwardrive/evilportal function or script, open the capture file for recording + if(_wifi_marauder_is_saving_enabled(app)) { + const char* folder = NULL; + const char* extension = NULL; + if(app->script || // Scripts only support sniff functions, but selected_tx_string is empty + strncmp("sniff", app->selected_tx_string, strlen("sniff")) == 0) { + folder = MARAUDER_APP_FOLDER_PCAPS; + extension = "pcap"; + } else { + folder = MARAUDER_APP_FOLDER_DUMPS; + extension = "txt"; + } + if(sequential_file_open(app->storage, app->capture_file, folder, prefix, extension)) { app->is_writing_pcap = true; } else { - dialog_message_show_storage_error(app->dialogs, "Cannot open pcap file"); + dialog_message_show_storage_error(app->dialogs, "Cannot open capture file"); } } @@ -185,6 +199,10 @@ void wifi_marauder_scene_console_output_on_enter(void* context) { app->script_worker = wifi_marauder_script_worker_alloc(app->uart); wifi_marauder_script_worker_start(app->script_worker, app->script); } + + if(prefix_buf) { + free(prefix_buf); + } } } diff --git a/base_pack/wifi_marauder_companion/wifi_marauder_app.c b/base_pack/wifi_marauder_companion/wifi_marauder_app.c index 71137e1fc3b..01495adbd10 100644 --- a/base_pack/wifi_marauder_companion/wifi_marauder_app.c +++ b/base_pack/wifi_marauder_companion/wifi_marauder_app.c @@ -103,8 +103,12 @@ void wifi_marauder_make_app_folder(WifiMarauderApp* app) { dialog_message_show_storage_error(app->dialogs, "Cannot create\npcaps folder"); } + if(!storage_simply_mkdir(app->storage, MARAUDER_APP_FOLDER_DUMPS)) { + dialog_message_show_storage_error(app->dialogs, "Cannot create\ndumps folder"); + } + if(!storage_simply_mkdir(app->storage, MARAUDER_APP_FOLDER_LOGS)) { - dialog_message_show_storage_error(app->dialogs, "Cannot create\npcaps folder"); + dialog_message_show_storage_error(app->dialogs, "Cannot create\nlogs folder"); } if(!storage_simply_mkdir(app->storage, MARAUDER_APP_FOLDER_SCRIPTS)) { diff --git a/base_pack/wifi_marauder_companion/wifi_marauder_app_i.h b/base_pack/wifi_marauder_companion/wifi_marauder_app_i.h index ca0fa27eacb..2bbfeccb1a1 100644 --- a/base_pack/wifi_marauder_companion/wifi_marauder_app_i.h +++ b/base_pack/wifi_marauder_companion/wifi_marauder_app_i.h @@ -36,6 +36,7 @@ #define MARAUDER_APP_FOLDER EXT_PATH(MARAUDER_APP_FOLDER_USER) #define MARAUDER_APP_FOLDER_HTML MARAUDER_APP_FOLDER "/html" #define MARAUDER_APP_FOLDER_PCAPS MARAUDER_APP_FOLDER "/pcaps" +#define MARAUDER_APP_FOLDER_DUMPS MARAUDER_APP_FOLDER "/dumps" #define MARAUDER_APP_FOLDER_LOGS MARAUDER_APP_FOLDER "/logs" #define MARAUDER_APP_FOLDER_USER_PCAPS MARAUDER_APP_FOLDER_USER "/pcaps" #define MARAUDER_APP_FOLDER_USER_LOGS MARAUDER_APP_FOLDER_USER "/logs"