Compare commits

..

25 Commits

Author SHA1 Message Date
Just Call Me Koko
af9938f8eb Merge pull request #1059 from justcallmekoko/develop
Capture and parse SAE commit frames
2026-01-17 10:26:37 -05:00
Just Call Me Koko
0ba3d0f60a Merge pull request #1056 from justcallmekoko/develop
Remove v7.1 from build list
2026-01-15 16:47:16 -05:00
Just Call Me Koko
140668448f Merge pull request #1055 from justcallmekoko/develop
Remove continuous BT wardrive
2026-01-14 10:03:10 -05:00
Just Call Me Koko
961bcb6cf5 Merge pull request #1052 from justcallmekoko/develop
Fix PCAPs not saving for MAC tracker
2026-01-13 15:42:46 -05:00
Just Call Me Koko
774d5f0707 Merge pull request #1050 from justcallmekoko/develop
Update Sour Apple
2026-01-13 08:13:54 -05:00
Just Call Me Koko
07a684a03e Merge pull request #1045 from justcallmekoko/develop
Following MACs save PCAPs
2026-01-11 14:24:16 -05:00
Just Call Me Koko
e3fe40ede0 Merge pull request #1043 from justcallmekoko/develop
Fix distance threshold
2026-01-11 00:39:49 -05:00
Just Call Me Koko
8e0ed07483 Merge pull request #1042 from justcallmekoko/develop
Oopsie
2026-01-09 23:02:25 -05:00
Just Call Me Koko
249ba6eabe Merge pull request #1041 from justcallmekoko/develop
MAC track BLE and revamp wardrive UI
2026-01-09 17:41:00 -05:00
Just Call Me Koko
88762063ff Merge pull request #1040 from justcallmekoko/develop
Add CLI command for MAC tracking
2026-01-08 12:45:44 -05:00
Just Call Me Koko
9d2a1ab3aa Merge pull request #1036 from justcallmekoko/develop
GPS now operates at 115200 baud
2026-01-07 17:51:54 -05:00
Just Call Me Koko
a20b25a39c Merge pull request #1034 from justcallmekoko/develop
Fix eviction criteria and work mini displays
2026-01-06 16:35:03 -05:00
Just Call Me Koko
a785a3b125 Merge pull request #1033 from justcallmekoko/develop
Add MAC tracking backend
2026-01-05 20:55:24 -05:00
Just Call Me Koko
380875d32f Merge pull request #1029 from justcallmekoko/develop
Update version number
2026-01-03 14:50:37 -05:00
Just Call Me Koko
d03c079080 Merge pull request #1028 from justcallmekoko/develop
Fix wardriving function on CLI
2026-01-03 14:29:58 -05:00
Just Call Me Koko
8ef5cf3b92 Merge pull request #1015 from justcallmekoko/develop
Faster display buffer
2025-12-13 14:48:34 -05:00
Just Call Me Koko
1dd5502c1d Merge pull request #1012 from justcallmekoko/develop
Fix crash during BT wardrive
2025-12-12 18:11:10 -05:00
Just Call Me Koko
f5375eedaf Merge pull request #1006 from justcallmekoko/develop
Wardriving is asynchronous now
2025-12-08 16:45:31 -05:00
Just Call Me Koko
86e2fb206a Merge pull request #1005 from justcallmekoko/develop
Add wifi to flock wardrive
2025-12-08 15:10:53 -05:00
Just Call Me Koko
1d419605f7 Merge pull request #1001 from justcallmekoko/develop
Fix menu navigation for back button
2025-12-04 18:36:50 -05:00
Just Call Me Koko
dfd556da30 Merge pull request #999 from justcallmekoko/develop
Update NimBLE version in actions
2025-12-02 01:09:42 -05:00
Just Call Me Koko
03623e2985 Merge pull request #998 from justcallmekoko/develop
Update arduino esp32
2025-12-02 00:14:12 -05:00
Just Call Me Koko
4e7f48a036 Merge pull request #997 from justcallmekoko/develop
Add 5ghz channels for c5 packet injection
2025-12-01 18:44:52 -05:00
Just Call Me Koko
722b9ad88e Merge pull request #996 from justcallmekoko/develop
Merge develop
2025-12-01 01:44:59 -05:00
Just Call Me Koko
0a5e200294 Merge pull request #990 from justcallmekoko/develop
Add Flock wardriving
2025-11-24 13:27:21 -05:00
6 changed files with 199 additions and 425 deletions

