From 30893adaa5a62766c801b03c7661d7089f98c17d Mon Sep 17 00:00:00 2001 From: Just Call Me Koko Date: Tue, 25 Nov 2025 17:46:14 -0500 Subject: [PATCH] Bring bluetooth to ESP32-C5 --- esp32_marauder/CommandLine.cpp | 100 +-- esp32_marauder/EvilPortal.cpp | 69 +- esp32_marauder/MenuFunctions.cpp | 20 +- esp32_marauder/SDInterface.cpp | 10 +- esp32_marauder/WiFiScan.cpp | 1148 ++++++++++++++++++------------ esp32_marauder/WiFiScan.h | 2 +- esp32_marauder/configs.h | 6 +- 7 files changed, 798 insertions(+), 557 deletions(-) diff --git a/esp32_marauder/CommandLine.cpp b/esp32_marauder/CommandLine.cpp index 9c3b9d7..0813361 100644 --- a/esp32_marauder/CommandLine.cpp +++ b/esp32_marauder/CommandLine.cpp @@ -308,11 +308,11 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.StartScan(WIFI_SCAN_OFF); if(old_scan_mode == WIFI_SCAN_GPS_NMEA) - Serial.println("END OF NMEA STREAM"); + Serial.println(F("END OF NMEA STREAM")); else if(old_scan_mode == WIFI_SCAN_GPS_DATA) - Serial.println("Stopping GPS data updates"); + Serial.println(F("Stopping GPS data updates")); else - Serial.println("Stopping WiFi tran/recv"); + Serial.println(F("Stopping WiFi tran/recv")); // If we don't do this, the text and button coordinates will be off #ifdef HAS_SCREEN @@ -375,7 +375,7 @@ void CommandLine::runCommand(String input) { Serial.println(gps_obj.getNmeaNotparsed()); } else - Serial.println("You did not provide a valid argument"); + Serial.println(F("You did not provide a valid argument")); } else if(nmea_arg != -1){ String nmea_type = cmd_args.get(nmea_arg + 1); @@ -391,7 +391,7 @@ void CommandLine::runCommand(String input) { Serial.println("GPS Output Type Set To: " + nmea_type); } else - Serial.println("You did not provide a valid argument"); + Serial.println(F("You did not provide a valid argument")); } else if (track_arg != -1) { wifi_scan_obj.currentScanMode = GPS_TRACKER; @@ -401,9 +401,9 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.StartScan(GPS_TRACKER, TFT_CYAN); } else if(cmd_args.size()>1) - Serial.println("You did not provide a valid flag"); + Serial.println(F("You did not provide a valid flag")); else - Serial.println("You did not provide an argument"); + Serial.println(F("You did not provide an argument")); } #endif } @@ -413,7 +413,7 @@ void CommandLine::runCommand(String input) { #ifdef HAS_SCREEN menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu); #endif - Serial.println("NMEA STREAM FOLLOWS"); + Serial.println(F("NMEA STREAM FOLLOWS")); wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_NMEA; wifi_scan_obj.StartScan(WIFI_SCAN_GPS_NMEA, TFT_CYAN); } @@ -444,7 +444,7 @@ void CommandLine::runCommand(String input) { } } #else - Serial.println("This hardware does not support neopixel"); + Serial.println(F("This hardware does not support neopixel")); #endif } // ls command @@ -453,9 +453,9 @@ void CommandLine::runCommand(String input) { if (cmd_args.size() > 1) sd_obj.listDir(cmd_args.get(1)); else - Serial.println("You did not provide a dir to list"); + Serial.println(F("You did not provide a dir to list")); #else - Serial.println("SD support disabled, cannot use command"); + Serial.println(F("SD support disabled, cannot use command")); return; #endif } @@ -524,7 +524,7 @@ void CommandLine::runCommand(String input) { else if (da_sw != -1) result = settings_obj.saveSetting(setting_name, false); else { - Serial.println("You did not properly enable/disable this setting."); + Serial.println(F("You did not properly enable/disable this setting.")); return; } @@ -536,7 +536,7 @@ void CommandLine::runCommand(String input) { } else if (cmd_args.get(0) == REBOOT_CMD) { - Serial.println("Rebooting..."); + Serial.println(F("Rebooting...")); ESP.restart(); } @@ -587,9 +587,9 @@ void CommandLine::runCommand(String input) { } } else - Serial.println("GPS Module not detected"); + Serial.println(F("GPS Module not detected")); #else - Serial.println("GPS not supported"); + Serial.println(F("GPS not supported")); #endif } // Karma @@ -597,14 +597,14 @@ void CommandLine::runCommand(String input) { int pr_sw = this->argSearch(&cmd_args, "-p"); if (pr_sw == -1) { - Serial.println("You did not provide a target index"); + Serial.println(F("You did not provide a target index")); return; } int pr_index = cmd_args.get(pr_sw + 1).toInt(); if ((pr_index < 0) || (pr_index > probe_req_ssids->size() - 1)) { - Serial.println("The provided index was not in range"); + Serial.println(F("The provided index was not in range")); return; } @@ -618,7 +618,7 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.setMac(); } else { - Serial.println("Unable to set AP ESSID"); + Serial.println(F("Unable to set AP ESSID")); return; } @@ -839,14 +839,14 @@ void CommandLine::runCommand(String input) { int ap_sw = this->argSearch(&cmd_args, "-a"); // APs if (ap_sw == -1) { - Serial.println("You did not provide a target index"); + Serial.println(F("You did not provide a target index")); return; } int ap_index = cmd_args.get(ap_sw + 1).toInt(); if ((ap_index < 0) || (ap_index > access_points->size() - 1)) { - Serial.println("The provided index was not in range"); + Serial.println(F("The provided index was not in range")); return; } @@ -865,14 +865,14 @@ void CommandLine::runCommand(String input) { int cl_sw = this->argSearch(&cmd_args, "-s"); // Stations if (cl_sw == -1) { - Serial.println("You did not provide a target index"); + Serial.println(F("You did not provide a target index")); return; } int sta_index = cmd_args.get(cl_sw + 1).toInt(); if ((sta_index < 0) || (sta_index > stations->size() - 1)) { - Serial.println("The provided index was not in range"); + Serial.println(F("The provided index was not in range")); return; } @@ -900,7 +900,7 @@ void CommandLine::runCommand(String input) { int targ_sw = this->argSearch(&cmd_args, "-c"); if (attack_type_switch == -1) { - Serial.println("You must specify an attack type"); + Serial.println(F("You must specify an attack type")); return; } else { @@ -911,7 +911,7 @@ void CommandLine::runCommand(String input) { if (attack_type == ATTACK_TYPE_DEAUTH) { // Default to broadcast if ((dst_addr_sw == -1) && (targ_sw == -1)) { - Serial.println("Sending to broadcast..."); + Serial.println(F("Sending to broadcast...")); wifi_scan_obj.dst_mac = "ff:ff:ff:ff:ff:ff"; } // Dest addr specified @@ -921,7 +921,7 @@ void CommandLine::runCommand(String input) { } // Station list specified else if (targ_sw != -1) - Serial.println("Sending to Station list"); + Serial.println(F("Sending to Station list")); // Source addr not specified if (src_addr_sw == -1) { @@ -1066,7 +1066,7 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.StartScan(WIFI_ATTACK_FUNNY_BEACON, TFT_CYAN); } else { - Serial.println("Attack type not properly defined"); + Serial.println(F("Attack type not properly defined")); return; } } @@ -1120,7 +1120,7 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN); } #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (cmd_args.get(0) == BT_SPOOFAT_CMD) { @@ -1165,7 +1165,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_SOUR_APPLE, TFT_GREEN); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (bt_type == "windows") { @@ -1177,7 +1177,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_SWIFTPAIR_SPAM, TFT_CYAN); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (bt_type == "samsung") { @@ -1189,7 +1189,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_SAMSUNG_SPAM, TFT_CYAN); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (bt_type == "google") { @@ -1201,7 +1201,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_GOOGLE_SPAM, TFT_CYAN); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (bt_type == "flipper") { @@ -1213,7 +1213,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_FLIPPER_SPAM, TFT_ORANGE); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else if (bt_type == "all") { @@ -1225,11 +1225,11 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_ATTACK_SPAM_ALL, TFT_MAGENTA); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } else { - Serial.println("You did not specify a correct spam type"); + Serial.println(F("You did not specify a correct spam type")); } } } @@ -1257,12 +1257,12 @@ void CommandLine::runCommand(String input) { } } else - Serial.println("GPS Module not detected"); + Serial.println(F("GPS Module not detected")); #else - Serial.println("GPS not supported"); + Serial.println(F("GPS not supported")); #endif #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } @@ -1276,7 +1276,7 @@ void CommandLine::runCommand(String input) { #endif wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA); #else - Serial.println("Bluetooth not supported"); + Serial.println(F("Bluetooth not supported")); #endif } @@ -1298,13 +1298,13 @@ void CommandLine::runCommand(String input) { if (sd_sw != -1) { #ifdef HAS_SD if (!sd_obj.supported) { - Serial.println("SD card is not connected. Cannot perform SD Update"); + Serial.println(F("SD card is not connected. Cannot perform SD Update")); return; } wifi_scan_obj.currentScanMode = OTA_UPDATE; sd_obj.runUpdate(); #else - Serial.println("SD card support disabled. Cannot perform SD Update"); + Serial.println(F("SD card support disabled. Cannot perform SD Update")); return; #endif } @@ -1376,7 +1376,7 @@ void CommandLine::runCommand(String input) { #endif } #else - Serial.println("Your hardware doesn't have GPS, silly"); + Serial.println(F("Your hardware doesn't have GPS, silly")); return; #endif } @@ -1406,7 +1406,7 @@ void CommandLine::runCommand(String input) { } } else { - Serial.println("The IP index specified is out of range"); + Serial.println(F("The IP index specified is out of range")); return; } } @@ -1438,12 +1438,12 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.StartScan(target_mode, TFT_CYAN); } else { - Serial.println("You did not specify a supported service"); + Serial.println(F("You did not specify a supported service")); return; } } else { - Serial.println("You did not specify an IP index"); + Serial.println(F("You did not specify an IP index")); return; } } @@ -1525,7 +1525,7 @@ void CommandLine::runCommand(String input) { } } else { - Serial.println("You did not specify which list to show"); + Serial.println(F("You did not specify which list to show")); return; } } @@ -1573,11 +1573,11 @@ void CommandLine::runCommand(String input) { #endif } else { - Serial.println("There are no saved WiFi credentials"); + Serial.println(F("There are no saved WiFi credentials")); } } else { - Serial.println("You did not provide the proper args"); + Serial.println(F("You did not provide the proper args")); return; } } @@ -1747,7 +1747,7 @@ void CommandLine::runCommand(String input) { this->showCounts(count_selected, count_unselected); } else { - Serial.println("You did not specify which list to select from"); + Serial.println(F("You did not specify which list to select from")); return; } } @@ -1806,7 +1806,7 @@ void CommandLine::runCommand(String input) { wifi_scan_obj.addSSID(essid); } else { - Serial.println("You did not specify how to add SSIDs"); + Serial.println(F("You did not specify how to add SSIDs")); } } // Remove SSID @@ -1819,7 +1819,7 @@ void CommandLine::runCommand(String input) { ssids->remove(index); } else { - Serial.println("You did not specify whether to add or remove SSIDs"); + Serial.println(F("You did not specify whether to add or remove SSIDs")); return; } } diff --git a/esp32_marauder/EvilPortal.cpp b/esp32_marauder/EvilPortal.cpp index b651ff5..d6d348d 100644 --- a/esp32_marauder/EvilPortal.cpp +++ b/esp32_marauder/EvilPortal.cpp @@ -61,9 +61,9 @@ void EvilPortal::setupServer() { #ifndef HAS_PSRAM server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) { request->send_P(200, "text/html", index_html); - Serial.println("client connected"); + Serial.println(F("client connected")); #ifdef HAS_SCREEN - this->sendToDisplay("Client connected to server"); + this->sendToDisplay(F("Client connected to server")); #endif }); #else @@ -71,7 +71,7 @@ void EvilPortal::setupServer() { request->send(200, "text/html", index_html); Serial.println("client connected"); #ifdef HAS_SCREEN - this->sendToDisplay("Client connected to server"); + this->sendToDisplay(F("Client connected to server")); #endif }); #endif @@ -144,10 +144,10 @@ void EvilPortal::setHtmlFromSerial() { bool EvilPortal::setHtml() { if (this->using_serial_html) { - Serial.println("html previously set"); + Serial.println(F("html previously set")); return true; } - Serial.println("Setting HTML..."); + Serial.println(F("Setting HTML...")); #ifdef HAS_SD File html_file = sd_obj.getFile("/" + this->target_html_name); #else @@ -156,7 +156,7 @@ bool EvilPortal::setHtml() { if (!html_file) { #ifdef HAS_SCREEN this->sendToDisplay("Could not find /" + this->target_html_name); - this->sendToDisplay("Touch to exit..."); + this->sendToDisplay(F("Touch to exit...")); #endif Serial.println("Could not find /" + this->target_html_name + ". Use stopscan..."); return false; @@ -164,9 +164,9 @@ bool EvilPortal::setHtml() { else { if (html_file.size() > MAX_HTML_SIZE) { #ifdef HAS_SCREEN - this->sendToDisplay("The given HTML is too large."); + this->sendToDisplay(F("The given HTML is too large.")); this->sendToDisplay("The Byte limit is " + (String)MAX_HTML_SIZE); - this->sendToDisplay("Touch to exit..."); + this->sendToDisplay(F("Touch to exit...")); #endif Serial.println("The provided HTML is too large. Byte limit is " + (String)MAX_HTML_SIZE + "\nUse stopscan..."); return false; @@ -316,14 +316,14 @@ bool EvilPortal::setAP(String essid) { strncpy(apName, essid.c_str(), MAX_AP_NAME_SIZE); this->has_ap = true; - Serial.println("ap config set"); + Serial.println(F("ap config set")); return true; } void EvilPortal::startAP() { const IPAddress AP_IP(172, 0, 0, 1); - Serial.print("starting ap "); + Serial.print(F("starting ap ")); Serial.println(apName); WiFi.mode(WIFI_AP); @@ -334,19 +334,19 @@ void EvilPortal::startAP() { this->sendToDisplay("AP started"); #endif - Serial.print("ap ip address: "); + Serial.print(F("ap ip address: ")); Serial.println(WiFi.softAPIP()); this->setupServer(); - Serial.println("Server endpoints configured"); + Serial.println(F("Server endpoints configured")); this->dnsServer.start(53, "*", WiFi.softAPIP()); - Serial.println("DNS Server started"); + Serial.println(F("DNS Server started")); server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER); - Serial.println("Captive Portal handler started"); + Serial.println(F("Captive Portal handler started")); server.begin(); - Serial.println("Server started"); + Serial.println(F("Server started")); #ifdef HAS_SCREEN this->sendToDisplay("Evil Portal READY"); #endif @@ -375,20 +375,29 @@ void EvilPortal::sendToDisplay(String msg) { } void EvilPortal::main(uint8_t scan_mode) { - if ((scan_mode == WIFI_SCAN_EVIL_PORTAL) && (this->has_ap) && (this->has_html)){ - this->dnsServer.processNextRequest(); - if (this->name_received && this->password_received) { - this->name_received = false; - this->password_received = false; - String logValue1 = - "u: " + this->user_name; - String logValue2 = "p: " + this->password; - String full_string = logValue1 + " " + logValue2 + "\n"; - Serial.print(full_string); - buffer_obj.append(full_string); - #ifdef HAS_SCREEN - this->sendToDisplay(full_string); - #endif - } + if (scan_mode != WIFI_SCAN_EVIL_PORTAL || !this->has_ap || !this->has_html) { + return; + } + + this->dnsServer.processNextRequest(); + + if (this->name_received && this->password_received) { + this->name_received = false; + this->password_received = false; + + // Adjust size depending on your max username/password length + char line[96]; + + // If user_name / password are still Arduino String: + snprintf(line, sizeof(line), + "u: %s p: %s\n", + this->user_name.c_str(), + this->password.c_str()); + + Serial.print(line); + buffer_obj.append(line); + #ifdef HAS_SCREEN + this->sendToDisplay(line); + #endif } } diff --git a/esp32_marauder/MenuFunctions.cpp b/esp32_marauder/MenuFunctions.cpp index fc1be9d..6321116 100644 --- a/esp32_marauder/MenuFunctions.cpp +++ b/esp32_marauder/MenuFunctions.cpp @@ -58,7 +58,7 @@ MenuFunctions::MenuFunctions() if(touchX>WIDTH_1 || touchY > HEIGHT_1) { - Serial.println("Y or y outside of expected parameters.."); + Serial.println(F("Y or y outside of expected parameters..")); Serial.print("y:"); Serial.print(touchX); Serial.print(" x:"); @@ -170,13 +170,13 @@ MenuFunctions::MenuFunctions() if (btn_text != text09) { } else { - Serial.println("Exiting..."); + Serial.println(F("Exiting...")); lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn))); for (int i = 0; i < stations->size(); i++) { if (stations->get(i).selected) { wifi_scan_obj.getMAC(addr, stations->get(i).mac, 0); - Serial.print("Selected: "); + Serial.print(F("Selected: ")); Serial.println(addr); } } @@ -193,7 +193,7 @@ MenuFunctions::MenuFunctions() for (int i = 0; i < stations->size(); i++) { wifi_scan_obj.getMAC(addr, stations->get(i).mac, 0); if (strcmp(addr, btn_text.c_str()) == 0) { - Serial.print("Adding Station: "); + Serial.print(F("Adding Station: ")); Serial.println(addr); Station sta = stations->get(i); sta.selected = true; @@ -205,7 +205,7 @@ MenuFunctions::MenuFunctions() for (int i = 0; i < stations->size(); i++) { wifi_scan_obj.getMAC(addr, stations->get(i).mac, 0); if (strcmp(addr, btn_text.c_str()) == 0) { - Serial.print("Removing Station: "); + Serial.print(F("Removing Station: ")); Serial.println(addr); Station sta = stations->get(i); sta.selected = false; @@ -256,7 +256,7 @@ MenuFunctions::MenuFunctions() if (btn_text != text09) { } else { - Serial.println("Exiting..."); + Serial.println(F("Exiting...")); lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn))); for (int i = 1; i < evil_portal_obj.html_files->size(); i++) { @@ -360,7 +360,7 @@ MenuFunctions::MenuFunctions() } // It's the back button else { - Serial.println("Exiting..."); + Serial.println(F("Exiting...")); lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn))); for (int i = 0; i < airtags->size(); i++) { @@ -430,7 +430,7 @@ MenuFunctions::MenuFunctions() if (btn_text != text09) { } else { - Serial.println("Exiting..."); + Serial.println(F("Exiting...")); lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn))); for (int i = 0; i < access_points->size(); i++) { @@ -496,7 +496,7 @@ MenuFunctions::MenuFunctions() } } else { - Serial.println("Exiting..."); + Serial.println(F("Exiting...")); lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn))); printf("LV_EVENT_CANCEL\n"); @@ -4051,7 +4051,7 @@ void MenuFunctions::showMenuList(Menu * menu, int layer) // Depending on layer, indent for (uint8_t x = 0; x < layer * 4; x++) Serial.print(" "); - Serial.print("Node: "); + Serial.print(F("Node: ")); Serial.println(menu->list->get(i).name); } Serial.println(); diff --git a/esp32_marauder/SDInterface.cpp b/esp32_marauder/SDInterface.cpp index 131a0bc..a208af5 100644 --- a/esp32_marauder/SDInterface.cpp +++ b/esp32_marauder/SDInterface.cpp @@ -82,10 +82,10 @@ bool SDInterface::initSD() { } if (!SD.exists("/SCRIPTS")) { - Serial.println("/SCRIPTS does not exist. Creating..."); + Serial.println(F("/SCRIPTS does not exist. Creating...")); SD.mkdir("/SCRIPTS"); - Serial.println("/SCRIPTS created"); + Serial.println(F("/SCRIPTS created")); } this->sd_files = new LinkedList(); @@ -96,7 +96,7 @@ bool SDInterface::initSD() { } #else - Serial.println("SD support disabled, skipping init"); + Serial.println(F("SD support disabled, skipping init")); return false; #endif } @@ -280,7 +280,7 @@ void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) { display_obj.tft.setTextColor(TFT_RED); display_obj.tft.println(text_table2[12]); #endif - Serial.println("Update not finished? Something went wrong!"); + Serial.println(F("Update not finished? Something went wrong!")); #ifdef HAS_SCREEN display_obj.tft.setTextColor(TFT_WHITE); #endif @@ -299,7 +299,7 @@ void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) { #ifdef HAS_SCREEN display_obj.tft.println(text_table2[14]); #endif - Serial.println("Not enough space to begin OTA"); + Serial.println(F("Not enough space to begin OTA")); } } diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index 80e1054..1c585c2 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -62,7 +62,11 @@ extern "C" { memcpy(&AdvData_Raw[i], Name, name_len); i += name_len; - AdvData.addData(std::string((char *)AdvData_Raw, 7 + name_len)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char *)AdvData_Raw, 7 + name_len)); + #else + AdvData.addData(AdvData_Raw, 7 + name_len); + #endif break; } case Apple: { @@ -84,7 +88,11 @@ extern "C" { AdvData_Raw[i++] = 0x10; // Type ??? esp_fill_random(&AdvData_Raw[i], 3); - AdvData.addData(std::string((char *)AdvData_Raw, 17)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char *)AdvData_Raw, 17)); + #else + AdvData.addData(AdvData_Raw, 17); + #endif break; } case Samsung: { @@ -109,7 +117,11 @@ extern "C" { AdvData_Raw[i++] = 0x43; AdvData_Raw[i++] = (model >> 0x00) & 0xFF; // Watch Model / Color (?) - AdvData.addData(std::string((char *)AdvData_Raw, 15)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char *)AdvData_Raw, 15)); + #else + AdvData.addData(AdvData_Raw, 15); + #endif break; } @@ -132,7 +144,11 @@ extern "C" { AdvData_Raw[i++] = 0x0A; AdvData_Raw[i++] = (rand() % 120) - 100; // -100 to +20 dBm - AdvData.addData(std::string((char *)AdvData_Raw, 14)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char *)AdvData_Raw, 14)); + #else + AdvData.addData(AdvData_Raw, 14); + #endif break; } case FlipperZero: { @@ -180,7 +196,11 @@ extern "C" { AdvData_Raw[i++] = 0x80; // Add the constructed Advertisement Data to the BLE advertisement - AdvData.addData(std::string((char *)AdvData_Raw, i)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char *)AdvData_Raw, i)); + #else + AdvData.addData(AdvData_Raw, i); + #endif break; } @@ -188,7 +208,11 @@ extern "C" { case Airtag: { for (int i = 0; i < airtags->size(); i++) { if (airtags->get(i).selected) { - AdvData.addData(std::string((char*)airtags->get(i).payload.data(), airtags->get(i).payloadSize)); + #ifndef HAS_DUAL_BAND + AdvData.addData(std::string((char*)airtags->get(i).payload.data(), airtags->get(i).payloadSize)); + #else + AdvData.addData(airtags->get(i).payload.data(), airtags->get(i).payloadSize); + #endif break; } @@ -197,7 +221,7 @@ extern "C" { break; } default: { - Serial.println("Please Provide a Company Type"); + Serial.println(F("Please Provide a Company Type")); break; } } @@ -263,13 +287,13 @@ extern "C" { } } - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print("Len: "); + Serial.print(F("Len: ")); Serial.print(len); - Serial.print(" Payload: "); + Serial.print(F(" Payload: ")); for (size_t i = 0; i < len; i++) { Serial.printf("%02X ", payLoad[i]); } @@ -341,11 +365,11 @@ extern "C" { } int rssi = advertisedDevice->getRSSI(); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print("Name: "); + Serial.print(F("Name: ")); Serial.println(name); Flipper flipper; @@ -367,13 +391,13 @@ extern "C" { { display_string.concat(text_table4[0]); display_string.concat(advertisedDevice->getRSSI()); - Serial.print(" RSSI: "); + Serial.print(F(" RSSI: ")); Serial.print(advertisedDevice->getRSSI()); display_string.concat(" "); Serial.print(" "); - Serial.print("Device: "); + Serial.print(F("Device: ")); if(advertisedDevice->getName().length() != 0) { display_string.concat(advertisedDevice->getName().c_str()); @@ -409,7 +433,7 @@ extern "C" { bool do_save = false; if (buf >= 0) { - Serial.print("Device: "); + Serial.print(F("Device: ")); if(advertisedDevice->getName().length() != 0) { display_string.concat(advertisedDevice->getName().c_str()); @@ -587,17 +611,17 @@ extern "C" { mac.toUpperCase(); int rssi = advertisedDevice->getRSSI(); - Serial.println("[FLOCK PENGUIN BATTERY CANDIDATE]"); - Serial.print(" RSSI: "); + Serial.println(F("[FLOCK PENGUIN BATTERY CANDIDATE]")); + Serial.print(F(" RSSI: ")); Serial.println(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print(" Name: "); + Serial.print(F(" Name: ")); Serial.println(name); - Serial.print(" Serial: "); + Serial.print(F(" Serial: ")); Serial.println(serial.length() ? serial : "N/A"); - Serial.print(" Payload: "); + Serial.print(F(" Payload: ")); for (size_t i = 0; i < len; i++) { Serial.printf("%02X ", payLoad[i]); } @@ -824,12 +848,58 @@ extern "C" { else if (wifi_scan_obj.currentScanMode == BT_SCAN_SIMPLE_TWO) { wifi_scan_obj.bt_frames++; } + else if (wifi_scan_obj.currentScanMode == BT_SCAN_SKIMMERS) { + String bad_list[bad_list_length] = {"HC-03", "HC-05", "HC-06"}; + + #ifdef HAS_SCREEN + int buf = display_obj.display_buffer->size(); + #else + int buf = 0; + #endif + + if (buf >= 0) + { + Serial.print(F("Device: ")); + String display_string = ""; + if(advertisedDevice->getName().length() != 0) + { + Serial.print(advertisedDevice->getName().c_str()); + for(uint8_t i = 0; i < bad_list_length; i++) + { + #ifdef HAS_SCREEN + if(strcmp(advertisedDevice->getName().c_str(), bad_list[i].c_str()) == 0) + { + display_string.concat(text_table4[1]); + display_string.concat(" "); + display_string.concat(advertisedDevice->getName().c_str()); + uint8_t temp_len = display_string.length(); + for (uint8_t i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + while (display_obj.printing) + delay(1); + display_obj.loading = true; + display_obj.display_buffer->add(display_string); + display_obj.loading = false; + } + #endif + } + } + else + { + Serial.print(advertisedDevice->getAddress().toString().c_str()); + } + Serial.print(F(" RSSI: ")); + Serial.println(advertisedDevice->getRSSI()); + } + } return; } }; - class bluetoothScanSkimmersCallback: public BLEAdvertisedDeviceCallbacks { + /*class bluetoothScanSkimmersCallback: public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice *advertisedDevice) { String bad_list[bad_list_length] = {"HC-03", "HC-05", "HC-06"}; @@ -841,7 +911,7 @@ extern "C" { if (buf >= 0) { - Serial.print("Device: "); + Serial.print(F("Device: ")); String display_string = ""; if(advertisedDevice->getName().length() != 0) { @@ -872,11 +942,11 @@ extern "C" { { Serial.print(advertisedDevice->getAddress().toString().c_str()); } - Serial.print(" RSSI: "); + Serial.print(F(" RSSI: ")); Serial.println(advertisedDevice->getRSSI()); } } - }; + };*/ #else class bluetoothScanAllCallback: public NimBLEScanCallbacks { @@ -931,13 +1001,13 @@ extern "C" { } } - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print("Len: "); + Serial.print(F("Len: ")); Serial.print(len); - Serial.print(" Payload: "); + Serial.print(F(" Payload: ")); for (size_t i = 0; i < len; i++) { Serial.printf("%02X ", payLoad[i]); } @@ -945,8 +1015,13 @@ extern "C" { AirTag airtag; airtag.mac = mac; - airtag.payload.assign(payLoad, payLoad + len); - airtag.payloadSize = len; + #ifndef HAS_DUAL_BAND + airtag.payload.assign(payLoad, payLoad + len); + airtag.payloadSize = len; + #else + airtag.payload = payLoad; + airtag.payloadSize = payLoad.size(); + #endif airtag.rssi = rssi; airtag.last_seen = millis(); @@ -1009,11 +1084,11 @@ extern "C" { } int rssi = advertisedDevice->getRSSI(); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print("Name: "); + Serial.print(F("Name: ")); Serial.println(name); Flipper flipper; @@ -1035,13 +1110,13 @@ extern "C" { { display_string.concat(text_table4[0]); display_string.concat(advertisedDevice->getRSSI()); - Serial.print(" RSSI: "); + Serial.print(F(" RSSI: ")); Serial.print(advertisedDevice->getRSSI()); display_string.concat(" "); Serial.print(" "); - Serial.print("Device: "); + Serial.print(F("Device: ")); if(advertisedDevice->getName().length() != 0) { display_string.concat(advertisedDevice->getName().c_str()); @@ -1077,7 +1152,7 @@ extern "C" { bool do_save = false; if (buf >= 0) { - Serial.print("Device: "); + Serial.print(F("Device: ")); if(advertisedDevice->getName().length() != 0) { display_string.concat(advertisedDevice->getName().c_str()); @@ -1255,17 +1330,17 @@ extern "C" { mac.toUpperCase(); int rssi = advertisedDevice->getRSSI(); - Serial.println("[FLOCK PENGUIN BATTERY CANDIDATE]"); - Serial.print(" RSSI: "); + Serial.println(F("[FLOCK PENGUIN BATTERY CANDIDATE]")); + Serial.print(F(" RSSI: ")); Serial.println(rssi); - Serial.print(" MAC: "); + Serial.print(F(" MAC: ")); Serial.println(mac); - Serial.print(" Name: "); + Serial.print(F(" Name: ")); Serial.println(name); - Serial.print(" Serial: "); + Serial.print(F(" Serial: ")); Serial.println(serial.length() ? serial : "N/A"); - Serial.print(" Payload: "); + Serial.print(F(" Payload: ")); for (size_t i = 0; i < len; i++) { Serial.printf("%02X ", payLoad[i]); } @@ -1492,12 +1567,57 @@ extern "C" { else if (wifi_scan_obj.currentScanMode == BT_SCAN_SIMPLE_TWO) { wifi_scan_obj.bt_frames++; } - + else if (wifi_scan_obj.currentScanMode == BT_SCAN_SKIMMERS) { + String bad_list[bad_list_length] = {"HC-03", "HC-05", "HC-06"}; + + #ifdef HAS_SCREEN + int buf = display_obj.display_buffer->size(); + #else + int buf = 0; + #endif + + if (buf >= 0) + { + Serial.print(F("Device: ")); + String display_string = ""; + if(advertisedDevice->getName().length() != 0) + { + Serial.print(advertisedDevice->getName().c_str()); + for(uint8_t i = 0; i < bad_list_length; i++) + { + #ifdef HAS_SCREEN + if(strcmp(advertisedDevice->getName().c_str(), bad_list[i].c_str()) == 0) + { + display_string.concat(text_table4[1]); + display_string.concat(" "); + display_string.concat(advertisedDevice->getName().c_str()); + uint8_t temp_len = display_string.length(); + for (uint8_t i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + while (display_obj.printing) + delay(1); + display_obj.loading = true; + display_obj.display_buffer->add(display_string); + display_obj.loading = false; + } + #endif + } + } + else + { + Serial.print(advertisedDevice->getAddress().toString().c_str()); + } + Serial.print(F(" RSSI: ")); + Serial.println(advertisedDevice->getRSSI()); + } + } return; } }; - class bluetoothScanSkimmersCallback: public NimBLEScanCallbacks { + /*class bluetoothScanSkimmersCallback: public NimBLEScanCallbacks { void onResult(const NimBLEAdvertisedDevice* advertisedDevice) override { String bad_list[bad_list_length] = {"HC-03", "HC-05", "HC-06"}; @@ -1509,7 +1629,7 @@ extern "C" { if (buf >= 0) { - Serial.print("Device: "); + Serial.print(F("Device: ")); String display_string = ""; if(advertisedDevice->getName().length() != 0) { @@ -1540,11 +1660,11 @@ extern "C" { { Serial.print(advertisedDevice->getAddress().toString().c_str()); } - Serial.print(" RSSI: "); + Serial.print(F(" RSSI: ")); Serial.println(advertisedDevice->getRSSI()); } } - }; + };*/ #endif #endif @@ -1733,13 +1853,6 @@ int WiFiScan::generateSSIDs(int count) { Serial.println(ssids->get(ssids->size() - 1).essid); } - Serial.print("Free Heap: "); - Serial.print(esp_get_free_heap_size()); - #ifdef HAS_PSRAM - Serial.print(" Free PSRAM: "); - Serial.println(heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); - #endif - return num_gen; } @@ -1763,7 +1876,7 @@ bool WiFiScan::joinWiFi(String ssid, String password, bool gui) return true; } else if (WiFi.status() == WL_CONNECTED) { - Serial.println("Already connected. Disconnecting..."); + Serial.println(F("Already connected. Disconnecting...")); WiFi.disconnect(); } @@ -1789,7 +1902,7 @@ bool WiFiScan::joinWiFi(String ssid, String password, bool gui) #endif #endif - Serial.print("Connecting to WiFi"); + Serial.print(F("Connecting to WiFi")); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); @@ -1803,7 +1916,7 @@ bool WiFiScan::joinWiFi(String ssid, String password, bool gui) count++; if (count == 20) { - Serial.println("\nCould not connect to WiFi network"); + Serial.println(F("\nCould not connect to WiFi network")); #ifdef HAS_SCREEN #ifdef HAS_MINI_KB if (gui) { @@ -1843,14 +1956,14 @@ bool WiFiScan::joinWiFi(String ssid, String password, bool gui) this->gateway = WiFi.gatewayIP(); this->subnet = WiFi.subnetMask(); - Serial.println("\nConnected to the WiFi network"); - Serial.print("IP address: "); + Serial.println(F("\nConnected to the WiFi network")); + Serial.print(F("IP address: ")); Serial.println(this->ip_addr); - Serial.print("Gateway: "); + Serial.print(F("Gateway: ")); Serial.println(this->gateway); - Serial.print("Netmask: "); + Serial.print(F("Netmask: ")); Serial.println(this->subnet); - Serial.print("MAC: "); + Serial.print(F("MAC: ")); Serial.println(WiFi.macAddress()); #ifdef HAS_SCREEN @@ -1902,7 +2015,7 @@ bool WiFiScan::startWiFi(String ssid, String password, bool gui) return true; } else if (WiFi.status() == WL_CONNECTED) { - Serial.println("Already connected. Disconnecting..."); + Serial.println(F("Already connected. Disconnecting...")); WiFi.disconnect(); } @@ -1931,7 +2044,7 @@ bool WiFiScan::startWiFi(String ssid, String password, bool gui) #endif #endif - Serial.print("Started WiFi"); + Serial.print(F("Started WiFi")); #ifdef HAS_TOUCH lv_obj_t * mbox1 = lv_msgbox_create(lv_scr_act(), NULL); @@ -1945,28 +2058,28 @@ bool WiFiScan::startWiFi(String ssid, String password, bool gui) this->gateway = WiFi.gatewayIP(); this->subnet = WiFi.subnetMask(); - Serial.println("\nStarted AP"); - Serial.print("IP address: "); + Serial.println(F("\nStarted AP")); + Serial.print(F("IP address: ")); Serial.println(this->ip_addr); - Serial.print("Gateway: "); + Serial.print(F("Gateway: ")); Serial.println(this->gateway); - Serial.print("Netmask: "); + Serial.print(F("Netmask: ")); Serial.println(this->subnet); - Serial.print("MAC: "); + Serial.print(F("MAC: ")); Serial.println(WiFi.macAddress()); #ifdef HAS_SCREEN #ifdef HAS_MINI_KB - display_obj.tft.println("\nStarted AP"); - display_obj.tft.print("IP address: "); + display_obj.tft.println(F("\nStarted AP")); + display_obj.tft.print(F("IP address: ")); display_obj.tft.println(this->ip_addr); - display_obj.tft.print("Gateway: "); + display_obj.tft.print(F("Gateway: ")); display_obj.tft.println(this->gateway); - display_obj.tft.print("Netmask: "); + display_obj.tft.print(F("Netmask: ")); display_obj.tft.println(this->subnet); - display_obj.tft.print("MAC: "); + display_obj.tft.print(F("MAC: ")); display_obj.tft.println(WiFi.macAddress()); - display_obj.tft.println("Returning..."); + display_obj.tft.println(F("Returning...")); delay(2000); #endif #endif @@ -2274,12 +2387,15 @@ bool WiFiScan::shutdownWiFi() { bool WiFiScan::shutdownBLE() { #ifdef HAS_BT if (this->ble_initialized) { - Serial.println("Shutting down BLE"); + Serial.println(F("Shutting down BLE")); pAdvertising->stop(); pBLEScan->stop(); pBLEScan->clearResults(); - NimBLEDevice::deinit(); + + #ifndef HAS_DUAL_BAND + NimBLEDevice::deinit(); + #endif this->_analyzer_value = 0; this->bt_frames = 0; @@ -2527,7 +2643,12 @@ bool WiFiScan::mac_cmp(struct mac_addr addr1, struct mac_addr addr2) { #ifdef HAS_BT void WiFiScan::copyNimbleMac(const BLEAddress &addr, unsigned char out[6]) { - const uint8_t* bytes = addr.getNative(); // NimBLE gives MAC as uint8_t[6] + #ifndef HAS_DUAL_BAND + const uint8_t* bytes = addr.getNative(); // NimBLE gives MAC as uint8_t[6] + #else + const ble_addr_t* base_addr = addr.getBase(); + const uint8_t* bytes = base_addr->val; + #endif for (int i = 0; i < 6; i++) { out[i] = bytes[i]; } @@ -2707,16 +2828,16 @@ void WiFiScan::RunPingScan(uint8_t scan_mode, uint16_t color) this->current_scan_ip = this->gateway; Serial.println("Cleared IPs: " + (String)this->clearIPs()); if (scan_mode == WIFI_PING_SCAN) - Serial.println("Starting Ping Scan with..."); + Serial.println(F("Starting Ping Scan with...")); else if (scan_mode == WIFI_ARP_SCAN) - Serial.println("Starting ARP Scan with..."); - Serial.print("IP address: "); + Serial.println(F("Starting ARP Scan with...")); + Serial.print(F("IP address: ")); Serial.println(this->ip_addr); - Serial.print("Gateway: "); + Serial.print(F("Gateway: ")); Serial.println(this->gateway); - Serial.print("Netmask: "); + Serial.print(F("Netmask: ")); Serial.println(this->subnet); - Serial.print("MAC: "); + Serial.print(F("MAC: ")); Serial.println(WiFi.macAddress()); if (scan_mode == WIFI_PING_SCAN) @@ -2814,14 +2935,14 @@ void WiFiScan::RunPortScanAll(uint8_t scan_mode, uint16_t color) (scan_mode == WIFI_SCAN_RDP)) this->current_scan_ip = this->gateway; - Serial.println("Starting Port Scan with..."); - Serial.print("IP address: "); + Serial.println(F("Starting Port Scan with...")); + Serial.print(F("IP address: ")); Serial.println(this->ip_addr); - Serial.print("Gateway: "); + Serial.print(F("Gateway: ")); Serial.println(this->gateway); - Serial.print("Netmask: "); + Serial.print(F("Netmask: ")); Serial.println(this->subnet); - Serial.print("MAC: "); + Serial.print(F("MAC: ")); Serial.println(WiFi.macAddress()); buffer_obj.append("Starting Port Scan with..."); @@ -2845,7 +2966,7 @@ void WiFiScan::RunLoadATList() { // Prepare to access the file File file = sd_obj.getFile("/Airtags_0.log"); if (!file) { - Serial.println("Could not open /Airtags_0.log"); + Serial.println(F("Could not open /Airtags_0.log")); #ifdef HAS_SCREEN display_obj.tft.setTextWrap(false); display_obj.tft.setFreeFont(NULL); @@ -2853,7 +2974,7 @@ void WiFiScan::RunLoadATList() { display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_CYAN); - display_obj.tft.println("Could not open /Airtags_0.log"); + display_obj.tft.println(F("Could not open /Airtags_0.log")); #endif return; } @@ -2862,7 +2983,7 @@ void WiFiScan::RunLoadATList() { DynamicJsonDocument doc(10048); DeserializationError error = deserializeJson(doc, file); if (error) { - Serial.print("JSON deserialize error: "); + Serial.print(F("JSON deserialize error: ")); Serial.println(error.c_str()); file.close(); #ifdef HAS_SCREEN @@ -2872,7 +2993,7 @@ void WiFiScan::RunLoadATList() { display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_CYAN); - display_obj.tft.println("Could not deserialize JSON"); + display_obj.tft.println(F("Could not deserialize JSON")); display_obj.tft.println(error.c_str()); #endif return; @@ -2902,7 +3023,7 @@ void WiFiScan::RunLoadATList() { display_obj.tft.print("Loaded Airtags: "); display_obj.tft.println((String)airtags->size()); #endif - Serial.print("Loaded Airtags:"); + Serial.print(F("Loaded Airtags:")); Serial.println((String)airtags->size()); #endif } @@ -2938,10 +3059,10 @@ void WiFiScan::RunSaveATList(bool save_as) { display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_CYAN); - display_obj.tft.print("Saved Airtags: "); + display_obj.tft.print(F("Saved Airtags: ")); display_obj.tft.println((String)airtags->size()); #endif - Serial.print("Saved Airtags:"); + Serial.print(F("Saved Airtags:")); Serial.println((String)airtags->size()); } #endif @@ -2951,7 +3072,7 @@ void WiFiScan::RunLoadAPList() { #ifdef HAS_SD File file = sd_obj.getFile("/APs_0.log"); if (!file) { - Serial.println("Could not open /APs_0.log"); + Serial.println(F("Could not open /APs_0.log")); #ifdef HAS_SCREEN display_obj.tft.setTextWrap(false); display_obj.tft.setFreeFont(NULL); @@ -2966,7 +3087,7 @@ void WiFiScan::RunLoadAPList() { DynamicJsonDocument doc(10048); DeserializationError error = deserializeJson(doc, file); if (error) { - Serial.print("JSON deserialize error: "); + Serial.print(F("JSON deserialize error: ")); Serial.println(error.c_str()); file.close(); #ifdef HAS_SCREEN @@ -2975,7 +3096,7 @@ void WiFiScan::RunLoadAPList() { display_obj.tft.setCursor(0, 100); display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_CYAN); - display_obj.tft.println("Could not deserialize JSON"); + display_obj.tft.println(F("Could not deserialize JSON")); display_obj.tft.println(error.c_str()); #endif return; @@ -3017,7 +3138,7 @@ void WiFiScan::RunLoadAPList() { display_obj.tft.print("Loaded APs: "); display_obj.tft.println((String)access_points->size()); #endif - Serial.print("Loaded APs:"); + Serial.print(F("Loaded APs:")); Serial.println((String)access_points->size()); #endif } @@ -3066,7 +3187,7 @@ void WiFiScan::RunSaveAPList(bool save_as) { display_obj.tft.print("Saved APs: "); display_obj.tft.println((String)access_points->size()); #endif - Serial.print("Saved APs:"); + Serial.print(F("Saved APs:")); Serial.println((String)access_points->size()); } #endif @@ -3076,7 +3197,7 @@ void WiFiScan::RunLoadSSIDList() { #ifdef HAS_SD File log_file = sd_obj.getFile("/SSIDs_0.log"); if (!log_file) { - Serial.println("Could not open /SSIDs_0.log"); + Serial.println(F("Could not open /SSIDs_0.log")); #ifdef HAS_SCREEN display_obj.tft.setTextWrap(false); display_obj.tft.setFreeFont(NULL); @@ -3084,7 +3205,7 @@ void WiFiScan::RunLoadSSIDList() { display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_CYAN); - display_obj.tft.println("Could not open /SSIDs_0.log"); + display_obj.tft.println(F("Could not open /SSIDs_0.log")); #endif return; } @@ -3106,7 +3227,7 @@ void WiFiScan::RunLoadSSIDList() { log_file.close(); - Serial.print("Loaded SSIDs: "); + Serial.print(F("Loaded SSIDs: ")); Serial.println((String)ssids->size()); #endif } @@ -3135,7 +3256,7 @@ void WiFiScan::RunSaveSSIDList(bool save_as) { display_obj.tft.print("Saved SSIDs: "); display_obj.tft.println((String)ssids->size()); #endif - Serial.print("Saved SSIDs: "); + Serial.print(F("Saved SSIDs: ")); Serial.println((String)ssids->size()); } #endif @@ -3427,7 +3548,7 @@ void WiFiScan::logPoint(String lat, String lon, float alt, String datetime, bool } void WiFiScan::writeHeader(bool poi) { - Serial.println("Writing header to GPX file..."); + Serial.println(F("Writing header to GPX file...")); buffer_obj.append("\n"); buffer_obj.append("\n"); if (!poi) @@ -3438,7 +3559,7 @@ void WiFiScan::writeHeader(bool poi) { } void WiFiScan::writeFooter(bool poi) { - Serial.println("Writing footer to GPX file...\n"); + Serial.println(F("Writing footer to GPX file...\n")); if (!poi) { buffer_obj.append(" \n"); buffer_obj.append(" \n"); @@ -3470,7 +3591,7 @@ bool WiFiScan::RunGPSInfo(bool tracker, bool display, bool poi) { } if (display) { - Serial.println("Refreshing GPS Data on screen..."); + Serial.println(F("Refreshing GPS Data on screen...")); #ifdef HAS_SCREEN // Get screen position ready @@ -3487,10 +3608,10 @@ bool WiFiScan::RunGPSInfo(bool tracker, bool display, bool poi) { // Print the GPS data: 3 display_obj.tft.setCursor(0, SCREEN_HEIGHT / 3); if (gps_obj.getFixStatus()) - display_obj.tft.println(" Good Fix: Yes"); + display_obj.tft.println(F(" Good Fix: Yes")); else { return_val = false; - display_obj.tft.println(" Good Fix: No"); + display_obj.tft.println(F(" Good Fix: No")); } if(text != "") display_obj.tft.println(" Text: " + text); @@ -3504,11 +3625,11 @@ bool WiFiScan::RunGPSInfo(bool tracker, bool display, bool poi) { #endif // Display to serial - Serial.println("==== GPS Data ===="); + Serial.println(F("==== GPS Data ====")); if (gps_obj.getFixStatus()) - Serial.println(" Good Fix: Yes"); + Serial.println(F(" Good Fix: Yes")); else - Serial.println(" Good Fix: No"); + Serial.println(F(" Good Fix: No")); if(text != "") Serial.println(" Text: " + text); @@ -3681,23 +3802,23 @@ void WiFiScan::RunAPInfo(uint16_t index, bool do_display) { Serial.print("Security: "); switch (sec) { - case WIFI_SECURITY_OPEN: Serial.println("Open"); break; - case WIFI_SECURITY_WEP: Serial.println("WEP"); break; - case WIFI_SECURITY_WPA: Serial.println("WPA"); break; - case WIFI_SECURITY_WPA2: Serial.println("WPA2"); break; - case WIFI_SECURITY_WPA3: Serial.println("WPA3"); break; - case WIFI_SECURITY_WPA_WPA2_MIXED: Serial.println("WPA/WPA2 Mixed"); break; - case WIFI_SECURITY_WPA2_ENTERPRISE: Serial.println("WPA2 Enterprise"); break; - case WIFI_SECURITY_WPA3_ENTERPRISE: Serial.println("WPA3 Enterprise"); break; - case WIFI_SECURITY_WAPI: Serial.println("WAPI"); break; - default: Serial.println("Unknown"); break; + case WIFI_SECURITY_OPEN: Serial.println(F("Open")); break; + case WIFI_SECURITY_WEP: Serial.println(F("WEP")); break; + case WIFI_SECURITY_WPA: Serial.println(F("WPA")); break; + case WIFI_SECURITY_WPA2: Serial.println(F("WPA2")); break; + case WIFI_SECURITY_WPA3: Serial.println(F("WPA3")); break; + case WIFI_SECURITY_WPA_WPA2_MIXED: Serial.println(F("WPA/WPA2 Mixed")); break; + case WIFI_SECURITY_WPA2_ENTERPRISE: Serial.println(F("WPA2 Enterprise")); break; + case WIFI_SECURITY_WPA3_ENTERPRISE: Serial.println(F("WPA3 Enterprise")); break; + case WIFI_SECURITY_WAPI: Serial.println(F("WAPI")); break; + default: Serial.println(F("Unknown")); break; } - Serial.print(" WPS: "); + Serial.print(F(" WPS: ")); switch (wps) { - case true: Serial.println("true"); break; - case false: Serial.println("false"); break; - default: Serial.println("false"); break; + case true: Serial.println(F("true")); break; + case false: Serial.println(F("false")); break; + default: Serial.println(F("false")); break; } #ifdef HAS_SCREEN @@ -3712,40 +3833,40 @@ void WiFiScan::RunAPInfo(uint16_t index, bool do_display) { display_obj.tft.print("Security: "); switch (sec) { - case WIFI_SECURITY_OPEN: display_obj.tft.println("Open"); break; - case WIFI_SECURITY_WEP: display_obj.tft.println("WEP"); break; - case WIFI_SECURITY_WPA: display_obj.tft.println("WPA"); break; - case WIFI_SECURITY_WPA2: display_obj.tft.println("WPA2"); break; - case WIFI_SECURITY_WPA3: display_obj.tft.println("WPA3"); break; - case WIFI_SECURITY_WPA_WPA2_MIXED: display_obj.tft.println("WPA/WPA2 Mixed"); break; - case WIFI_SECURITY_WPA2_ENTERPRISE: display_obj.tft.println("WPA2 Enterprise"); break; - case WIFI_SECURITY_WPA3_ENTERPRISE: display_obj.tft.println("WPA3 Enterprise"); break; - case WIFI_SECURITY_WAPI: display_obj.tft.println("WAPI"); break; - default: display_obj.tft.println("Unknown"); break; + case WIFI_SECURITY_OPEN: display_obj.tft.println(F("Open")); break; + case WIFI_SECURITY_WEP: display_obj.tft.println(F("WEP")); break; + case WIFI_SECURITY_WPA: display_obj.tft.println(F("WPA")); break; + case WIFI_SECURITY_WPA2: display_obj.tft.println(F("WPA2")); break; + case WIFI_SECURITY_WPA3: display_obj.tft.println(F("WPA3")); break; + case WIFI_SECURITY_WPA_WPA2_MIXED: display_obj.tft.println(F("WPA/WPA2 Mixed")); break; + case WIFI_SECURITY_WPA2_ENTERPRISE: display_obj.tft.println(F("WPA2 Enterprise")); break; + case WIFI_SECURITY_WPA3_ENTERPRISE: display_obj.tft.println(F("WPA3 Enterprise")); break; + case WIFI_SECURITY_WAPI: display_obj.tft.println(F("WAPI")); break; + default: display_obj.tft.println(F("Unknown")); break; } display_obj.tft.print(" WPS: "); switch (wps) { - case true: display_obj.tft.println("true"); break; - case false: display_obj.tft.println("false"); break; - default: display_obj.tft.println("false"); break; + case true: display_obj.tft.println(F("true")); break; + case false: display_obj.tft.println(F("false")); break; + default: display_obj.tft.println(F("false")); break; } } #endif if (!access_points->get(index).selected) { - Serial.println("Selected: false"); + Serial.println(F("Selected: false")); #ifdef HAS_SCREEN if (do_display) { - display_obj.tft.println("Selected: false"); + display_obj.tft.println(F("Selected: false")); } #endif } else { - Serial.println("Selected: true"); + Serial.println(F("Selected: true")); #ifdef HAS_SCREEN if (do_display) { - display_obj.tft.println("Selected: true"); + display_obj.tft.println(F("Selected: true")); } #endif } @@ -3960,7 +4081,7 @@ void WiFiScan::RunPacketMonitor(uint8_t scan_mode, uint16_t color) #endif #endif - Serial.println("Running packet scan..."); + Serial.println(F("Running packet scan...")); esp_wifi_init(&cfg2); #ifdef HAS_DUAL_BAND esp_wifi_set_country(&country); @@ -4056,7 +4177,7 @@ void WiFiScan::RunEapolScan(uint8_t scan_mode, uint16_t color) err = esp_wifi_set_protocol(WIFI_IF_AP, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N | WIFI_PROTOCOL_LR); if (err != 0) { - Serial.print("could not set protocol : err=0x"); + Serial.print(F("could not set protocol : err=0x")); Serial.println(err, HEX); } @@ -4071,7 +4192,7 @@ void WiFiScan::RunEapolScan(uint8_t scan_mode, uint16_t color) err = esp_wifi_set_config((wifi_interface_t)WIFI_IF_AP, &conf); if (err != 0) { - Serial.print("AP config set error, Maurauder SSID might visible : err=0x"); + Serial.print(F("AP config set error, Maurauder SSID might visible : err=0x")); Serial.println(err, HEX); } @@ -4303,16 +4424,18 @@ void WiFiScan::executeSourApple() { void WiFiScan::setBaseMacAddress(uint8_t macAddr[6]) { // Use ESP-IDF function to set the base MAC address - esp_err_t err = esp_base_mac_addr_set(macAddr); + #ifndef HAS_DUAL_BAND + esp_err_t err = esp_base_mac_addr_set(macAddr); - // Check for success or handle errors - if (err == ESP_OK) { - return; - } else if (err == ESP_ERR_INVALID_ARG) { - Serial.println("Error: Invalid MAC address argument."); - } else { - Serial.printf("Error: Failed to set MAC address. Code: %d\n", err); - } + // Check for success or handle errors + if (err == ESP_OK) { + return; + } else if (err == ESP_ERR_INVALID_ARG) { + Serial.println(F("Error: Invalid MAC address argument.")); + } else { + Serial.printf("Error: Failed to set MAC address. Code: %d\n", err); + } + #endif } void WiFiScan::executeSpoofAirtag() { @@ -4384,7 +4507,7 @@ void WiFiScan::executeWarDrive() { String display_string; while (WiFi.scanComplete() == WIFI_SCAN_RUNNING) { - Serial.println("Scan running..."); + Serial.println(F("Scan running...")); delay(500); } @@ -4579,10 +4702,10 @@ void WiFiScan::RunStationScan(uint8_t scan_mode, uint16_t color) if (err != ESP_OK) { Serial.printf("Default config also failed (0x%04X)\n", err); } else { - Serial.println("Wi-Fi init succeeded with default config."); + Serial.println(F("Wi-Fi init succeeded with default config.")); } } else { - Serial.println("Wi-Fi init succeeded with custom config."); + Serial.println(F("Wi-Fi init succeeded with custom config.")); } #ifdef HAS_DUAL_BAND esp_wifi_set_country(&country); @@ -4784,7 +4907,7 @@ void WiFiScan::RunProbeScan(uint8_t scan_mode, uint16_t color) this->setMac(); esp_wifi_set_promiscuous(true); esp_wifi_set_promiscuous_filter(&filt); - esp_wifi_set_promiscuous_rx_cb(&probeSnifferCallback); + esp_wifi_set_promiscuous_rx_cb(&beaconSnifferCallback); esp_wifi_set_channel(set_channel, WIFI_SECOND_CHAN_NONE); this->wifi_initialized = true; initTime = millis(); @@ -4880,20 +5003,19 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color) display_obj.print_delay_1 = 50; display_obj.print_delay_2 = 20; #endif - - if (scan_mode != BT_SCAN_WAR_DRIVE_CONT) { + + if ((scan_mode == BT_SCAN_FLOCK) || + (scan_mode == BT_SCAN_FLOCK_WARDRIVE) || + (scan_mode == BT_SCAN_SIMPLE) || + (scan_mode == BT_SCAN_SIMPLE_TWO) || + (scan_mode == BT_SCAN_WAR_DRIVE_CONT) || + (scan_mode == BT_SCAN_ANALYZER)) + NimBLEDevice::setScanDuplicateCacheSize(0); + else { NimBLEDevice::setScanFilterMode(CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE); NimBLEDevice::setScanDuplicateCacheSize(200); } - else if ((scan_mode == BT_SCAN_WAR_DRIVE_CONT) || (scan_mode == BT_SCAN_ANALYZER)) { - NimBLEDevice::setScanDuplicateCacheSize(0); - } - if ((scan_mode == BT_SCAN_FLOCK) || (scan_mode == BT_SCAN_FLOCK_WARDRIVE)) - NimBLEDevice::setScanDuplicateCacheSize(0); - - if ((scan_mode == BT_SCAN_SIMPLE) || (scan_mode == BT_SCAN_SIMPLE_TWO)) - NimBLEDevice::setScanDuplicateCacheSize(0); NimBLEDevice::init(""); pBLEScan = NimBLEDevice::getScan(); //create new scan @@ -5031,9 +5153,9 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color) display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA); #endif #ifndef HAS_DUAL_BAND - pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanSkimmersCallback(), false); + pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanAllCallback(), false); #else - pBLEScan->setScanCallbacks(new bluetoothScanSkimmersCallback(), false); + pBLEScan->setScanCallbacks(new bluetoothScanAllCallback(), false); #endif } else if (scan_mode == BT_SCAN_ANALYZER) { @@ -5072,7 +5194,7 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color) (scan_mode == BT_SCAN_FLOCK_WARDRIVE)) pBLEScan->setDuplicateFilter(false); pBLEScan->start(0, scanCompleteCB, false); - Serial.println("Started BLE Scan"); + Serial.println(F("Started BLE Scan")); this->ble_initialized = true; #ifdef HAS_FLIPPER_LED @@ -5137,16 +5259,16 @@ void WiFiScan::pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) delay(random(0, 10)); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); + Serial.print(F(" BSSID: ")); Serial.print(addr); //display_string.concat(addr); display_string.concat("CH: " + (String)snifferPacket->rx_ctrl.channel); - Serial.print(" ESSID: "); - display_string.concat(" -> "); + Serial.print(F(" ESSID: ")); + display_string.concat(F(" -> ")); // Just grab the first 255 bytes of the pwnagotchi beacon // because that is where the name is @@ -5169,11 +5291,11 @@ void WiFiScan::pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) //JsonObject& json = jsonBuffer.parseObject(essid); // ArduinoJson v5 // ArduinoJson v6 if (deserializeJson(json, essid)) { - Serial.println("\nCould not parse Pwnagotchi json"); + Serial.println(F("\nCould not parse Pwnagotchi json")); display_string.concat(essid); } else { - Serial.println("\nSuccessfully parsed json"); + Serial.println(F("\nSuccessfully parsed json")); String json_output; //json.printTo(json_output); // ArduinoJson v5 serializeJson(json, json_output); // ArduinoJson v6 @@ -5343,11 +5465,11 @@ void WiFiScan::apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type if (in_list < 0) { - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); + Serial.print(F(" BSSID: ")); Serial.print(addr); #ifdef HAS_SCREEN display_string.concat("#"); @@ -5361,7 +5483,7 @@ void WiFiScan::apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type display_string.concat(" "); #endif - Serial.print(" ESSID: "); + Serial.print(F(" ESSID: ")); if (snifferPacket->payload[37] <= 0) display_string.concat(addr); else { @@ -5421,7 +5543,7 @@ void WiFiScan::apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type //ap.beacon->add(snifferPacket->payload[34]); //ap.beacon->add(snifferPacket->payload[35]); - Serial.print("\nBeacon: "); + Serial.print(F("\nBeacon: ")); for (int i = 0; i < 2; i++) { char hexCar[4]; @@ -5565,17 +5687,17 @@ void WiFiScan::apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type char sta_addr[] = "00:00:00:00:00:00"; if (ap_is_src) { - Serial.print("ap: "); + Serial.print(F("ap: ")); Serial.print(ap_addr); - Serial.print(" -> sta: "); + Serial.print(F(" -> sta: ")); getMAC(sta_addr, snifferPacket->payload, 4); Serial.println(sta_addr); } else { - Serial.print("sta: "); + Serial.print(F("sta: ")); getMAC(sta_addr, snifferPacket->payload, 10); Serial.print(sta_addr); - Serial.print(" -> ap: "); + Serial.print(F(" -> ap: ")); Serial.println(ap_addr); } @@ -5740,8 +5862,6 @@ void WiFiScan::apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) { extern WiFiScan wifi_scan_obj; wifi_promiscuous_pkt_t *snifferPacket = (wifi_promiscuous_pkt_t*)buf; - WifiMgmtHdr *frameControl = (WifiMgmtHdr*)snifferPacket->payload; - wifi_pkt_rx_ctrl_t ctrl = (wifi_pkt_rx_ctrl_t)snifferPacket->rx_ctrl; int len = snifferPacket->rx_ctrl.sig_len; String display_string = ""; @@ -5751,9 +5871,6 @@ void WiFiScan::apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) if (type == WIFI_PKT_MGMT) { len -= 4; - int fctl = ntohs(frameControl->fctl); - const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)snifferPacket->payload; - const WifiMgmtHdr *hdr = &ipkt->hdr; // If we dont the buffer size is not 0, don't write or else we get CORRUPT_HEAP #ifdef HAS_SCREEN @@ -5788,14 +5905,14 @@ void WiFiScan::apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) if (!in_list) { delay(random(0, 10)); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); + Serial.print(F(" BSSID: ")); Serial.print(addr); display_string.concat(addr); - Serial.print(" ESSID: "); + Serial.print(F(" ESSID: ")); display_string.concat(" -> "); for (int i = 0; i < snifferPacket->payload[37]; i++) { @@ -5890,7 +6007,7 @@ String WiFiScan::processPwnagotchiBeacon(const uint8_t* frame, int length) { while (jsonEndIndex > jsonStartIndex && frame[jsonEndIndex - 1] != '}') jsonEndIndex--; if (jsonStartIndex >= jsonEndIndex) { - Serial.println("JSON payload not found."); + Serial.println(F("JSON payload not found.")); return ""; } @@ -5902,7 +6019,7 @@ String WiFiScan::processPwnagotchiBeacon(const uint8_t* frame, int length) { // Check if we have enough memory before creating StaticJsonDocument if (jsonCapacity > ESP.getFreeHeap()) { - Serial.println("Insufficient memory to parse JSON."); + Serial.println(F("Insufficient memory to parse JSON.")); return ""; } @@ -5911,7 +6028,7 @@ String WiFiScan::processPwnagotchiBeacon(const uint8_t* frame, int length) { DeserializationError error = deserializeJson(doc, jsonString); if (error) { - Serial.print("Failed to parse JSON: "); + Serial.print(F("Failed to parse JSON: ")); Serial.println(error.c_str()); return ""; } @@ -5925,9 +6042,9 @@ String WiFiScan::processPwnagotchiBeacon(const uint8_t* frame, int length) { int uptime = doc["uptime"]; // Print and return the Pwnagotchi name and pwnd_tot - Serial.print("Pwnagotchi Name: "); + Serial.print(F("Pwnagotchi Name: ")); Serial.println(name); - Serial.print("Pwnd Totals: "); + Serial.print(F("Pwnd Totals: ")); Serial.println(pwnd_tot); #ifdef HAS_SCREEN @@ -5945,7 +6062,7 @@ String WiFiScan::processPwnagotchiBeacon(const uint8_t* frame, int length) { return String("Pwnagotchi: ") + name + ", \nPwnd: " + String(pwnd_tot) + ", \nVer: " + ver; } else { - Serial.println("Not a Pwnagotchi frame."); + Serial.println(F("Not a Pwnagotchi frame.")); return ""; } } @@ -6176,10 +6293,10 @@ void WiFiScan::pineScanSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t ty // Check if we've reached the maximum number of tracked APs if (wifi_scan_obj.pinescan_trackers->size() >= MAX_AP_ENTRIES) { if (!wifi_scan_obj.pinescan_list_full_reported) { - Serial.println("AP List Full - Clearing list to make room"); + Serial.println(F("AP List Full - Clearing list to make room")); wifi_scan_obj.pinescan_list_full_reported = true; wifi_scan_obj.pinescan_trackers->clear(); - Serial.println("AP list cleared, continuing scan"); + Serial.println(F("AP list cleared, continuing scan")); } // Add the current AP to the freshly cleared list @@ -6230,8 +6347,8 @@ void WiFiScan::pineScanSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t ty if (pinescan_match) { if (wifi_scan_obj.confirmed_pinescan->size() >= MAX_PINESCAN_ENTRIES) { if (!wifi_scan_obj.pinescan_list_full_reported) { - Serial.println("Confirmed PineScan List Full - Cannot add more"); - Serial.println("Stopping PineScan detection until scan is restarted"); + Serial.println(F("Confirmed PineScan List Full - Cannot add more")); + Serial.println(F("Stopping PineScan detection until scan is restarted")); wifi_scan_obj.pinescan_list_full_reported = true; } return; // Stop processing completely if list is full @@ -6500,8 +6617,8 @@ void WiFiScan::multiSSIDSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t t if (ap_index == -1) { if (wifi_scan_obj.confirmed_multissid->size() >= MAX_MULTISSID_ENTRIES) { if (!wifi_scan_obj.multissid_list_full_reported) { - Serial.println("Confirmed MultiSSID List Full - Cannot add more"); - Serial.println("Stopping MultiSSID detection until scan is restarted"); + Serial.println(F("Confirmed MultiSSID List Full - Cannot add more")); + Serial.println(F("Stopping MultiSSID detection until scan is restarted")); wifi_scan_obj.multissid_list_full_reported = true; } return; // Stop processing completely if list is full @@ -6510,10 +6627,10 @@ void WiFiScan::multiSSIDSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t t // Check if we have reached the maximum number of tracked APs if (wifi_scan_obj.multissid_trackers->size() >= MAX_AP_ENTRIES) { if (!wifi_scan_obj.multissid_list_full_reported) { - Serial.println("AP List Full - Clearing list to make room"); + Serial.println(F("AP List Full - Clearing list to make room")); wifi_scan_obj.multissid_list_full_reported = true; wifi_scan_obj.multissid_trackers->clear(); - Serial.println("AP list cleared, continuing scan"); + Serial.println(F("AP list cleared, continuing scan")); } // Add the current AP to the freshly cleared list @@ -6633,216 +6750,327 @@ void WiFiScan::beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type String display_string = ""; String essid = ""; - if (type == WIFI_PKT_MGMT) - { - len -= 4; - int fctl = ntohs(frameControl->fctl); - const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)snifferPacket->payload; - const WifiMgmtHdr *hdr = &ipkt->hdr; + if ((wifi_scan_obj.currentScanMode == WIFI_SCAN_PROBE) || + (wifi_scan_obj.currentScanMode == WIFI_SCAN_STATION_WAR_DRIVE) || + (wifi_scan_obj.currentScanMode == WIFI_SCAN_AP) || + (wifi_scan_obj.currentScanMode == WIFI_SCAN_PWN)) { + if (type == WIFI_PKT_MGMT) { + len -= 4; + int fctl = ntohs(frameControl->fctl); + const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)snifferPacket->payload; + const WifiMgmtHdr *hdr = &ipkt->hdr; - // If we dont the buffer size is not 0, don't write or else we get CORRUPT_HEAP - #ifdef HAS_SCREEN - int buff = display_obj.display_buffer->size(); - #else - int buff = 0; - #endif - uint8_t target_mac[6] = {0xde, 0xad, 0xbe, 0xef, 0xde, 0xad}; + uint8_t target_mac[6] = {0xde, 0xad, 0xbe, 0xef, 0xde, 0xad}; - // It is a beacon - if ((snifferPacket->payload[0] == 0x80) && (buff == 0)) - { - bool mac_match = true; - for (int i = 0; i < 6; i++) { - if (snifferPacket->payload[10 + i] != target_mac[i]) { - mac_match = false; - break; + // It is a beacon + if (snifferPacket->payload[0] == 0x80) { + bool mac_match = true; + for (int i = 0; i < 6; i++) { + if (snifferPacket->payload[10 + i] != target_mac[i]) { + mac_match = false; + break; + } } - } - // If MAC matches, call processPwnagotchiBeacon with frame data - if (mac_match) { - Serial.println("Pwnagotchi beacon detected!"); - wifi_scan_obj.processPwnagotchiBeacon(snifferPacket->payload, len); - return; - } + // If MAC matches, call processPwnagotchiBeacon with frame data + if (mac_match) { + Serial.println(F("Pwnagotchi beacon detected!")); + wifi_scan_obj.processPwnagotchiBeacon(snifferPacket->payload, len); + return; + } - if (wifi_scan_obj.currentScanMode == WIFI_SCAN_PWN) { - buffer_obj.append(snifferPacket, len); - return; - } - - // Do signal strength stuff first - else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_SIG_STREN) { - bool found = false; - uint8_t targ_index = 0; - AccessPoint targ_ap; + if (wifi_scan_obj.currentScanMode == WIFI_SCAN_PWN) { + buffer_obj.append(snifferPacket, len); + return; + } + + // Do signal strength stuff first + else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_SIG_STREN) { + bool found = false; + uint8_t targ_index = 0; + AccessPoint targ_ap; - // Check list of APs - for (int i = 0; i < access_points->size(); i++) { - if (access_points->get(i).selected) { - uint8_t addr[] = {snifferPacket->payload[10], - snifferPacket->payload[11], - snifferPacket->payload[12], - snifferPacket->payload[13], - snifferPacket->payload[14], - snifferPacket->payload[15]}; - // Compare AP bssid to ssid of recvd packet - for (int x = 0; x < 6; x++) { - if (addr[x] != access_points->get(i).bssid[x]) { - found = false; + // Check list of APs + for (int i = 0; i < access_points->size(); i++) { + if (access_points->get(i).selected) { + uint8_t addr[] = {snifferPacket->payload[10], + snifferPacket->payload[11], + snifferPacket->payload[12], + snifferPacket->payload[13], + snifferPacket->payload[14], + snifferPacket->payload[15]}; + // Compare AP bssid to ssid of recvd packet + for (int x = 0; x < 6; x++) { + if (addr[x] != access_points->get(i).bssid[x]) { + found = false; + break; + } + else + found = true; + } + if (found) { + targ_ap = access_points->get(i); + targ_index = i; break; } - else - found = true; - } - if (found) { - targ_ap = access_points->get(i); - targ_index = i; - break; } } - } - if (!found) - return; - - if ((targ_ap.rssi + 5 < snifferPacket->rx_ctrl.rssi) || (snifferPacket->rx_ctrl.rssi + 5 < targ_ap.rssi)) { - targ_ap.rssi = snifferPacket->rx_ctrl.rssi; - access_points->set(targ_index, targ_ap); - Serial.println((String)access_points->get(targ_index).essid + " RSSI: " + (String)access_points->get(targ_index).rssi); - display_string.concat((String)access_points->get(targ_index).essid); - display_string.concat(" RSSI: "); - display_string.concat((String)access_points->get(targ_index).rssi); - int temp_len = display_string.length(); - for (int i = 0; i < 50 - temp_len; i++) - { - display_string.concat(" "); - } - #ifdef HAS_SCREEN - display_obj.display_buffer->add(display_string); - #endif - return; - } - } - - else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_AP) { - delay(random(0, 10)); - Serial.print("RSSI: "); - Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); - Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); - char addr[] = "00:00:00:00:00:00"; - getMAC(addr, snifferPacket->payload, 10); - Serial.print(addr); - Serial.print(" ESSID Len: " + (String)snifferPacket->payload[37]); - Serial.print(" ESSID: "); - #ifdef HAS_FULL_SCREEN - display_string.concat(snifferPacket->rx_ctrl.rssi); - display_string.concat(" "); - display_string.concat(snifferPacket->rx_ctrl.channel); - display_string.concat(" "); - #endif - if (snifferPacket->payload[37] <= 0) - display_string.concat(addr); - else { - for (int i = 0; i < snifferPacket->payload[37]; i++) - { - Serial.print((char)snifferPacket->payload[i + 38]); - display_string.concat((char)snifferPacket->payload[i + 38]); - } - } - - int temp_len = display_string.length(); - - #ifdef HAS_SCREEN - for (int i = 0; i < 40 - temp_len; i++) - { - display_string.concat(" "); - } - - Serial.print(" "); - - display_obj.display_buffer->add(display_string); - #endif - - Serial.println(); - - buffer_obj.append(snifferPacket, len); - } - else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_WAR_DRIVE) { - #ifdef HAS_GPS - if (gps_obj.getGpsModuleStatus()) { - bool do_save = false; - - // Check if we've already seen this AP - char addr[] = "00:00:00:00:00:00"; - getMAC(addr, snifferPacket->payload, 10); - if (wifi_scan_obj.seen_mac(reinterpret_cast(addr))) - return; - - Serial.print("RSSI: "); - Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); - Serial.print(snifferPacket->rx_ctrl.channel); - - if (snifferPacket->payload[37] > 0) { - Serial.print(" ESSID: "); - for (int i = 0; i < snifferPacket->payload[37]; i++) - { - Serial.print((char)snifferPacket->payload[i + 38]); - display_string.concat((char)snifferPacket->payload[i + 38]); - essid.concat((char)snifferPacket->payload[i + 38]); - } - } - else { - Serial.print(" BSSID: "); - Serial.print(addr); - display_string.concat(addr); - } - - if (gps_obj.getFixStatus()) { - do_save = true; - display_string.concat(" | Lt: " + gps_obj.getLat()); - display_string.concat(" | Ln: " + gps_obj.getLon()); - } - else - display_string.concat(" | GPS: No Fix"); + if (!found) + return; + if ((targ_ap.rssi + 5 < snifferPacket->rx_ctrl.rssi) || (snifferPacket->rx_ctrl.rssi + 5 < targ_ap.rssi)) { + targ_ap.rssi = snifferPacket->rx_ctrl.rssi; + access_points->set(targ_index, targ_ap); + Serial.println((String)access_points->get(targ_index).essid + " RSSI: " + (String)access_points->get(targ_index).rssi); + display_string.concat((String)access_points->get(targ_index).essid); + display_string.concat(" RSSI: "); + display_string.concat((String)access_points->get(targ_index).rssi); int temp_len = display_string.length(); - + for (int i = 0; i < 50 - temp_len; i++) + { + display_string.concat(" "); + } #ifdef HAS_SCREEN - for (int i = 0; i < 40 - temp_len; i++) - { - display_string.concat(" "); - } - - Serial.print(" "); - display_obj.display_buffer->add(display_string); #endif + return; + } + } - Serial.println(); - - wifi_scan_obj.save_mac(reinterpret_cast(addr)); - - int n = WiFi.scanNetworks(false, true, false, 110, wifi_scan_obj.set_channel); - - if (do_save) { - if (n > 0) { - for (int i = 0; i < n; i++) { - Serial.printf("%-32.32s", WiFi.SSID(i).c_str()); - Serial.print(" -> "); - Serial.println(wifi_scan_obj.security_int_to_string(WiFi.encryptionType(i)).c_str()); - } - } - String wardrive_line = (String)addr + "," + essid + "," + wifi_scan_obj.security_int_to_string(snifferPacket->rx_ctrl.channel) + "," + gps_obj.getDatetime() + "," + (String)snifferPacket->rx_ctrl.channel + "," + (String)snifferPacket->rx_ctrl.rssi + "," + gps_obj.getLat() + "," + gps_obj.getLon() + "," + gps_obj.getAlt() + "," + gps_obj.getAccuracy() + ",WIFI"; - Serial.println(wardrive_line); - //buffer_obj.append(wardrive_line); + else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_AP) { + delay(random(0, 10)); + Serial.print(F("RSSI: ")); + Serial.print(snifferPacket->rx_ctrl.rssi); + Serial.print(F(" Ch: ")); + Serial.print(snifferPacket->rx_ctrl.channel); + Serial.print(F(" BSSID: ")); + char addr[] = "00:00:00:00:00:00"; + getMAC(addr, snifferPacket->payload, 10); + Serial.print(addr); + Serial.print(" ESSID Len: " + (String)snifferPacket->payload[37]); + Serial.print(F(" ESSID: ")); + #ifdef HAS_FULL_SCREEN + display_string.concat(snifferPacket->rx_ctrl.rssi); + display_string.concat(" "); + display_string.concat(snifferPacket->rx_ctrl.channel); + display_string.concat(" "); + #endif + if (snifferPacket->payload[37] <= 0) + display_string.concat(addr); + else { + for (int i = 0; i < snifferPacket->payload[37]; i++) + { + Serial.print((char)snifferPacket->payload[i + 38]); + display_string.concat((char)snifferPacket->payload[i + 38]); } } - #endif - } + + int temp_len = display_string.length(); + + #ifdef HAS_SCREEN + for (int i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + + Serial.print(" "); + + display_obj.display_buffer->add(display_string); + #endif + + Serial.println(); + + buffer_obj.append(snifferPacket, len); + } + else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_WAR_DRIVE) { + #ifdef HAS_GPS + if (gps_obj.getGpsModuleStatus()) { + bool do_save = false; + + // Check if we've already seen this AP + char addr[] = "00:00:00:00:00:00"; + getMAC(addr, snifferPacket->payload, 10); + if (wifi_scan_obj.seen_mac(reinterpret_cast(addr))) + return; + + Serial.print(F("RSSI: ")); + Serial.print(snifferPacket->rx_ctrl.rssi); + Serial.print(F(" Ch: ")); + Serial.print(snifferPacket->rx_ctrl.channel); + + if (snifferPacket->payload[37] > 0) { + Serial.print(F(" ESSID: ")); + for (int i = 0; i < snifferPacket->payload[37]; i++) + { + Serial.print((char)snifferPacket->payload[i + 38]); + display_string.concat((char)snifferPacket->payload[i + 38]); + essid.concat((char)snifferPacket->payload[i + 38]); + } + } + else { + Serial.print(F(" BSSID: ")); + Serial.print(addr); + display_string.concat(addr); + } + + if (gps_obj.getFixStatus()) { + do_save = true; + display_string.concat(" | Lt: " + gps_obj.getLat()); + display_string.concat(" | Ln: " + gps_obj.getLon()); + } + else + display_string.concat(" | GPS: No Fix"); + + int temp_len = display_string.length(); + + #ifdef HAS_SCREEN + for (int i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + + Serial.print(" "); + + display_obj.display_buffer->add(display_string); + #endif + + Serial.println(); + + wifi_scan_obj.save_mac(reinterpret_cast(addr)); + + int n = WiFi.scanNetworks(false, true, false, 110, wifi_scan_obj.set_channel); + + if (do_save) { + if (n > 0) { + for (int i = 0; i < n; i++) { + Serial.printf("%-32.32s", WiFi.SSID(i).c_str()); + Serial.print(F(" -> ")); + Serial.println(wifi_scan_obj.security_int_to_string(WiFi.encryptionType(i)).c_str()); + } + } + String wardrive_line = (String)addr + "," + essid + "," + wifi_scan_obj.security_int_to_string(snifferPacket->rx_ctrl.channel) + "," + gps_obj.getDatetime() + "," + (String)snifferPacket->rx_ctrl.channel + "," + (String)snifferPacket->rx_ctrl.rssi + "," + gps_obj.getLat() + "," + gps_obj.getLon() + "," + gps_obj.getAlt() + "," + gps_obj.getAccuracy() + ",WIFI"; + Serial.println(wardrive_line); + //buffer_obj.append(wardrive_line); + } + } + #endif + } + } + else if ((snifferPacket->payload[0] == 0x40) && (buf == 0)) { + if (wifi_scan_obj.currentScanMode == WIFI_SCAN_PROBE) { + String probe_req_essid; + + delay(random(0, 10)); + Serial.print(F("RSSI: ")); + Serial.print(snifferPacket->rx_ctrl.rssi); + Serial.print(F(" Ch: ")); + Serial.print(snifferPacket->rx_ctrl.channel); + Serial.print(F(" Client: ")); + char addr[] = "00:00:00:00:00:00"; + getMAC(addr, snifferPacket->payload, 10); + Serial.print(addr); + display_string.concat(addr); + Serial.print(F(" Requesting: ")); + display_string.concat(" -> "); + for (int i = 0; i < snifferPacket->payload[25]; i++) + { + Serial.print((char)snifferPacket->payload[26 + i]); + probe_req_essid.concat((char)snifferPacket->payload[26 + i]); + } + + display_string.concat(probe_req_essid); + + if (probe_req_essid.length() > 0) { + bool essidExist = false; + for (int i = 0; i < probe_req_ssids->size(); i++) { + ProbeReqSsid cur_probe_ssid = probe_req_ssids->get(i); + if (cur_probe_ssid.essid == probe_req_essid) { + cur_probe_ssid.requests++; + probe_req_ssids->set(i, cur_probe_ssid); + essidExist = true; + break; + } + } + if (!essidExist) { + ProbeReqSsid probeReqSsid; + probeReqSsid.essid = probe_req_essid; + probeReqSsid.requests = 1; + probeReqSsid.selected = false; + probe_req_ssids->add(probeReqSsid); + } + } + // Print spaces because of the rotating lines of the hardware scroll. + // The same characters print from previous lines so I just overwrite them + // with spaces. + #ifdef HAS_SCREEN + for (int i = 0; i < 19 - snifferPacket->payload[25]; i++) + { + display_string.concat(" "); + } + + display_obj.display_buffer->add(display_string); + #endif + + Serial.println(); + + buffer_obj.append(snifferPacket, len); + } + else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_STATION_WAR_DRIVE) { + #ifdef HAS_GPS + if (gps_obj.getGpsModuleStatus()) { + bool do_save = false; + + // Check if we've already seen this AP + char addr[] = "00:00:00:00:00:00"; + getMAC(addr, snifferPacket->payload, 10); + if (wifi_scan_obj.seen_mac(reinterpret_cast(addr))) + return; + + Serial.print(F("RSSI: ")); + Serial.print(snifferPacket->rx_ctrl.rssi); + Serial.print(F(" Ch: ")); + Serial.print(snifferPacket->rx_ctrl.channel); + + Serial.print(F(" BSSID: ")); + Serial.print(addr); + display_string.concat(addr); + + if (gps_obj.getFixStatus()) { + do_save = true; + display_string.concat(" | Lt: " + gps_obj.getLat()); + display_string.concat(" | Ln: " + gps_obj.getLon()); + } + else + display_string.concat(" | GPS: No Fix"); + + int temp_len = display_string.length(); + + #ifdef HAS_SCREEN + for (int i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + + Serial.print(" "); + + + display_obj.display_buffer->add(display_string); + #endif + + Serial.println(); + + //wifi_scan_obj.save_mac(reinterpret_cast(addr)); + + if (do_save) { + String wardrive_line = (String)addr + "," + (String)addr + ",," + gps_obj.getDatetime() + "," + (String)snifferPacket->rx_ctrl.channel + "," + (String)snifferPacket->rx_ctrl.rssi + "," + gps_obj.getLat() + "," + gps_obj.getLon() + "," + gps_obj.getAlt() + "," + gps_obj.getAccuracy() + ",WIFI"; + Serial.println(wardrive_line); + buffer_obj.append(wardrive_line); + } + } + #endif + } + } } } } @@ -6966,17 +7194,17 @@ void WiFiScan::stationSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t typ char sta_addr[] = "00:00:00:00:00:00"; if (ap_is_src) { - Serial.print("ap: "); + Serial.print(F("ap: ")); Serial.print(ap_addr); - Serial.print(" -> sta: "); + Serial.print(F(" -> sta: ")); getMAC(sta_addr, snifferPacket->payload, 4); Serial.println(sta_addr); } else { - Serial.print("sta: "); + Serial.print(F("sta: ")); getMAC(sta_addr, snifferPacket->payload, 10); Serial.print(sta_addr); - Serial.print(" -> ap: "); + Serial.print(F(" -> ap: ")); Serial.println(ap_addr); } @@ -7155,17 +7383,17 @@ void WiFiScan::deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type if ((snifferPacket->payload[0] == 0xA0 || snifferPacket->payload[0] == 0xC0 ) && (buf == 0)) { delay(random(0, 10)); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); + Serial.print(F(" BSSID: ")); char addr[] = "00:00:00:00:00:00"; char dst_addr[] = "00:00:00:00:00:00"; getMAC(addr, snifferPacket->payload, 10); getMAC(dst_addr, snifferPacket->payload, 4); Serial.print(addr); - Serial.print(" -> "); + Serial.print(F(" -> ")); Serial.print(dst_addr); display_string.concat(text_table4[0]); display_string.concat(snifferPacket->rx_ctrl.rssi); @@ -7191,7 +7419,7 @@ void WiFiScan::deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type } } -void WiFiScan::probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) { +/*void WiFiScan::probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) { extern WiFiScan wifi_scan_obj; @@ -7222,16 +7450,16 @@ void WiFiScan::probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) String probe_req_essid; delay(random(0, 10)); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" Client: "); + Serial.print(F(" Client: ")); char addr[] = "00:00:00:00:00:00"; getMAC(addr, snifferPacket->payload, 10); Serial.print(addr); display_string.concat(addr); - Serial.print(" Requesting: "); + Serial.print(F(" Requesting: ")); display_string.concat(" -> "); for (int i = 0; i < snifferPacket->payload[25]; i++) { @@ -7287,12 +7515,12 @@ void WiFiScan::probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) if (wifi_scan_obj.seen_mac(reinterpret_cast(addr))) return; - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); + Serial.print(F(" BSSID: ")); Serial.print(addr); display_string.concat(addr); @@ -7332,7 +7560,7 @@ void WiFiScan::probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) } } } -} +}*/ void WiFiScan::beaconListSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) { wifi_promiscuous_pkt_t *snifferPacket = (wifi_promiscuous_pkt_t*)buf; @@ -7378,16 +7606,16 @@ void WiFiScan::beaconListSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t return; delay(random(0, 10)); - Serial.print("RSSI: "); + Serial.print(F("RSSI: ")); Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); + Serial.print(F(" Ch: ")); Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" Client: "); + Serial.print(F(" Client: ")); char addr[] = "00:00:00:00:00:00"; getMAC(addr, snifferPacket->payload, 10); Serial.print(addr); display_string.concat(addr); - Serial.print(" Requesting: "); + Serial.print(F(" Requesting: ")); display_string.concat(" -> "); // ESSID @@ -8514,7 +8742,7 @@ void WiFiScan::eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) if (( (snifferPacket->payload[30] == 0x88 && snifferPacket->payload[31] == 0x8e)|| ( snifferPacket->payload[32] == 0x88 && snifferPacket->payload[33] == 0x8e) )){ num_eapol++; - Serial.println("Received EAPOL:"); + Serial.println(F("Received EAPOL:")); char addr[] = "00:00:00:00:00:00"; getMAC(addr, snifferPacket->payload, 10); @@ -8622,7 +8850,7 @@ void WiFiScan::activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t if (( (snifferPacket->payload[30] == 0x88 && snifferPacket->payload[31] == 0x8e)|| ( snifferPacket->payload[32] == 0x88 && snifferPacket->payload[33] == 0x8e) )){ num_eapol++; - Serial.println("Received EAPOL:"); + Serial.println(F("Received EAPOL:")); } @@ -8687,7 +8915,6 @@ bool WiFiScan::filterActive() { // Channel - button pressed if (b == 4) { if (set_channel > 1) { - Serial.println("Shit channel down"); set_channel--; delay(70); display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); @@ -8701,7 +8928,6 @@ bool WiFiScan::filterActive() { // Channel + button pressed else if (b == 5) { if (set_channel < MAX_CHANNEL) { - Serial.println("Shit channel up"); set_channel++; delay(70); display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); @@ -8712,7 +8938,6 @@ bool WiFiScan::filterActive() { } } else if (b == 6) { - Serial.println("Exiting packet monitor..."); this->StartScan(WIFI_SCAN_OFF); //display_obj.init(); this->orient_display = true; @@ -8726,7 +8951,7 @@ bool WiFiScan::filterActive() { initTime = millis(); y_pos_x = ((-num_eapol * (y_scale * 3)) + (HEIGHT_1 - 2)); // GREEN if (y_pos_x >= HEIGHT_1) { - Serial.println("Max EAPOL number reached. Adjusting..."); + Serial.println(F("Max EAPOL number reached. Adjusting...")); num_eapol = 0; } @@ -8885,7 +9110,6 @@ bool WiFiScan::filterActive() { // Channel - button pressed else if (b == 4) { if (set_channel > 1) { - Serial.println("Shit channel down"); set_channel--; delay(70); display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); @@ -8901,7 +9125,6 @@ bool WiFiScan::filterActive() { // Channel + button pressed else if (b == 5) { if (set_channel < MAX_CHANNEL) { - Serial.println("Shit channel up"); set_channel++; delay(70); display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); @@ -8914,7 +9137,6 @@ bool WiFiScan::filterActive() { } } else if (b == 6) { - Serial.println("Exiting packet monitor..."); this->StartScan(WIFI_SCAN_OFF); this->orient_display = true; return; @@ -9076,7 +9298,7 @@ void WiFiScan::channelHop(bool filtered, bool ranged) if (access_points->get(i).selected) { ap_selected = true; if (access_points->get(i).channel == this->set_channel) { - Serial.println("Setting to channel " + (String)this->set_channel + " for AP " + access_points->get(i).essid); + //Serial.println("Setting to channel " + (String)this->set_channel + " for AP " + access_points->get(i).essid); channel_match = true; break; } @@ -9168,7 +9390,7 @@ void WiFiScan::drawChannelLine() { display_obj.tft.fillRect(0, TFT_HEIGHT - GRAPH_VERT_LIM - (CHAR_WIDTH * 2), TFT_WIDTH, (CHAR_WIDTH * 2) - 1, TFT_BLACK); //#else //#endif - Serial.println("Drawing channel line..."); + //Serial.println("Drawing channel line..."); #ifndef HAS_DUAL_BAND for (int i = 1; i < CHAN_PER_PAGE + 1; i++) { int x_mult = (i * 2) - 1; @@ -9213,7 +9435,7 @@ void WiFiScan::channelActivityLoop(uint32_t tick) { if (tick - this->initTime >= BANNER_TIME * 50) { initTime = millis(); - Serial.println("--------------"); + Serial.println(F("--------------")); for (int i = (activity_page * CHAN_PER_PAGE) - CHAN_PER_PAGE; i < activity_page * CHAN_PER_PAGE; i++) { #ifndef HAS_DUAL_BAND Serial.println((String)(i+1) + ": " + (String)channel_activity[i]); @@ -9369,7 +9591,7 @@ void WiFiScan::renderRawStats() { display_obj.tft.setTextSize(1); display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK); - display_obj.tft.println("Stats\n"); + display_obj.tft.println(F("Stats\n")); display_obj.tft.println(" Mgmt: " + (String)this->mgmt_frames); display_obj.tft.println(" Data: " + (String)this->data_frames); @@ -9750,7 +9972,7 @@ void WiFiScan::portScan(uint8_t scan_mode, uint16_t targ_port) { if (this->current_scan_port < MAX_PORT) { this->current_scan_port = getNextPort(this->current_scan_port); if (this->current_scan_port % 1000 == 0) { - Serial.print("Checking IP: "); + Serial.print(F("Checking IP: ")); Serial.print(this->current_scan_ip); Serial.print(" Port: "); Serial.println(this->current_scan_port); @@ -10048,7 +10270,8 @@ void WiFiScan::main(uint32_t currentTime) #endif #endif } - else if (currentScanMode == WIFI_SCAN_EAPOL) + else if ((currentScanMode == WIFI_SCAN_EAPOL) || + (currentScanMode == WIFI_SCAN_ACTIVE_EAPOL)) { #ifdef HAS_SCREEN #ifdef HAS_ILI9341 @@ -10056,12 +10279,12 @@ void WiFiScan::main(uint32_t currentTime) #endif #endif } - else if (currentScanMode == WIFI_SCAN_ACTIVE_EAPOL) + /*else if (currentScanMode == WIFI_SCAN_ACTIVE_EAPOL) { #ifdef HAS_SCREEN eapolMonitorMain(currentTime); #endif - } + }*/ else if (currentScanMode == WIFI_SCAN_ACTIVE_LIST_EAPOL) { if (currentTime - initTime >= 1000) { initTime = millis(); @@ -10071,7 +10294,7 @@ void WiFiScan::main(uint32_t currentTime) eapolMonitorMain(currentTime); #endif } - else if ((currentScanMode == BT_SCAN_SIMPLE) || (currentScanMode == BT_SCAN_SIMPLE_TWO)) { + /*else if ((currentScanMode == BT_SCAN_SIMPLE) || (currentScanMode == BT_SCAN_SIMPLE_TWO)) { if (currentTime - initTime >= 1000) { initTime = millis(); String displayString = "BT Frames: "; @@ -10081,7 +10304,7 @@ void WiFiScan::main(uint32_t currentTime) display_obj.showCenterText(displayString, TFT_HEIGHT / 2); #endif } - } + }*/ else if (currentScanMode == WIFI_ATTACK_AUTH) { for (int i = 0; i < 55; i++) this->sendProbeAttack(currentTime); @@ -10144,25 +10367,34 @@ void WiFiScan::main(uint32_t currentTime) } } else if (currentScanMode == WIFI_ATTACK_DEAUTH) { - for (int i = 0; i < 55; i++) + for (int i = 0; i < 55; i++) { this->sendDeauthAttack(currentTime, this->dst_mac); + } if (currentTime - initTime >= 1000) { initTime = millis(); - String displayString = ""; - String displayString2 = ""; - displayString.concat(text18); - displayString.concat(packets_sent); - for (int x = 0; x < STANDARD_FONT_CHAR_LIMIT; x++) - displayString2.concat(" "); - #ifdef HAS_SCREEN - display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK); - display_obj.showCenterText(displayString2, TFT_HEIGHT / 2); - display_obj.showCenterText(displayString, TFT_HEIGHT / 2); - #endif + + char displayString[64]; // adjust size as needed + + snprintf(displayString, sizeof(displayString), "%s%u", + text18, static_cast(packets_sent)); + + char displayString2[STANDARD_FONT_CHAR_LIMIT + 1]; + for (int x = 0; x < STANDARD_FONT_CHAR_LIMIT; x++) { + displayString2[x] = ' '; + } + displayString2[STANDARD_FONT_CHAR_LIMIT] = '\0'; + + #ifdef HAS_SCREEN + display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK); + display_obj.showCenterText(displayString2, TFT_HEIGHT / 2); + display_obj.showCenterText(displayString, TFT_HEIGHT / 2); + #endif + packets_sent = 0; } } + else if (currentScanMode == WIFI_ATTACK_DEAUTH_MANUAL) { for (int i = 0; i < 55; i++) this->sendDeauthFrame(this->src_mac, this->set_channel, this->dst_mac); diff --git a/esp32_marauder/WiFiScan.h b/esp32_marauder/WiFiScan.h index 16afa12..90a5298 100644 --- a/esp32_marauder/WiFiScan.h +++ b/esp32_marauder/WiFiScan.h @@ -792,7 +792,7 @@ class WiFiScan static void apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); static void apSnifferCallbackFull(void* buf, wifi_promiscuous_pkt_type_t type); static void deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); - static void probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); + //static void probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); static void beaconListSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); static void activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); static void eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type); diff --git a/esp32_marauder/configs.h b/esp32_marauder/configs.h index a262e4a..4cf68db 100644 --- a/esp32_marauder/configs.h +++ b/esp32_marauder/configs.h @@ -32,7 +32,7 @@ //#define MARAUDER_V8 //// END BOARD TARGETS - #define MARAUDER_VERSION "v1.8.11" + #define MARAUDER_VERSION "v1.9.0" #define GRAPH_REFRESH 100 @@ -2283,7 +2283,7 @@ //// EVIL PORTAL STUFF #ifdef HAS_PSRAM - #define MAX_HTML_SIZE 30000 + #define MAX_HTML_SIZE 20000 #else #define MAX_HTML_SIZE 11400 #endif @@ -2293,7 +2293,7 @@ //// GPS STUFF #ifdef HAS_GPS #ifdef HAS_PSRAM - #define mac_history_len 500 + #define mac_history_len 100 #else #define mac_history_len 100 #endif