Add SSID commands

This commit is contained in:
Just Call Me Koko
2022-06-02 17:13:54 -04:00
parent d686353322
commit a80bba9b18
5 changed files with 153 additions and 32 deletions

View File

@@ -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,23 +207,41 @@ void CommandLine::runCommand(String input) {
//// WiFi aux commands
// List access points
if (cmd_args.get(0) == LIST_AP_CMD) {
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)");
else
Serial.println("[" + (String)i + "] " + access_points->get(i).essid);
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)");
else
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;
}
}
}

View File

@@ -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 =

View File

@@ -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
}

View File

@@ -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();

View File

@@ -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