View File

@@ -240,7 +240,6 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_SNIFF_ESP_CMD);
Serial.println(HELP_SNIFF_DEAUTH_CMD);
Serial.println(HELP_SNIFF_PMKID_CMD);
Serial.println(HELP_SNIFF_SAE_CMD);
Serial.println(HELP_STOPSCAN_CMD);
#ifdef HAS_GPS
Serial.println(HELP_WARDRIVE_CMD);
@@ -325,8 +324,7 @@ void CommandLine::runCommand(String input) {
else if (cmd_args.get(0) == GPS_DATA_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
Serial.print(F("Getting GPS Data. Stop with "));
Serial.println((String)STOPSCAN_CMD);
Serial.println("Getting GPS Data. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_DATA;
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
@@ -391,8 +389,7 @@ void CommandLine::runCommand(String input) {
nmea_type="beidou_bd";
}
gps_obj.setType(nmea_type);
Serial.print(F("GPS Output Type Set To: "));
Serial.println(nmea_type);
Serial.println("GPS Output Type Set To: " + nmea_type);
}
else
Serial.println(F("You did not provide a valid argument"));
@@ -470,14 +467,12 @@ void CommandLine::runCommand(String input) {
int ch_set = this->argSearch(&cmd_args, "-s");
if (cmd_args.size() == 1) {
Serial.print(F("Current channel: "));
Serial.println(wifi_scan_obj.set_channel);
Serial.println("Current channel: " + (String)wifi_scan_obj.set_channel);
}
else if (ch_set != -1) {
wifi_scan_obj.set_channel = cmd_args.get(ch_set + 1).toInt();
wifi_scan_obj.changeChannel();
Serial.print(F("Set channel: "));
Serial.println(wifi_scan_obj.set_channel);
Serial.println("Set channel: " + (String)wifi_scan_obj.set_channel);
}
}
// Clear APs
@@ -535,8 +530,7 @@ void CommandLine::runCommand(String input) {
}
if (!result) {
Serial.print(F("Could not successfully update setting \""));
Serial.println(setting_name + "\"");
Serial.println("Could not successfully update setting \"" + setting_name + "\"");
return;
}
}
@@ -554,8 +548,7 @@ void CommandLine::runCommand(String input) {
// Signal strength scan
if (cmd_args.get(0) == SIGSTREN_CMD) {
Serial.print(F("Starting Signal Strength Scan. Stop with "));
Serial.println(STOPSCAN_CMD);
Serial.println("Starting Signal Strength Scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
@@ -565,8 +558,7 @@ void CommandLine::runCommand(String input) {
}
// Packet count
else if (cmd_args.get(0) == PACKET_COUNT_CMD) {
Serial.print(F("Starting Packet Count Scan. Stop with "));
Serial.println(STOPSCAN_CMD);
Serial.println("Starting Packet Count Scan. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
@@ -581,8 +573,7 @@ void CommandLine::runCommand(String input) {
int flk_sw = this->argSearch(&cmd_args, "-f");
if (flk_sw != -1) {
Serial.print(F("Starting Flock Wardrive. Stop with "));
Serial.println(STOPSCAN_CMD);
Serial.println("Starting Flock Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
@@ -590,8 +581,7 @@ void CommandLine::runCommand(String input) {
wifi_scan_obj.StartScan(BT_SCAN_FLOCK_WARDRIVE, TFT_GREEN);
}
else if (sta_sw != -1) {
Serial.print(F("Starting Station Wardrive. Stop with "));
Serial.println(STOPSCAN_CMD);
Serial.println("Starting Station Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
@@ -746,15 +736,6 @@ void CommandLine::runCommand(String input) {
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_AP, TFT_MAGENTA);
}
// SAE sniff
else if (cmd_args.get(0) == SNIFF_SAE_CMD) {
Serial.println("Starting SAE Commit sniff. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_SAE_COMMIT, TFT_MAGENTA);
}
// Probe sniff
else if (cmd_args.get(0) == SNIFF_PROBE_CMD) {
Serial.println("Starting Probe sniff. Stop with " + (String)STOPSCAN_CMD);
@@ -1104,14 +1085,6 @@ void CommandLine::runCommand(String input) {
#endif
wifi_scan_obj.StartScan(WIFI_ATTACK_FUNNY_BEACON, TFT_CYAN);
}
else if (attack_type == ATTACK_TYPE_SAE) {
Serial.println("Starting SAE Commit spam. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_ATTACK_SAE_COMMIT, TFT_CYAN);
}
else {
Serial.println(F("Attack type not properly defined"));
return;

View File

@@ -79,7 +79,6 @@ const char PROGMEM PING_CMD[] = "pingscan";
const char PROGMEM PORT_SCAN_CMD[] = "portscan";
const char PROGMEM ARP_SCAN_CMD[] = "arpscan";
const char PROGMEM MAC_TRACK_CMD[] = "mactrack";
const char PROGMEM SNIFF_SAE_CMD[] = "sniffsae";
// WiFi attack
const char PROGMEM ATTACK_CMD[] = "attack";
@@ -90,7 +89,6 @@ const char PROGMEM ATTACK_TYPE_FUNNY[] = "funny";
const char PROGMEM ATTACK_TYPE_RR[] = "rickroll";
const char PROGMEM ATTACK_TYPE_BM[] = "badmsg";
const char PROGMEM ATTACK_TYPE_S[] = "sleep";
const char PROGMEM ATTACK_TYPE_SAE[] = "sae";
// WiFi Aux
const char PROGMEM LIST_AP_CMD[] = "list";
@@ -156,10 +154,9 @@ const char PROGMEM HELP_PING_CMD[] = "pingscan";
const char PROGMEM HELP_PORT_SCAN_CMD[] = "portscan [-a -t <ip index>]/[-s <ssh/telnet/dns/http/smtp/https/rdp>]";
const char PROGMEM HELP_ARP_SCAN_CMD[] = "arpscan [-f]";
const char PROGMEM HELP_MAC_TRACK_CMD[] = "mactrack";
const char PROGMEM HELP_SNIFF_SAE_CMD[] = "sniffsae";
// WiFi attack
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <sae/beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll/badmsg [-c]/sleep [-c]>";
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll/badmsg [-c]/sleep [-c]>";
// WiFi Aux
const char PROGMEM HELP_LIST_AP_CMD_A[] = "list -s";

View File

@@ -16,12 +16,28 @@ static const uint32_t PROBE_MS = 1200;
void GpsInterface::begin() {
/*#ifdef MARAUDER_MINI
pinMode(26, OUTPUT);
delay(1);
analogWrite(26, 243);
delay(1);
Serial.println("Activated GPS");
delay(100);
#endif*/
Serial2.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
uint32_t gps_baud = this->initGpsBaudAndForce115200();
if ((gps_baud != 9600) && (gps_baud != 115200))
if (gps_baud == 9600)
Serial.println("GPS running at 9600");
else if (gps_baud == 115200)
Serial.println("GPS running at 115200");
else
Serial.println("Could not detect GPS baudrate");
delay(1000);
@@ -34,6 +50,7 @@ void GpsInterface::begin() {
delay(1000);
if (Serial2.available()) {
Serial.println("GPS Attached Successfully");
this->gps_enabled = true;
while (Serial2.available()) {
//Fetch the character one by one

View File

@@ -239,7 +239,6 @@ void MenuFunctions::main(uint32_t currentTime)
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_BAD_MSG) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SLEEP) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SLEEP_TARGETED) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SAE_COMMIT) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_MIMIC) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_FUNNY_BEACON) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_RICK_ROLL) ||
@@ -341,7 +340,6 @@ void MenuFunctions::main(uint32_t currentTime)
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_BAD_MSG) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SLEEP) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SLEEP_TARGETED) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_SAE_COMMIT) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_MIMIC) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_FUNNY_BEACON) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_RICK_ROLL) ||
@@ -407,7 +405,6 @@ void MenuFunctions::main(uint32_t currentTime)
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_BAD_MSG) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_SLEEP) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_SLEEP_TARGETED) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_SAE_COMMIT) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_MIMIC) &&
(wifi_scan_obj.currentScanMode != WIFI_SCAN_PACKET_RATE) &&
(wifi_scan_obj.currentScanMode != WIFI_SCAN_RAW_CAPTURE) &&
@@ -1852,11 +1849,6 @@ void MenuFunctions::RunSetup()
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_ATTACK_SLEEP_TARGETED, TFT_MAGENTA);
});
this->addNodes(&wifiAttackMenu, "SAE Commit Flood", TFTLIME, NULL, EAPOL, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_ATTACK_SAE_COMMIT, TFT_GREEN);
});
evilPortalMenu.parentMenu = &wifiAttackMenu;
this->addNodes(&evilPortalMenu, text09, TFTLIGHTGREY, NULL, 0, [this]() {

File diff suppressed because it is too large Load Diff

View File

@@ -28,10 +28,6 @@
#include "esp_wifi.h"
#include "esp_wifi_types.h"
#include <esp_timer.h>
#include "mbedtls/entropy.h"
#include "mbedtls/bignum.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/ecp.h"
#ifndef HAS_DUAL_BAND
#include <lwip/etharp.h>
#include <lwip/ip_addr.h>
@@ -151,7 +147,6 @@
#define BT_SCAN_FLOCK_WARDRIVE 75
#define WIFI_SCAN_DETECT_FOLLOW 76
#define WIFI_SCAN_SAE_COMMIT 77
#define WIFI_ATTACK_SAE_COMMIT 78
#define WIFI_ATTACK_FUNNY_BEACON 99
@@ -279,8 +274,6 @@ class WiFiScan
struct mac_addr mac_history[mac_history_len];
#endif
int current_act_len = 0;
uint32_t chanActTime = 0;
uint8_t ap_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
@@ -443,15 +436,6 @@ class WiFiScan
LinkedList<ConfirmedMultiSSID>* confirmed_multissid;
bool multissid_list_full_reported;
uint8_t sae_commit[32] = {
0xb0, 0x00, 0x00, 0x00, // Type/Subtype, Duration
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, // Destination
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, // Source
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, // BSSID (Destination)
0x00, 0x00, // Frag num
0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00 // Auth alg (SAE), SAE sequence, group 19
};
// barebones packet
uint8_t packet[128] = { 0x80, 0x00, 0x00, 0x00, //Frame Control, Duration
/*4*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //Destination address
@@ -582,7 +566,7 @@ class WiFiScan
bool isHostAlive(IPAddress ip);
bool checkHostPort(IPAddress ip, uint16_t port, uint16_t timeout = 100);
String extractManufacturer(const uint8_t* payload);
int checkMatchAP(char addr[], bool update_ap = true);
int checkMatchAP(char addr[]);
bool beaconHasWPS(const uint8_t* payload, int len);
uint8_t getSecurityType(const uint8_t* beacon, uint16_t len);
void addAnalyzerValue(int16_t value, int rssi_avg, int16_t target_array[], int array_size);
@@ -594,7 +578,6 @@ class WiFiScan
void executeSpoofAirtag();
void executeSwiftpairSpam(EBLEPayloadType type);
void startWardriverWiFi();
void saeAttackLoop(uint32_t currentTime);
//void generateRandomMac(uint8_t* mac);
//void generateRandomName(char *name, size_t length);
String processPwnagotchiBeacon(const uint8_t* frame, int length);
@@ -613,7 +596,6 @@ class WiFiScan
void tftDrawChannelScaleButtons();
void tftDrawColorKey();
void tftDrawGraphObjects();
bool sendSAECommitFrame(uint8_t* targ_addr, uint8_t* src_addr) ;
void sendProbeAttack(uint32_t currentTime);
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
void sendBadMsgAttack(uint32_t currentTime, bool all = false);
@@ -820,7 +802,8 @@ class WiFiScan
bool scanning();
bool joinWiFi(String ssid, String password, bool gui = true);
bool startWiFi(String ssid, String password, bool gui = true);
void getMAC(bool get_sta, uint8_t* mac);
String getStaMAC();
String getApMAC();
String freeRAM();
void changeChannel();
void changeChannel(int chan);
@@ -854,14 +837,11 @@ class WiFiScan
void startGPX(String file_name);
//String macToString(const Station& station);
static bool initMbedtls();
static int mbedtls_entropy_source(void *data, unsigned char *output, size_t len);
static bool getSAEACT(const uint8_t *frame, size_t frame_len, uint16_t &group_out, size_t &act_len_out);
static bool parse_sae_commit_act(const uint8_t *frame, size_t frame_len, uint16_t &group_out, size_t &act_len_out, size_t & act_off_out);
static bool sae_group_sizes(uint16_t group, size_t &scalar_len, size_t &element_len);
static bool mac_cmp(const uint8_t *a, const uint8_t *b);
static inline uint16_t le16(const uint8_t *p);
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
static void getMAC(uint8_t* mac, const uint8_t* data, uint16_t offset);
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
//static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);