From 1398dbe00d41d701ccd0a02e6cf1b256167f7548 Mon Sep 17 00:00:00 2001 From: Just Call Me Koko Date: Wed, 23 Jul 2025 18:51:25 -0400 Subject: [PATCH] Deauth with evil portal --- esp32_marauder/MenuFunctions.cpp | 5 +- esp32_marauder/WiFiScan.cpp | 11 ++++ esp32_marauder/WiFiScan.h | 1 + esp32_marauder/settings.cpp | 103 +++++++++++++++++++------------ esp32_marauder/settings.h | 2 +- 5 files changed, 81 insertions(+), 41 deletions(-) diff --git a/esp32_marauder/MenuFunctions.cpp b/esp32_marauder/MenuFunctions.cpp index 08ea1cc..09570e2 100644 --- a/esp32_marauder/MenuFunctions.cpp +++ b/esp32_marauder/MenuFunctions.cpp @@ -1540,7 +1540,7 @@ void MenuFunctions::updateStatusBar() } // Force PMKID stuff - if (wifi_scan_obj.force_pmkid) { + if ((wifi_scan_obj.force_pmkid) || (wifi_scan_obj.ep_deauth)) { #ifdef HAS_FULL_SCREEN display_obj.tft.drawXBitmap(170 - (16 * 2), 0, @@ -1732,7 +1732,7 @@ void MenuFunctions::drawStatusBar() } // Force PMKID stuff - if (wifi_scan_obj.force_pmkid) { + if ((wifi_scan_obj.force_pmkid) || (wifi_scan_obj.ep_deauth)) { #ifdef HAS_FULL_SCREEN display_obj.tft.drawXBitmap(170 - (16 * 2), 0, @@ -3140,6 +3140,7 @@ void MenuFunctions::RunSetup() wifi_scan_obj.force_pmkid = settings_obj.loadSetting(text_table4[5]); wifi_scan_obj.force_probe = settings_obj.loadSetting(text_table4[6]); wifi_scan_obj.save_pcap = settings_obj.loadSetting(text_table4[7]); + wifi_scan_obj.ep_deauth = settings_obj.loadSetting("EPDeauth"); }, settings_obj.loadSetting(settings_obj.setting_index_to_name(i))); } diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index ffa85a4..c4c934a 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -855,6 +855,7 @@ void WiFiScan::initWiFi(uint8_t scan_mode) { this->force_pmkid = settings_obj.loadSetting(text_table4[5]); this->force_probe = settings_obj.loadSetting(text_table4[6]); this->save_pcap = settings_obj.loadSetting(text_table4[7]); + this->ep_deauth = settings_obj.loadSetting("EPDeauth"); //Serial.println(F("Initialization complete")); } } @@ -7575,6 +7576,16 @@ void WiFiScan::main(uint32_t currentTime) } } else if (currentScanMode == WIFI_SCAN_EVIL_PORTAL) { + if (currentTime - initTime >= this->channel_hop_delay * HOP_DELAY) { + initTime = millis(); + if (this->ep_deauth) { + for (int i = 0; i < access_points->size(); i++) { + if (access_points->get(i).selected) { + this->sendDeauthFrame(access_points->get(i).bssid, access_points->get(i).channel); + } + } + } + } evil_portal_obj.main(currentScanMode); } else if (currentScanMode == WIFI_PACKET_MONITOR) diff --git a/esp32_marauder/WiFiScan.h b/esp32_marauder/WiFiScan.h index aa3680a..efd389f 100644 --- a/esp32_marauder/WiFiScan.h +++ b/esp32_marauder/WiFiScan.h @@ -500,6 +500,7 @@ class WiFiScan bool force_pmkid = false; bool force_probe = false; bool save_pcap = false; + bool ep_deauth = false; String analyzer_name_string = ""; diff --git a/esp32_marauder/settings.cpp b/esp32_marauder/settings.cpp index 83bc125..deab9dd 100644 --- a/esp32_marauder/settings.cpp +++ b/esp32_marauder/settings.cpp @@ -91,7 +91,7 @@ bool Settings::loadSetting(String key) { DynamicJsonDocument json(1024); // ArduinoJson v6 if (deserializeJson(json, this->json_settings_string)) { - Serial.println("\nCould not parse json"); + Serial.println("Could not parse json to load"); } for (int i = 0; i < json["Settings"].size(); i++) { @@ -99,6 +99,10 @@ bool Settings::loadSetting(String key) { return json["Settings"][i]["value"]; } + Serial.println("Did not find setting named " + (String)key + ". Creating..."); + if (this->createDefaultSettings(SPIFFS, true, json["Settings"].size(), "bool", key)) + return true; + return false; } @@ -239,7 +243,7 @@ void Settings::printJsonSettings(String json_string) { } } -bool Settings::createDefaultSettings(fs::FS &fs) { +bool Settings::createDefaultSettings(fs::FS &fs, bool spec, uint8_t index, String typeStr, String name) { Serial.println(F("Creating default settings file: settings.json")); File settingsFile = fs.open("/settings.json", FILE_WRITE); @@ -249,51 +253,74 @@ bool Settings::createDefaultSettings(fs::FS &fs) { return false; } - DynamicJsonDocument jsonBuffer(1024); String settings_string; - //jsonBuffer["Settings"][0]["name"] = "Channel"; - //jsonBuffer["Settings"][0]["type"] = "uint8_t"; - //jsonBuffer["Settings"][0]["value"] = 11; - //jsonBuffer["Settings"][0]["range"]["min"] = 1; - //jsonBuffer["Settings"][0]["range"]["max"] = 14; + if (!spec) { + DynamicJsonDocument jsonBuffer(1024); - //jsonBuffer["Settings"][1]["name"] = "Channel Hop Delay"; - //jsonBuffer["Settings"][1]["type"] = "int"; - //jsonBuffer["Settings"][1]["value"] = 1; - //jsonBuffer["Settings"][1]["range"]["min"] = 1; - //jsonBuffer["Settings"][1]["range"]["max"] = 10; + jsonBuffer["Settings"][0]["name"] = "ForcePMKID"; + jsonBuffer["Settings"][0]["type"] = "bool"; + jsonBuffer["Settings"][0]["value"] = false; + jsonBuffer["Settings"][0]["range"]["min"] = false; + jsonBuffer["Settings"][0]["range"]["max"] = true; - jsonBuffer["Settings"][0]["name"] = "ForcePMKID"; - jsonBuffer["Settings"][0]["type"] = "bool"; - jsonBuffer["Settings"][0]["value"] = true; - jsonBuffer["Settings"][0]["range"]["min"] = false; - jsonBuffer["Settings"][0]["range"]["max"] = true; + jsonBuffer["Settings"][1]["name"] = "ForceProbe"; + jsonBuffer["Settings"][1]["type"] = "bool"; + jsonBuffer["Settings"][1]["value"] = false; + jsonBuffer["Settings"][1]["range"]["min"] = false; + jsonBuffer["Settings"][1]["range"]["max"] = true; - jsonBuffer["Settings"][1]["name"] = "ForceProbe"; - jsonBuffer["Settings"][1]["type"] = "bool"; - jsonBuffer["Settings"][1]["value"] = true; - jsonBuffer["Settings"][1]["range"]["min"] = false; - jsonBuffer["Settings"][1]["range"]["max"] = true; + jsonBuffer["Settings"][2]["name"] = "SavePCAP"; + jsonBuffer["Settings"][2]["type"] = "bool"; + jsonBuffer["Settings"][2]["value"] = true; + jsonBuffer["Settings"][2]["range"]["min"] = false; + jsonBuffer["Settings"][2]["range"]["max"] = true; - jsonBuffer["Settings"][2]["name"] = "SavePCAP"; - jsonBuffer["Settings"][2]["type"] = "bool"; - jsonBuffer["Settings"][2]["value"] = true; - jsonBuffer["Settings"][2]["range"]["min"] = false; - jsonBuffer["Settings"][2]["range"]["max"] = true; + jsonBuffer["Settings"][3]["name"] = "EnableLED"; + jsonBuffer["Settings"][3]["type"] = "bool"; + jsonBuffer["Settings"][3]["value"] = true; + jsonBuffer["Settings"][3]["range"]["min"] = false; + jsonBuffer["Settings"][3]["range"]["max"] = true; - jsonBuffer["Settings"][3]["name"] = "EnableLED"; - jsonBuffer["Settings"][3]["type"] = "bool"; - jsonBuffer["Settings"][3]["value"] = true; - jsonBuffer["Settings"][3]["range"]["min"] = false; - jsonBuffer["Settings"][3]["range"]["max"] = true; + jsonBuffer["Settings"][4]["name"] = "EPDeauth"; + jsonBuffer["Settings"][4]["type"] = "bool"; + jsonBuffer["Settings"][4]["value"] = false; + jsonBuffer["Settings"][4]["range"]["min"] = false; + jsonBuffer["Settings"][4]["range"]["max"] = true; - //jsonBuffer.printTo(settingsFile); - if (serializeJson(jsonBuffer, settingsFile) == 0) { - Serial.println(F("Failed to write to file")); + //jsonBuffer.printTo(settingsFile); + if (serializeJson(jsonBuffer, settingsFile) == 0) { + Serial.println(F("Failed to write to file")); + } + if (serializeJson(jsonBuffer, settings_string) == 0) { + Serial.println(F("Failed to write to string")); + } } - if (serializeJson(jsonBuffer, settings_string) == 0) { - Serial.println(F("Failed to write to string")); + + else { + DynamicJsonDocument json(1024); // ArduinoJson v6 + + if (deserializeJson(json, this->json_settings_string)) { + Serial.println("Could not parse json to create new setting"); + return false; + } + + if (typeStr == "bool") { + Serial.println("Creating bool setting..."); + json["Settings"][index]["name"] = name; + json["Settings"][index]["type"] = typeStr; + json["Settings"][index]["value"] = false; + json["Settings"][index]["range"]["min"] = false; + json["Settings"][index]["range"]["max"] = true; + + if (serializeJson(json, settings_string) == 0) { + Serial.println("Failed to write to string"); + } + + if (serializeJson(json, settingsFile) == 0) { + Serial.println("Failed to write to file"); + } + } } // Close the file diff --git a/esp32_marauder/settings.h b/esp32_marauder/settings.h index c85b675..1800e69 100644 --- a/esp32_marauder/settings.h +++ b/esp32_marauder/settings.h @@ -49,7 +49,7 @@ class Settings { //uint8_t loadSetting(String key); String getSettingsString(); - bool createDefaultSettings(fs::FS &fs); + bool createDefaultSettings(fs::FS &fs, bool spec = false, uint8_t index = 0, String typeStr = "bool", String name = ""); void printJsonSettings(String json_string); void main(uint32_t currentTime); };