diff --git a/esp32_marauder/Display.h b/esp32_marauder/Display.h index 1f13afb..34082e8 100644 --- a/esp32_marauder/Display.h +++ b/esp32_marauder/Display.h @@ -47,7 +47,7 @@ class Display public: Display(); TFT_eSPI tft = TFT_eSPI(); - String version_number = "v0.1"; + String version_number = "v0.2"; bool printing = false; bool loading = false; diff --git a/esp32_marauder/MenuFunctions.cpp b/esp32_marauder/MenuFunctions.cpp index 5b38ec5..26a5de9 100644 --- a/esp32_marauder/MenuFunctions.cpp +++ b/esp32_marauder/MenuFunctions.cpp @@ -40,6 +40,7 @@ void MenuFunctions::main() (wifi_scan_obj.currentScanMode == WIFI_SCAN_AP) || (wifi_scan_obj.currentScanMode == WIFI_SCAN_ST) || (wifi_scan_obj.currentScanMode == WIFI_SCAN_ALL) || + (wifi_scan_obj.currentScanMode == WIFI_SCAN_DEAUTH) || (wifi_scan_obj.currentScanMode == WIFI_ATTACK_BEACON_SPAM) || (wifi_scan_obj.currentScanMode == WIFI_ATTACK_RICK_ROLL) || (wifi_scan_obj.currentScanMode == BT_SCAN_ALL) || @@ -136,16 +137,17 @@ void MenuFunctions::RunSetup() // Build WiFi Menu wifiMenu.parentMenu = &mainMenu; // Main Menu is second menu parent - addNodes(&wifiMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(wifiMenu.parentMenu);}); - addNodes(&wifiMenu, "Sniffers", TFT_LIGHTGREY, NULL, 1, [this](){changeMenu(&wifiSnifferMenu);}); - addNodes(&wifiMenu, "Scanners", TFT_YELLOW, NULL, 1, [this](){changeMenu(&wifiScannerMenu);}); - addNodes(&wifiMenu, "Attacks", TFT_ORANGE, NULL, 1, [this](){changeMenu(&wifiAttackMenu);}); + addNodes(&wifiMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(wifiMenu.parentMenu);}); + addNodes(&wifiMenu, "Sniffers", TFT_YELLOW, NULL, 1, [this](){changeMenu(&wifiSnifferMenu);}); + addNodes(&wifiMenu, "Scanners", TFT_ORANGE, NULL, 1, [this](){changeMenu(&wifiScannerMenu);}); + addNodes(&wifiMenu, "Attacks", TFT_RED, NULL, 1, [this](){changeMenu(&wifiAttackMenu);}); // Build WiFi sniffer Menu wifiSnifferMenu.parentMenu = &wifiMenu; // Main Menu is second menu parent - addNodes(&wifiSnifferMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(wifiSnifferMenu.parentMenu);}); + addNodes(&wifiSnifferMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(wifiSnifferMenu.parentMenu);}); addNodes(&wifiSnifferMenu, "Probe Request Sniff", TFT_CYAN, NULL, 2, [this](){wifi_scan_obj.StartScan(WIFI_SCAN_PROBE, TFT_CYAN);}); addNodes(&wifiSnifferMenu, "Beacon Sniff", TFT_MAGENTA, NULL, 3, [this](){wifi_scan_obj.StartScan(WIFI_SCAN_AP, TFT_MAGENTA);}); + addNodes(&wifiSnifferMenu, "Deauth Sniff", TFT_RED, NULL, 4, [this](){wifi_scan_obj.StartScan(WIFI_SCAN_DEAUTH, TFT_RED);}); // Build WiFi scanner Menu wifiScannerMenu.parentMenu = &wifiMenu; // Main Menu is second menu parent @@ -153,28 +155,28 @@ void MenuFunctions::RunSetup() // Build WiFi attack menu wifiAttackMenu.parentMenu = &wifiMenu; // Main Menu is second menu parent - addNodes(&wifiAttackMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(wifiAttackMenu.parentMenu);}); + addNodes(&wifiAttackMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(wifiAttackMenu.parentMenu);}); addNodes(&wifiAttackMenu, "Beacon Spam Random", TFT_ORANGE, NULL, 1, [this](){wifi_scan_obj.StartScan(WIFI_ATTACK_BEACON_SPAM, TFT_ORANGE);}); addNodes(&wifiAttackMenu, "Rick Roll Beacon", TFT_YELLOW, NULL, 1, [this](){wifi_scan_obj.StartScan(WIFI_ATTACK_RICK_ROLL, TFT_YELLOW);}); // Build Bluetooth Menu bluetoothMenu.parentMenu = &mainMenu; // Second Menu is third menu parent - addNodes(&bluetoothMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(bluetoothMenu.parentMenu);}); - addNodes(&bluetoothMenu, "Sniffers", TFT_LIGHTGREY, NULL, 1, [this](){changeMenu(&bluetoothSnifferMenu);}); - addNodes(&bluetoothMenu, "Scanners", TFT_YELLOW, NULL, 1, [this](){changeMenu(&bluetoothScannerMenu);}); + addNodes(&bluetoothMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(bluetoothMenu.parentMenu);}); + addNodes(&bluetoothMenu, "Sniffers", TFT_YELLOW, NULL, 1, [this](){changeMenu(&bluetoothSnifferMenu);}); + addNodes(&bluetoothMenu, "Scanners", TFT_ORANGE, NULL, 1, [this](){changeMenu(&bluetoothScannerMenu);}); // Build bluetooth sniffer Menu bluetoothSnifferMenu.parentMenu = &bluetoothMenu; // Second Menu is third menu parent - addNodes(&bluetoothSnifferMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(bluetoothSnifferMenu.parentMenu);}); + addNodes(&bluetoothSnifferMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(bluetoothSnifferMenu.parentMenu);}); addNodes(&bluetoothSnifferMenu, "Bluetooth Sniffer", TFT_GREEN, NULL, 1, [this](){wifi_scan_obj.StartScan(BT_SCAN_ALL, TFT_GREEN);}); // Build bluetooth scanner Menu bluetoothScannerMenu.parentMenu = &bluetoothMenu; // Second Menu is third menu parent - addNodes(&bluetoothScannerMenu, "Back", TFT_RED, NULL, 0, [this](){changeMenu(bluetoothScannerMenu.parentMenu);}); + addNodes(&bluetoothScannerMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){changeMenu(bluetoothScannerMenu.parentMenu);}); addNodes(&bluetoothScannerMenu, "Detect Card Skimmers", TFT_MAGENTA, NULL, 2, [this](){wifi_scan_obj.StartScan(BT_SCAN_SKIMMERS, TFT_MAGENTA);}); generalMenu.parentMenu = &mainMenu; - addNodes(&generalMenu, "Back", TFT_RED, NULL, 0, [this](){display_obj.draw_tft = false; changeMenu(generalMenu.parentMenu);}); + addNodes(&generalMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this](){display_obj.draw_tft = false; changeMenu(generalMenu.parentMenu);}); addNodes(&generalMenu, "Draw", TFT_WHITE, NULL, 1, [this](){display_obj.clearScreen(); display_obj.draw_tft = true;}); diff --git a/esp32_marauder/esp32_marauder_20191212.bin b/esp32_marauder/PreviousVersions/esp32_marauder_v0_1_20191212.bin similarity index 100% rename from esp32_marauder/esp32_marauder_20191212.bin rename to esp32_marauder/PreviousVersions/esp32_marauder_v0_1_20191212.bin diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index 9b16388..5c64d0a 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -120,6 +120,8 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color) RunProbeScan(scan_mode, color); else if (scan_mode == WIFI_SCAN_AP) RunBeaconScan(scan_mode, color); + else if (scan_mode == WIFI_SCAN_DEAUTH) + RunDeauthScan(scan_mode, color); else if (scan_mode == WIFI_ATTACK_BEACON_SPAM) RunBeaconSpam(scan_mode, color); else if (scan_mode == WIFI_ATTACK_RICK_ROLL) @@ -139,6 +141,7 @@ void WiFiScan::StopScan(uint8_t scan_mode) (currentScanMode == WIFI_SCAN_AP) || (currentScanMode == WIFI_SCAN_ST) || (currentScanMode == WIFI_SCAN_ALL) || + (currentScanMode == WIFI_SCAN_DEAUTH) || (currentScanMode == WIFI_ATTACK_BEACON_SPAM) || (currentScanMode == WIFI_ATTACK_RICK_ROLL)) { @@ -241,6 +244,32 @@ void WiFiScan::RunBeaconScan(uint8_t scan_mode, uint16_t color) initTime = millis(); } +void WiFiScan::RunDeauthScan(uint8_t scan_mode, uint16_t color) +{ + display_obj.TOP_FIXED_AREA_2 = 32; + display_obj.tteBar = true; + display_obj.print_delay_1 = 15; + display_obj.print_delay_2 = 10; + display_obj.clearScreen(); + display_obj.initScrollValues(true); + display_obj.tft.setTextWrap(false); + display_obj.tft.setTextColor(TFT_BLACK, color); + display_obj.tft.fillRect(0,0,240,16, color); + display_obj.tft.drawCentreString(" Deauthentication Sniffer ",120,0,2); + display_obj.touchToExit(); + display_obj.tft.setTextColor(TFT_RED, TFT_BLACK); + display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA); + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + esp_wifi_init(&cfg); + esp_wifi_set_storage(WIFI_STORAGE_RAM); + esp_wifi_set_mode(WIFI_MODE_NULL); + esp_wifi_set_promiscuous(true); + esp_wifi_set_promiscuous_filter(&filt); + esp_wifi_set_promiscuous_rx_cb(&deauthSnifferCallback); + esp_wifi_set_channel(set_channel, WIFI_SECOND_CHAN_NONE); + initTime = millis(); +} + // Function for running probe request scan void WiFiScan::RunProbeScan(uint8_t scan_mode, uint16_t color) @@ -364,6 +393,61 @@ void WiFiScan::beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type display_string.concat((char)snifferPacket->payload[i + 38]); } + int temp_len = display_string.length(); + for (int i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + + Serial.print(" "); + + if (display_obj.display_buffer->size() == 0) + { + display_obj.loading = true; + display_obj.display_buffer->add(display_string); + display_obj.loading = false; + } + + + + Serial.println(); + } + } +} + +void WiFiScan::deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) +{ + 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 = ""; + + if (type == WIFI_PKT_MGMT) + { + 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 + if ((snifferPacket->payload[0] == 0xA0 || snifferPacket->payload[0] == 0xC0 ) && (display_obj.display_buffer->size() == 0)) + { + 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); + display_string.concat(" RSSI: "); + display_string.concat(snifferPacket->rx_ctrl.rssi); + + display_string.concat(" "); + display_string.concat(addr); + for (int i = 0; i < 19 - snifferPacket->payload[37]; i++) { display_string.concat(" "); @@ -583,6 +667,7 @@ void WiFiScan::main(uint32_t currentTime) if ((currentScanMode == WIFI_SCAN_PROBE) || (currentScanMode == WIFI_SCAN_AP) || (currentScanMode == WIFI_SCAN_ST) || + (currentScanMode == WIFI_SCAN_DEAUTH) || (currentScanMode == WIFI_SCAN_ALL)) { if (currentTime - initTime >= 1000) diff --git a/esp32_marauder/WiFiScan.h b/esp32_marauder/WiFiScan.h index 22a1e09..67ac54c 100644 --- a/esp32_marauder/WiFiScan.h +++ b/esp32_marauder/WiFiScan.h @@ -18,11 +18,12 @@ #define WIFI_SCAN_PROBE 1 #define WIFI_SCAN_AP 2 #define WIFI_SCAN_ST 3 -#define WIFI_SCAN_ALL 4 -#define WIFI_ATTACK_BEACON_SPAM 5 -#define WIFI_ATTACK_RICK_ROLL 6 -#define BT_SCAN_ALL 7 -#define BT_SCAN_SKIMMERS 8 +#define WIFI_SCAN_DEAUTH 4 +#define WIFI_SCAN_ALL 5 +#define WIFI_ATTACK_BEACON_SPAM 6 +#define WIFI_ATTACK_RICK_ROLL 7 +#define BT_SCAN_ALL 8 +#define BT_SCAN_SKIMMERS 9 extern Display display_obj; @@ -88,6 +89,7 @@ class WiFiScan void RunRickRoll(uint8_t scan_mode, uint16_t color); void RunBeaconSpam(uint8_t scan_mode, uint16_t color); void RunBeaconScan(uint8_t scan_mode, uint16_t color); + void RunDeauthScan(uint8_t scan_mode, uint16_t color); void RunProbeScan(uint8_t scan_mode, uint16_t color); void RunBluetoothScan(uint8_t scan_mode, uint16_t color); static void scanCompleteCB(BLEScanResults scanResults); @@ -105,6 +107,7 @@ class WiFiScan static void getMAC(char *addr, uint8_t* data, uint16_t offset); static void beaconSnifferCallback(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); }; #endif diff --git a/esp32_marauder/esp32_marauder_v0_2_20200117.bin b/esp32_marauder/esp32_marauder_v0_2_20200117.bin new file mode 100644 index 0000000..ee656d4 Binary files /dev/null and b/esp32_marauder/esp32_marauder_v0_2_20200117.bin differ