From 3ee711cfee798250621719cf6b93c65c91679c2d Mon Sep 17 00:00:00 2001 From: Pirata <104320209+bmorcelli@users.noreply.github.com> Date: Mon, 20 May 2024 17:22:08 -0300 Subject: [PATCH 1/3] desprited mainMenu drawings and minnor fixes Desprited mainMenu drawings Fixed double flicker of cardputer keyboard entries changed name of scan_host functions because there were other function in arp.h with same name. --- src/display.cpp | 103 ++++++++++++++++++++++----------------------- src/display.h | 12 +++--- src/main.cpp | 2 +- src/mykeyboard.cpp | 2 +- src/scan_hosts.cpp | 2 +- src/scan_hosts.h | 2 +- 6 files changed, 60 insertions(+), 63 deletions(-) diff --git a/src/display.cpp b/src/display.cpp index 9266e6567..c5022a512 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -258,29 +258,27 @@ void drawMainMenu(int index) { const char* texts[6] = { "WiFi", "BLE", "RF", "RFID", "Others", "Config" }; - draw.deleteSprite(); - draw.createSprite(80,80); drawMainBorder(); tft.setTextSize(FG); switch(index) { case 0: - drawWifi(); + drawWifi(80,27); break; case 1: - drawBLE(); + drawBLE(80,27); break; case 2: - drawRf(); + drawRf(80,27); break; case 3: - drawRfid(); + drawRfid(80,27); break; case 4: - drawOther(); + drawOther(80,27); break; case 5: - drawCfg(); + drawCfg(80,27); break; } tft.setTextSize(FM); @@ -288,8 +286,7 @@ void drawMainMenu(int index) { tft.setTextSize(FG); tft.drawChar('<',10,tft.height()/2+10); tft.drawChar('>',tft.width()-(LW*FG+10),tft.height()/2+10); - draw.pushSprite(80,27); - draw.deleteSprite(); + } @@ -418,11 +415,11 @@ void drawWifiSmall(int x, int y) { draw.deleteSprite(); } -void drawWifi() { - draw.fillSprite(BGCOLOR); - draw.fillCircle(40,60,6,FGCOLOR); - draw.drawSmoothArc(40,60,26,20,130,230,FGCOLOR, BGCOLOR,true); - draw.drawSmoothArc(40,60,46,40,130,230,FGCOLOR, BGCOLOR,true); +void drawWifi(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); + tft.fillCircle(40+x,60+y,6,FGCOLOR); + tft.drawSmoothArc(40+x,60+y,26,20,130,230,FGCOLOR, BGCOLOR,true); + tft.drawSmoothArc(40+x,60+y,46,40,130,230,FGCOLOR, BGCOLOR,true); } void drawBLESmall(int x, int y) { @@ -439,54 +436,54 @@ void drawBLESmall(int x, int y) { draw.deleteSprite(); } -void drawBLE() { - draw.fillSprite(BGCOLOR); - draw.drawWideLine(40,53,2,26,5,FGCOLOR,BGCOLOR); - draw.drawWideLine(40,26,2,53,5,FGCOLOR,BGCOLOR); - draw.fillTriangle(40,26,20,40,20,12,FGCOLOR); - draw.fillTriangle(40,53,20,40,20,68,FGCOLOR); - draw.drawArc(40,40,10,12,210,330,FGCOLOR,BGCOLOR); - draw.drawArc(40,40,23,25,210,330,FGCOLOR,BGCOLOR); - draw.drawArc(40,40,36,38,210,330,FGCOLOR,BGCOLOR); +void drawBLE(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); + tft.drawWideLine(40+x,53+y,2+x,26+y,5,FGCOLOR,BGCOLOR); + tft.drawWideLine(40+x,26+y,2+x,53+y,5,FGCOLOR,BGCOLOR); + tft.fillTriangle(40+x,26+y,20+x,40+y,20+x,12+y,FGCOLOR); + tft.fillTriangle(40+x,53+y,20+x,40+y,20+x,68+y,FGCOLOR); + tft.drawArc(40+x,40+y,10,12,210,330,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,40+y,23,25,210,330,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,40+y,36,38,210,330,FGCOLOR,BGCOLOR); } -void drawCfg() { - draw.fillSprite(BGCOLOR); +void drawCfg(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); int i=0; for(i=0;i<6;i++) { - draw.drawArc(40,40,30,20,15+60*i,45+60*i,FGCOLOR,BGCOLOR,true); + tft.drawArc(40+x,40+y,30,20,15+60*i,45+60*i,FGCOLOR,BGCOLOR,true); } - draw.drawArc(40,40,22,8,0,360,FGCOLOR,BGCOLOR,false); + tft.drawArc(40+x,40+y,22,8,0,360,FGCOLOR,BGCOLOR,false); } -void drawRf() { - draw.fillSprite(BGCOLOR); - draw.fillCircle(40,30,7,FGCOLOR); - draw.fillTriangle(40,40,25,70,55,70,FGCOLOR); - draw.drawArc(40,30,18,15,40,140,FGCOLOR,BGCOLOR); - draw.drawArc(40,30,28,25,40,140,FGCOLOR,BGCOLOR); - draw.drawArc(40,30,38,35,40,140,FGCOLOR,BGCOLOR); - draw.drawArc(40,30,18,15,220,320,FGCOLOR,BGCOLOR); - draw.drawArc(40,30,28,25,220,320,FGCOLOR,BGCOLOR); - draw.drawArc(40,30,38,35,220,320,FGCOLOR,BGCOLOR); +void drawRf(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); + tft.fillCircle(40+x,30+y,7,FGCOLOR); + tft.fillTriangle(40+x,40+y,25+x,70+y,55+x,70+y,FGCOLOR); + tft.drawArc(40+x,30+y,18,15,40,140,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,30+y,28,25,40,140,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,30+y,38,35,40,140,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,30+y,18,15,220,320,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,30+y,28,25,220,320,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,30+y,38,35,220,320,FGCOLOR,BGCOLOR); } -void drawRfid() { - draw.fillSprite(BGCOLOR); - draw.drawRoundRect(5,5,70,70,10,FGCOLOR); - draw.fillRect(0,40,40,40,BGCOLOR); - draw.drawCircle(15,65,7,FGCOLOR); - draw.drawArc(15,65,18,15,180,270,FGCOLOR,BGCOLOR); - draw.drawArc(15,65,28,25,180,270,FGCOLOR,BGCOLOR); - draw.drawArc(15,65,38,35,180,270,FGCOLOR,BGCOLOR); +void drawRfid(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); + tft.drawRoundRect(5+x,5+y,70,70,10,FGCOLOR); + tft.fillRect(0+x,40+y,40,40,BGCOLOR); + tft.drawCircle(15+x,65+y,7,FGCOLOR); + tft.drawArc(15+x,65+y,18,15,180,270,FGCOLOR,BGCOLOR); + tft.drawArc(15+x,65+y,28,25,180,270,FGCOLOR,BGCOLOR); + tft.drawArc(15+x,65+y,38,35,180,270,FGCOLOR,BGCOLOR); } -void drawOther() { - draw.fillSprite(BGCOLOR); - draw.fillCircle(40,40,7,FGCOLOR); - draw.drawArc(40,40,18,15,0,340,FGCOLOR,BGCOLOR); - draw.drawArc(40,40,25,22,20,360,FGCOLOR,BGCOLOR); - draw.drawArc(40,40,32,29,0,200,FGCOLOR,BGCOLOR); - draw.drawArc(40,40,32,29,240,360,FGCOLOR,BGCOLOR); +void drawOther(int x, int y) { + tft.fillRect(x,y,80,80,BGCOLOR); + tft.fillCircle(40+x,40+y,7,FGCOLOR); + tft.drawArc(40+x,40+y,18,15,0,340,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,40+y,25,22,20,360,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,40+y,32,29,0,200,FGCOLOR,BGCOLOR); + tft.drawArc(40+x,40+y,32,29,240,360,FGCOLOR,BGCOLOR); } diff --git a/src/display.h b/src/display.h index 3c526ab94..cc160e403 100644 --- a/src/display.h +++ b/src/display.h @@ -38,19 +38,19 @@ void drawBatteryStatus(); void drawWifiSmall(int x, int y); -void drawWifi(); +void drawWifi(int x, int y); void drawBLESmall(int x, int y); -void drawBLE(); +void drawBLE(int x, int y); -void drawRf(); +void drawRf(int x, int y); -void drawRfid(); +void drawRfid(int x, int y); -void drawOther(); +void drawOther(int x, int y); -void drawCfg(); +void drawCfg(int x, int y); diff --git a/src/main.cpp b/src/main.cpp index 3a77466ce..fb52471e1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -197,7 +197,7 @@ void loop() { options.push_back({"Raw Sniffer", [=]() { sniffer_setup(); }}); options.push_back({"DPWO-ESP32", [=]() { dpwo_setup(); }}); options.push_back({"Evil Portal", [=]() { startEvilPortal(); }}); - options.push_back({"Scan Hosts", [=]() { local_scan_setup(); }}); + options.push_back({"Scan Hosts", [=]() { local_net_scan_setup(); }}); options.push_back({"Wireguard", [=]() { wg_setup(); }}); options.push_back({"Main Menu", [=]() { backToMenu(); }}); delay(200); diff --git a/src/mykeyboard.cpp b/src/mykeyboard.cpp index a1eb0180e..cfb2009c9 100644 --- a/src/mykeyboard.cpp +++ b/src/mykeyboard.cpp @@ -209,7 +209,7 @@ String keyboard(String mytext, int maxSize, String msg) { /* When Select a key in keyboard */ #if defined (CARDPUTER) Keyboard.update(); - if (Keyboard.isChange()) { + if (Keyboard.isPressed()) { Keyboard_Class::KeysState status = Keyboard.keysState(); for (auto i : status.word) { mytext += i; diff --git a/src/scan_hosts.cpp b/src/scan_hosts.cpp index ae3feba34..b94a3bc88 100644 --- a/src/scan_hosts.cpp +++ b/src/scan_hosts.cpp @@ -4,7 +4,7 @@ std::vector successful_hosts; -void local_scan_setup() { +void local_net_scan_setup() { if (WiFi.status() != WL_CONNECTED) { delay(500); diff --git a/src/scan_hosts.h b/src/scan_hosts.h index f13d4133a..3f079422d 100644 --- a/src/scan_hosts.h +++ b/src/scan_hosts.h @@ -8,6 +8,6 @@ bool ping(IPAddress target); int etharp_get_entry(size_t i, ip4_addr_t **ipaddr, struct netif **netif, struct eth_addr **eth_ret); -void local_scan_setup(); +void local_net_scan_setup(); void print_arp_table(); \ No newline at end of file From efa8f76782346e8def87f3428c8591cf9f0afcf0 Mon Sep 17 00:00:00 2001 From: Pirata <104320209+bmorcelli@users.noreply.github.com> Date: Tue, 21 May 2024 11:26:11 -0300 Subject: [PATCH 2/3] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 69895e8fd..e590044fa 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,12 @@ For more information on each function supported by Bruce, [read our wiki here](h - [x] WiFi AP (New) - [x] Disconnect WiFi (New) - [X] WiFi Atks - - [x] Information - - [X] Target Deauth - - [ ] Deauth Flood - - [X] EvilPortal + Deauth + - [x] Beacon Spam + - [x] Target Atk + - [x] Information + - [X] Target Deauth + - [X] EvilPortal + Deauth + - [ ] Deauth Flood (More than one target) - [X] TelNet - [X] SSH - [x] RAW Sniffer From 5749e1939679a1d34ff190e758c680e6df40945a Mon Sep 17 00:00:00 2001 From: Pirata <104320209+bmorcelli@users.noreply.github.com> Date: Tue, 21 May 2024 11:29:03 -0300 Subject: [PATCH 3/3] Beacon Spam ## Beacon SPAM - Added Beacon Spams present in the previous version (Nemo) --- src/wifi_atks.cpp | 288 +++++++++++++++++++++++++++++++++++++++++++--- src/wifi_atks.h | 4 +- 2 files changed, 276 insertions(+), 16 deletions(-) diff --git a/src/wifi_atks.cpp b/src/wifi_atks.cpp index 149cc8b01..40d7973cb 100644 --- a/src/wifi_atks.cpp +++ b/src/wifi_atks.cpp @@ -91,24 +91,34 @@ void wifi_atk_info(String tssid,String mac, uint8_t channel) { ** @brief: Open menu to choose which AP Attack ***************************************************************************************/ void wifi_atk_menu() { - int nets; - WiFi.mode(WIFI_MODE_STA); - displayRedStripe("Scanning..",TFT_WHITE,FGCOLOR); - nets=WiFi.scanNetworks(); - options = { }; - for(int i=0; i(WiFi.channel(i)); - target_atk_menu(WiFi.SSID(i).c_str(), WiFi.BSSIDstr(i), chan); }}); - } - - options.push_back({"Main Menu", [=]() { backToMenu(); }}); - + bool scanAtks = false; + options = { + {"Target Atks", [&]() { scanAtks = true; }}, + {"Beacon SPAM", [=]() { beaconAttack(); }}, + }; delay(200); loopOptions(options); delay(200); + if(scanAtks) { + int nets; + WiFi.mode(WIFI_MODE_STA); + displayRedStripe("Scanning..",TFT_WHITE,FGCOLOR); + nets=WiFi.scanNetworks(); + options = { }; + for(int i=0; i(WiFi.channel(i)); + target_atk_menu(WiFi.SSID(i).c_str(), WiFi.BSSIDstr(i), chan); }}); + } + + options.push_back({"Main Menu", [=]() { backToMenu(); }}); + + delay(200); + loopOptions(options); + delay(200); + } } /*************************************************************************************** ** function: target_atk_menu @@ -199,5 +209,253 @@ void target_atk(String tssid,String mac, uint8_t channel) { } +void generateRandomWiFiMac(uint8_t* mac) { + for (int i = 1; i < 6; i++) { + mac[i] = random(0, 255); + } +} + +char randomName[32]; +char* randomSSID() { + const char* charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int len = rand() % 22 + 7; // Generate a random length between 1 and 10 + for (int i = 0; i < len; ++i) { + randomName[i] = charset[rand() % strlen(charset)]; // S elect random characters from the charset + } + randomName[len] = '\0'; // Null-terminate the string + return randomName; +} + +char emptySSID[32]; +const char Beacons[] PROGMEM = { + "Mom Use This One\n" + "Abraham Linksys\n" + "Benjamin FrankLAN\n" + "Martin Router King\n" + "John Wilkes Bluetooth\n" + "Pretty Fly for a Wi-Fi\n" + "Bill Wi the Science Fi\n" + "I Believe Wi Can Fi\n" + "Tell My Wi-Fi Love Her\n" + "No More Mister Wi-Fi\n" + "LAN Solo\n" + "The LAN Before Time\n" + "Silence of the LANs\n" + "House LANister\n" + "Winternet Is Coming\n" + "Ping's Landing\n" + "The Ping in the North\n" + "This LAN Is My LAN\n" + "Get Off My LAN\n" + "The Promised LAN\n" + "The LAN Down Under\n" + "FBI Surveillance Van 4\n" + "Area 51 Test Site\n" + "Drive-By Wi-Fi\n" + "Planet Express\n" + "Wu Tang LAN\n" + "Darude LANstorm\n" + "Never Gonna Give You Up\n" + "Hide Yo Kids, Hide Yo Wi-Fi\n" + "Loading…\n" + "Searching…\n" + "VIRUS.EXE\n" + "Virus-Infected Wi-Fi\n" + "Starbucks Wi-Fi\n" + "Text 64ALL for Password\n" + "Yell BRUCE for Password\n" + "The Password Is 1234\n" + "Free Public Wi-Fi\n" + "No Free Wi-Fi Here\n" + "Get Your Own Damn Wi-Fi\n" + "It Hurts When IP\n" + "Dora the Internet Explorer\n" + "404 Wi-Fi Unavailable\n" + "Porque-Fi\n" + "Titanic Syncing\n" + "Test Wi-Fi Please Ignore\n" + "Drop It Like It's Hotspot\n" + "Life in the Fast LAN\n" + "The Creep Next Door\n" + "Ye Olde Internet\n" +}; + +const char rickrollssids[] PROGMEM = { + "01 Never gonna give you up\n" + "02 Never gonna let you down\n" + "03 Never gonna run around\n" + "04 and desert you\n" + "05 Never gonna make you cry\n" + "06 Never gonna say goodbye\n" + "07 Never gonna tell a lie\n" + "08 and hurt you\n" +}; + + +uint8_t packet[128] = { 0x80, 0x00, 0x00, 0x00, //Frame Control, Duration + /*4*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //Destination address + /*10*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, //Source address - overwritten later + /*16*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, //BSSID - overwritten to the same as the source address + /*22*/ 0xc0, 0x6c, //Seq-ctl + /*24*/ 0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, //timestamp - the number of microseconds the AP has been active + /*32*/ 0x64, 0x00, //Beacon interval + /*34*/ 0x01, 0x04, //Capability info + /* SSID */ + /*36*/ 0x00 + }; + +// beacon frame definition +uint8_t beaconPacket[109] = { + /* 0 - 3 */ 0x80, 0x00, 0x00, 0x00, // Type/Subtype: managment beacon frame + /* 4 - 9 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination: broadcast + /* 10 - 15 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source + /* 16 - 21 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source + + // Fixed parameters + /* 22 - 23 */ 0x00, 0x00, // Fragment & sequence number (will be done by the SDK) + /* 24 - 31 */ 0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, // Timestamp + /* 32 - 33 */ 0xe8, 0x03, // Interval: 0x64, 0x00 => every 100ms - 0xe8, 0x03 => every 1s + /* 34 - 35 */ 0x31, 0x00, // capabilities Tnformation + + // Tagged parameters + + // SSID parameters + /* 36 - 37 */ 0x00, 0x20, // Tag: Set SSID length, Tag length: 32 + /* 38 - 69 */ 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, // SSID + + // Supported Rates + /* 70 - 71 */ 0x01, 0x08, // Tag: Supported Rates, Tag length: 8 + /* 72 */ 0x82, // 1(B) + /* 73 */ 0x84, // 2(B) + /* 74 */ 0x8b, // 5.5(B) + /* 75 */ 0x96, // 11(B) + /* 76 */ 0x24, // 18 + /* 77 */ 0x30, // 24 + /* 78 */ 0x48, // 36 + /* 79 */ 0x6c, // 54 + + // Current Channel + /* 80 - 81 */ 0x03, 0x01, // Channel set, length + /* 82 */ 0x01, // Current Channel + // RSN information + /* 83 - 84 */ 0x30, 0x18, + /* 85 - 86 */ 0x01, 0x00, + /* 87 - 90 */ 0x00, 0x0f, 0xac, 0x02, + /* 91 - 92 */ 0x02, 0x00, + /* 93 - 100 */ 0x00, 0x0f, 0xac, 0x04, 0x00, 0x0f, 0xac, 0x04, /*Fix: changed 0x02(TKIP) to 0x04(CCMP) is default. WPA2 with TKIP not supported by many devices*/ + /* 101 - 102 */ 0x01, 0x00, + /* 103 - 106 */ 0x00, 0x0f, 0xac, 0x02, + /* 107 - 108 */ 0x00, 0x00 +}; +// goes to next channel +const uint8_t channels[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // used Wi-Fi channels (available: 1-14) +uint8_t channelIndex = 0; +uint8_t wifi_channel = 1; + +void nextChannel() { + if (sizeof(channels) > 1) { + uint8_t ch = channels[channelIndex]; + channelIndex++; + if (channelIndex > sizeof(channels)) channelIndex = 0; + + if (ch != wifi_channel && ch >= 1 && ch <= 14) { + wifi_channel = ch; + //wifi_set_channel(wifi_channel); + esp_wifi_set_channel(wifi_channel, WIFI_SECOND_CHAN_NONE); + } + } +} +void beaconSpamList(const char list[]){ + // temp variables + int i = 0; + int j = 0; + char tmp; + uint8_t macAddr[6]; + int ssidsLen = strlen_P(list); + + // go to next channel + nextChannel(); + + while (i < ssidsLen) { + // read out next SSID + // read out next SSID + j = 0; + do { + tmp = pgm_read_byte(list + i + j); + j++; + } while (tmp != '\n' && j <= 32 && i + j < ssidsLen); + + uint8_t ssidLen = j - 1; + + // set MAC address + generateRandomWiFiMac(macAddr); + + // write MAC address into beacon frame + memcpy(&beaconPacket[10], macAddr, 6); + memcpy(&beaconPacket[16], macAddr, 6); + + // reset SSID + memcpy(&beaconPacket[38], emptySSID, 32); + + // write new SSID into beacon frame + memcpy_P(&beaconPacket[38], &list[i], ssidLen); + // set channel for beacon frame + beaconPacket[82] = wifi_channel; + beaconPacket[34] = 0x31; // wpa + + // send packet + for (int k = 0; k < 3; k++) { + esp_wifi_80211_tx(WIFI_IF_STA, beaconPacket, sizeof(beaconPacket), 0) == 0; + delay(1); + } + i +=j;; + if (checkEscPress()) break; + } +} + +void beaconAttack() { + //change WiFi mode + WiFi.mode(WIFI_MODE_STA); + int BeaconMode; + String txt = ""; + // create empty SSID + for (int i = 0; i < 32; i++) + emptySSID[i] = ' '; + // for random generator + randomSeed(1); + options = { + {"Funny SSID", [&]() { BeaconMode = 0; txt = "Spamming Funny"; }}, + {"Rucky Roll", [&]() { BeaconMode = 1; txt = "Spamming Ricky"; }}, + {"Random SSID", [&]() { BeaconMode = 2; txt = "Spamming Random"; }}, + }; + delay(200); + loopOptions(options); + delay(200); + + wifiConnected = true; // display wifi icon + drawMainMenu(0); + displayRedStripe(txt,TFT_WHITE, FGCOLOR); + while (1) { + displayRedStripe(String(BeaconMode),TFT_WHITE, FGCOLOR); + delay(200); + if (BeaconMode == 0) { + beaconSpamList(Beacons); + } else if (BeaconMode == 1){ + beaconSpamList(rickrollssids); + } else if (BeaconMode == 2) { + char* randoms = randomSSID(); + beaconSpamList(randoms); + } + if (checkEscPress()) break; + } + wifiDisconnect(); +} \ No newline at end of file diff --git a/src/wifi_atks.h b/src/wifi_atks.h index 4dc496fc8..cd1d55a12 100644 --- a/src/wifi_atks.h +++ b/src/wifi_atks.h @@ -38,4 +38,6 @@ void wifi_atk_menu(); void target_atk_menu(String tssid,String mac, uint8_t channel); -void target_atk(String tssid,String mac, uint8_t channel); \ No newline at end of file +void target_atk(String tssid,String mac, uint8_t channel); + +void beaconAttack(); \ No newline at end of file