mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-22 23:26:45 -08:00
Add SSID commands
This commit is contained in:
@@ -39,8 +39,6 @@ LinkedList<String> CommandLine::parseCommand(String input, char* delim) {
|
||||
|
||||
if (input != "") {
|
||||
|
||||
//char delim[] = " ";
|
||||
|
||||
char fancy[input.length() + 1] = {};
|
||||
input.toCharArray(fancy, input.length() + 1);
|
||||
|
||||
@@ -51,13 +49,6 @@ LinkedList<String> CommandLine::parseCommand(String input, char* delim) {
|
||||
|
||||
ptr = strtok(NULL, delim);
|
||||
}
|
||||
|
||||
//memset(fancy, 0, sizeof(fancy));
|
||||
|
||||
// Display the segmented cmd
|
||||
//for (int i = 0; i < cmd_args.size(); i++) {
|
||||
// Serial.println(cmd_args.get(i));
|
||||
//}
|
||||
}
|
||||
|
||||
return cmd_args;
|
||||
@@ -72,6 +63,20 @@ int CommandLine::argSearch(LinkedList<String>* cmd_args_list, String key) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool CommandLine::checkValueExists(LinkedList<String>* cmd_args_list, int index) {
|
||||
if (index < cmd_args_list->size() - 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CommandLine::inRange(int max, int index) {
|
||||
if ((index >= 0) && (index < max))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CommandLine::runCommand(String input) {
|
||||
if (input != "")
|
||||
Serial.println("#" + input);
|
||||
@@ -115,7 +120,7 @@ void CommandLine::runCommand(String input) {
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
//// WiFi Scan commands
|
||||
//// WiFi Scan/Attack commands
|
||||
if (!wifi_scan_obj.scanning()) {
|
||||
|
||||
// AP Scan
|
||||
@@ -151,6 +156,8 @@ void CommandLine::runCommand(String input) {
|
||||
// attack
|
||||
if (cmd_args.get(0) == ATTACK_CMD) {
|
||||
int attack_type_switch = this->argSearch(&cmd_args, "-t"); // Required
|
||||
int list_beacon_sw = this->argSearch(&cmd_args, "-l");
|
||||
int rand_beacon_sw = this->argSearch(&cmd_args, "-r");
|
||||
|
||||
if (attack_type_switch == -1) {
|
||||
Serial.println("You must specify an attack type");
|
||||
@@ -160,6 +167,7 @@ void CommandLine::runCommand(String input) {
|
||||
String attack_type = cmd_args.get(attack_type_switch + 1);
|
||||
|
||||
// Branch on attack type
|
||||
// Deauth
|
||||
if (attack_type == ATTACK_TYPE_DEAUTH) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
@@ -167,6 +175,28 @@ void CommandLine::runCommand(String input) {
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH, TFT_RED);
|
||||
}
|
||||
// Beacon
|
||||
else if (attack_type == ATTACK_TYPE_BEACON) {
|
||||
// spam by list
|
||||
if (list_beacon_sw != -1) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_BEACON_LIST, TFT_RED);
|
||||
}
|
||||
// spam with random
|
||||
else if (rand_beacon_sw != -1) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_ATTACK_BEACON_SPAM, TFT_ORANGE);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify a beacon attack type");
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("Attack type not properly defined");
|
||||
return;
|
||||
@@ -177,9 +207,13 @@ void CommandLine::runCommand(String input) {
|
||||
|
||||
|
||||
//// WiFi aux commands
|
||||
|
||||
// List access points
|
||||
if (cmd_args.get(0) == LIST_AP_CMD) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
int ss_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
// List APs
|
||||
if (ap_sw != -1) {
|
||||
for (int i = 0; i < access_points->size(); i++) {
|
||||
if (access_points->get(i).selected)
|
||||
Serial.println("[" + (String)i + "] " + access_points->get(i).essid + " (selected)");
|
||||
@@ -187,13 +221,27 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println("[" + (String)i + "] " + access_points->get(i).essid);
|
||||
}
|
||||
}
|
||||
// List SSIDs
|
||||
else if (ss_sw != -1) {
|
||||
for (int i = 0; i < ssids->size(); i++) {
|
||||
if (ssids->get(i).selected)
|
||||
Serial.println("[" + (String)i + "] " + ssids->get(i).essid + " (selected)");
|
||||
else
|
||||
Serial.println("[" + (String)i + "] " + ssids->get(i).essid);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to show");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Select access points or stations
|
||||
else if (cmd_args.get(0) == SEL_CMD) {
|
||||
// Get switches
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
int st_sw = this->argSearch(&cmd_args, "-s");
|
||||
int ss_sw = this->argSearch(&cmd_args, "-s");
|
||||
|
||||
// Access points
|
||||
// select Access points
|
||||
if (ap_sw != -1) {
|
||||
// Get list of indices
|
||||
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
|
||||
@@ -201,6 +249,10 @@ void CommandLine::runCommand(String input) {
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ap_index.size(); i++) {
|
||||
int index = ap_index.get(i).toInt();
|
||||
if (!this->inRange(access_points->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (access_points->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
AccessPoint new_ap = access_points->get(index);
|
||||
@@ -215,9 +267,72 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Stations
|
||||
else if (st_sw != -1) {
|
||||
// select ssids
|
||||
else if (ss_sw != -1) {
|
||||
// Get list of indices
|
||||
LinkedList<String> ss_index = this->parseCommand(cmd_args.get(ss_sw + 1), ",");
|
||||
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ss_index.size(); i++) {
|
||||
int index = ss_index.get(i).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (ssids->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(index, new_ssid);
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(index, new_ssid);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify which list to select from");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// SSID stuff
|
||||
else if (cmd_args.get(0) == SSID_CMD) {
|
||||
int add_sw = this->argSearch(&cmd_args, "-a");
|
||||
int gen_sw = this->argSearch(&cmd_args, "-g");
|
||||
int spc_sw = this->argSearch(&cmd_args, "-n");
|
||||
int rem_sw = this->argSearch(&cmd_args, "-r");
|
||||
|
||||
// Add ssid
|
||||
if (add_sw != -1) {
|
||||
// Generate random
|
||||
if (gen_sw != -1) {
|
||||
int gen_count = cmd_args.get(gen_sw + 1).toInt();
|
||||
wifi_scan_obj.generateSSIDs(gen_count);
|
||||
}
|
||||
// Add specific
|
||||
else if (spc_sw != -1) {
|
||||
String essid = cmd_args.get(spc_sw + 1);
|
||||
wifi_scan_obj.addSSID(essid);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify how to add SSIDs");
|
||||
}
|
||||
}
|
||||
// Remove SSID
|
||||
else if (rem_sw != -1) {
|
||||
int index = cmd_args.get(rem_sw + 1).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
return;
|
||||
}
|
||||
ssids->remove(index);
|
||||
}
|
||||
else {
|
||||
Serial.println("You did not specify whether to add or remove SSIDs");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
extern WiFiScan wifi_scan_obj;
|
||||
extern LinkedList<AccessPoint>* access_points;
|
||||
extern LinkedList<ssid>* ssids;
|
||||
extern const String PROGMEM version_number;
|
||||
|
||||
//// Commands
|
||||
@@ -40,14 +41,17 @@ const char PROGMEM ATTACK_TYPE_BEACON[] = "beacon";
|
||||
const char PROGMEM ATTACK_TYPE_PROBE[] = "probe";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM LIST_AP_CMD[] = "listap";
|
||||
const char PROGMEM LIST_AP_CMD[] = "list";
|
||||
const char PROGMEM SEL_CMD[] = "select";
|
||||
const char PROGMEM SSID_CMD[] = "ssid";
|
||||
|
||||
class CommandLine {
|
||||
private:
|
||||
String getSerialInput();
|
||||
LinkedList<String> parseCommand(String input, char* delim);
|
||||
void runCommand(String input);
|
||||
bool checkValueExists(LinkedList<String>* cmd_args_list, int index);
|
||||
bool inRange(int max, int index);
|
||||
int argSearch(LinkedList<String>* cmd_args, String key);
|
||||
|
||||
const char* ascii_art =
|
||||
|
||||
@@ -162,22 +162,22 @@ int WiFiScan::clearSSIDs() {
|
||||
}
|
||||
|
||||
bool WiFiScan::addSSID(String essid) {
|
||||
ssid s = {essid, {random(256), random(256), random(256), random(256), random(256), random(256)}};
|
||||
ssid s = {essid, {random(256), random(256), random(256), random(256), random(256), random(256)}, false};
|
||||
ssids->add(s);
|
||||
Serial.println(ssids->get(ssids->size() - 1).essid);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int WiFiScan::generateSSIDs() {
|
||||
uint8_t num_gen = 20;
|
||||
int WiFiScan::generateSSIDs(int count) {
|
||||
uint8_t num_gen = count;
|
||||
for (uint8_t x = 0; x < num_gen; x++) {
|
||||
String essid = "";
|
||||
|
||||
for (uint8_t i = 0; i < 6; i++)
|
||||
essid.concat(alfa[random(65)]);
|
||||
|
||||
ssid s = {essid, {random(256), random(256), random(256), random(256), random(256), random(256)}};
|
||||
ssid s = {essid, {random(256), random(256), random(256), random(256), random(256), random(256)}, false};
|
||||
ssids->add(s);
|
||||
Serial.println(ssids->get(ssids->size() - 1).essid);
|
||||
}
|
||||
@@ -570,7 +570,7 @@ void WiFiScan::RunClearSSIDs() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void WiFiScan::RunGenerateSSIDs() {
|
||||
void WiFiScan::RunGenerateSSIDs(int count) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.tft.setTextWrap(false);
|
||||
display_obj.tft.setFreeFont(NULL);
|
||||
@@ -583,7 +583,7 @@ void WiFiScan::RunGenerateSSIDs() {
|
||||
display_obj.tft.println(text_table4[14] + (String)this->generateSSIDs());
|
||||
display_obj.tft.println(text_table4[15] + (String)ssids->size());
|
||||
#else
|
||||
this->generateSSIDs();
|
||||
this->generateSSIDs(count);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, b
|
||||
struct ssid {
|
||||
String essid;
|
||||
int bssid[6];
|
||||
bool selected;
|
||||
};
|
||||
|
||||
struct AccessPoint {
|
||||
@@ -279,7 +280,7 @@ class WiFiScan
|
||||
int clearSSIDs();
|
||||
int clearAPs();
|
||||
bool addSSID(String essid);
|
||||
int generateSSIDs();
|
||||
int generateSSIDs(int count = 20);
|
||||
bool shutdownWiFi();
|
||||
bool shutdownBLE();
|
||||
bool scanning();
|
||||
@@ -291,7 +292,7 @@ class WiFiScan
|
||||
void RunInfo();
|
||||
void RunShutdownWiFi();
|
||||
void RunShutdownBLE();
|
||||
void RunGenerateSSIDs();
|
||||
void RunGenerateSSIDs(int count = 20);
|
||||
void RunClearSSIDs();
|
||||
void RunClearAPs();
|
||||
void channelHop();
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
#define POLISH_POTATO
|
||||
|
||||
#define MARAUDER_MINI
|
||||
//#define MARAUDER_MINI
|
||||
//#define MARAUDER_V4
|
||||
//#define MARAUDER_V6
|
||||
//#define MARAUDER_KIT
|
||||
//#define GENERIC_ESP32
|
||||
//#define MARAUDER_FLIPPER
|
||||
#define MARAUDER_FLIPPER
|
||||
|
||||
#define MARAUDER_VERSION "v0.9.8"
|
||||
|
||||
@@ -384,6 +384,7 @@
|
||||
#define TFT_GRAY 0
|
||||
#define TFT_MAGENTA 0
|
||||
#define TFT_VIOLET 0
|
||||
#define TFT_ORANGE 0
|
||||
#define STANDARD_FONT_CHAR_LIMIT 40
|
||||
#define FLASH_BUTTON -1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user