Compare commits

..

9 Commits

Author SHA1 Message Date
Just Call Me Koko
cebfc5b5c1 Release v0.9.12 2022-08-01 18:03:48 -04:00
Just Call Me Koko
1291c7f322 Add settings command and SD CS 2022-08-01 17:03:07 -04:00
Just Call Me Koko
b234cee7ea Update README.md 2022-07-31 15:50:59 -04:00
Just Call Me Koko
792b4e5ac9 Release v0.9.11 2022-07-31 15:42:56 -04:00
Just Call Me Koko
09de10d95c packet monitor eapol scan formatting 2022-07-31 14:53:21 -04:00
Just Call Me Koko
898dd1242d Fix screen buffer formatting 2022-07-31 11:45:28 -04:00
Just Call Me Koko
4f04e91d0a Add screen buffer for mini 2022-07-30 20:48:25 -04:00
Just Call Me Koko
b7c2d668b5 Select all and flipper LED 2022-07-30 14:12:51 -04:00
Just Call Me Koko
cbcfa10330 v0.9.10 Release 2022-07-18 18:50:30 -04:00
38 changed files with 539 additions and 174 deletions

View File

@@ -3,7 +3,7 @@
<!---[![Build Status](https://travis-ci.com/justcallmekoko/ESP32Marauder.svg?branch=master)](https://travis-ci.com/justcallmekoko/ESP32Marauder)--->
<!---Shields/Badges https://shields.io/--->
# ESP32 Marauder v0.9.9
# ESP32 Marauder v0.9.12
<p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p>
<p align="center">
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>

View File

@@ -107,6 +107,7 @@ void CommandLine::runCommand(String input) {
if (cmd_args.get(0) == HELP_CMD) {
Serial.println(HELP_HEAD);
Serial.println(HELP_CH_CMD);
Serial.println(HELP_SETTINGS_CMD);
Serial.println(HELP_CLEARAP_CMD_A);
Serial.println(HELP_CLEARAP_CMD_B);
Serial.println(HELP_REBOOT_CMD);
@@ -189,6 +190,14 @@ void CommandLine::runCommand(String input) {
wifi_scan_obj.RunClearSSIDs();
}
else if (cmd_args.get(0) == SETTINGS_CMD) {
int ss_sw = this->argSearch(&cmd_args, "-s"); // Set setting
if (ss_sw == -1) {
settings_obj.printJsonSettings(settings_obj.getSettingsString());
}
}
else if (cmd_args.get(0) == REBOOT_CMD) {
Serial.println("Rebooting...");
ESP.restart();
@@ -463,24 +472,44 @@ void CommandLine::runCommand(String input) {
// Get list of indices
LinkedList<String> ap_index = this->parseCommand(cmd_args.get(ap_sw + 1), ",");
// 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;
// Select ALL APs
if (cmd_args.get(ap_sw + 1) == "all") {
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = false;
access_points->set(i, new_ap);
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(i);
new_ap.selected = true;
access_points->set(i, new_ap);
}
}
if (access_points->get(index).selected) {
// Unselect "selected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = false;
access_points->set(index, new_ap);
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = true;
access_points->set(index, new_ap);
}
// Select specific APs
else {
// 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);
new_ap.selected = false;
access_points->set(index, new_ap);
}
else {
// Select "unselected" ap
AccessPoint new_ap = access_points->get(index);
new_ap.selected = true;
access_points->set(index, new_ap);
}
}
}
}

View File

@@ -11,6 +11,7 @@
#include "WiFiScan.h"
#include "Web.h"
#include "SDInterface.h"
#include "settings.h"
#ifdef HAS_SCREEN
extern MenuFunctions menu_function_obj;
@@ -20,6 +21,7 @@
extern WiFiScan wifi_scan_obj;
extern Web web_obj;
extern SDInterface sd_obj;
extern Settings settings_obj;
extern LinkedList<AccessPoint>* access_points;
extern LinkedList<ssid>* ssids;
extern const String PROGMEM version_number;
@@ -32,6 +34,7 @@ const char PROGMEM CLEARAP_CMD[] = "clearlist";
const char PROGMEM REBOOT_CMD[] = "reboot";
const char PROGMEM UPDATE_CMD[] = "update";
const char PROGMEM HELP_CMD[] = "help";
const char PROGMEM SETTINGS_CMD[] = "settings";
// WiFi sniff/scan
const char PROGMEM SCANAP_CMD[] = "scanap";
@@ -69,6 +72,7 @@ const char PROGMEM HELP_CLEARAP_CMD_B[] = "clearlist -s";
const char PROGMEM HELP_REBOOT_CMD[] = "reboot";
const char PROGMEM HELP_UPDATE_CMD_A[] = "update -s";
const char PROGMEM HELP_UPDATE_CMD_B[] = "update -w";
const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> <value>]";
// WiFi sniff/scan
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";

View File

@@ -14,6 +14,10 @@ void Display::RunSetup()
// Need to declare new
display_buffer = new LinkedList<String>();
#ifdef SCREEN_BUFFER
screen_buffer = new LinkedList<String>();
#endif
tft.init();
tft.setRotation(0); // Portrait
@@ -252,30 +256,57 @@ void Display::clearScreen()
tft.setCursor(0, 0);
}
#ifdef SCREEN_BUFFER
void Display::scrollScreenBuffer(bool down) {
// Scroll screen normal direction (Up)
if (!down) {
this->screen_buffer->shift();
}
}
#endif
void Display::displayBuffer(bool do_clear)
{
if (this->display_buffer->size() > 0)
{
delay(1);
while (display_buffer->size() > 0)
{
xPos = 0;
if ((display_buffer->size() > 0) && (!loading))
{
printing = true;
delay(print_delay_1);
yDraw = scroll_line(TFT_RED);
tft.setCursor(xPos, yDraw);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.print(display_buffer->shift());
printing = false;
delay(print_delay_2);
}
if (!tteBar)
blank[(18+(yStart - TOP_FIXED_AREA) / TEXT_HEIGHT)%19] = xPos;
else
blank[(18+(yStart - TOP_FIXED_AREA_2) / TEXT_HEIGHT)%19] = xPos;
#ifndef SCREEN_BUFFER
xPos = 0;
if ((display_buffer->size() > 0) && (!loading))
{
printing = true;
delay(print_delay_1);
yDraw = scroll_line(TFT_RED);
tft.setCursor(xPos, yDraw);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.print(display_buffer->shift());
printing = false;
delay(print_delay_2);
}
if (!tteBar)
blank[(18+(yStart - TOP_FIXED_AREA) / TEXT_HEIGHT)%19] = xPos;
else
blank[(18+(yStart - TOP_FIXED_AREA_2) / TEXT_HEIGHT)%19] = xPos;
#else
xPos = 0;
if (this->screen_buffer->size() >= MAX_SCREEN_BUFFER)
this->scrollScreenBuffer();
screen_buffer->add(display_buffer->shift());
for (int i = 0; i < this->screen_buffer->size(); i++) {
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
for (int x = 0; x < TFT_WIDTH / CHAR_WIDTH; x++)
tft.print(" ");
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.print(this->screen_buffer->get(i));
}
#endif
}
}
}

View File

@@ -72,6 +72,10 @@ class Display
void drawFrame();
#ifdef SCREEN_BUFFER
void scrollScreenBuffer(bool down = false);
#endif
//void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable);
//void changeMenu(Menu* menu);
//void showMenuList(Menu* menu, int layer);
@@ -103,6 +107,10 @@ class Display
LinkedList<String>* display_buffer;
#ifdef SCREEN_BUFFER
LinkedList<String>* screen_buffer;
#endif
// The initial y coordinate of the top of the bottom text line
uint16_t yDraw = YMAX - BOT_FIXED_AREA - TEXT_HEIGHT;

View File

@@ -926,7 +926,10 @@ void MenuFunctions::main(uint32_t currentTime)
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_RICK_ROLL) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_BEACON_LIST) ||
(wifi_scan_obj.currentScanMode == BT_SCAN_ALL) ||
(wifi_scan_obj.currentScanMode == BT_SCAN_SKIMMERS))
(wifi_scan_obj.currentScanMode == BT_SCAN_SKIMMERS) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_EAPOL) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_ACTIVE_EAPOL) ||
(wifi_scan_obj.currentScanMode == WIFI_PACKET_MONITOR))
{
//Serial.println("Stopping scan...");
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
@@ -1016,17 +1019,31 @@ void MenuFunctions::main(uint32_t currentTime)
#ifdef MARAUDER_MINI
if (u_btn.justPressed()){
if (current_menu->selected > 0) {
current_menu->selected--;
this->buttonSelected(current_menu->selected);
this->buttonNotSelected(current_menu->selected + 1);
if (wifi_scan_obj.currentScanMode == WIFI_SCAN_OFF) {
if (current_menu->selected > 0) {
current_menu->selected--;
this->buttonSelected(current_menu->selected);
this->buttonNotSelected(current_menu->selected + 1);
}
}
else if ((wifi_scan_obj.currentScanMode == WIFI_PACKET_MONITOR) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_EAPOL)) {
if (wifi_scan_obj.set_channel < 14)
wifi_scan_obj.changeChannel(wifi_scan_obj.set_channel + 1);
}
}
if (d_btn.justPressed()){
if (current_menu->selected < current_menu->list->size() - 1) {
current_menu->selected++;
this->buttonSelected(current_menu->selected);
this->buttonNotSelected(current_menu->selected - 1);
if (wifi_scan_obj.currentScanMode == WIFI_SCAN_OFF) {
if (current_menu->selected < current_menu->list->size() - 1) {
current_menu->selected++;
this->buttonSelected(current_menu->selected);
this->buttonNotSelected(current_menu->selected - 1);
}
}
else if ((wifi_scan_obj.currentScanMode == WIFI_PACKET_MONITOR) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_EAPOL)) {
if (wifi_scan_obj.set_channel > 1)
wifi_scan_obj.changeChannel(wifi_scan_obj.set_channel - 1);
}
}
if(c_btn_press){
@@ -1510,12 +1527,25 @@ void MenuFunctions::RunSetup()
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_SCAN_DEAUTH, TFT_RED);
});
addNodes(&wifiSnifferMenu, text_table1[45], TFT_BLUE, NULL, PACKET_MONITOR, [this]() {
wifi_scan_obj.StartScan(WIFI_PACKET_MONITOR, TFT_BLUE);
});
addNodes(&wifiSnifferMenu, text_table1[46], TFT_VIOLET, NULL, EAPOL, [this]() {
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
});
#ifndef MARAUDER_MINI
addNodes(&wifiSnifferMenu, text_table1[46], TFT_VIOLET, NULL, EAPOL, [this]() {
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
});
addNodes(&wifiSnifferMenu, text_table1[45], TFT_BLUE, NULL, PACKET_MONITOR, [this]() {
wifi_scan_obj.StartScan(WIFI_PACKET_MONITOR, TFT_BLUE);
});
#else
addNodes(&wifiSnifferMenu, text_table1[46], TFT_VIOLET, NULL, EAPOL, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
});
addNodes(&wifiSnifferMenu, text_table1[45], TFT_BLUE, NULL, PACKET_MONITOR, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_PACKET_MONITOR, TFT_BLUE);
});
#endif
addNodes(&wifiSnifferMenu, text_table1[47], TFT_RED, NULL, PWNAGOTCHI, [this]() {
display_obj.clearScreen();
this->drawStatusBar();

View File

@@ -348,14 +348,18 @@ void WiFiScan::startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
#endif
packets_sent = 0;
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
esp_wifi_set_mode(WIFI_AP_STA);
esp_wifi_start();
esp_wifi_set_promiscuous_filter(NULL);
WiFi.mode(WIFI_AP_STA);
//esp_wifi_init(&cfg);
//esp_wifi_set_storage(WIFI_STORAGE_RAM);
//esp_wifi_set_mode(WIFI_AP_STA);
//esp_wifi_start();
//esp_wifi_set_promiscuous_filter(NULL);
esp_wifi_set_promiscuous(true);
esp_wifi_set_max_tx_power(78);
esp_wifi_set_max_tx_power(82);
this->wifi_initialized = true;
#ifdef MARAUDER_FLIPPER
flipper_led.attackLED();
#endif
initTime = millis();
}
@@ -368,6 +372,10 @@ bool WiFiScan::shutdownWiFi() {
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_stop();
esp_wifi_deinit();
#ifdef MARAUDER_FLIPPER
flipper_led.offLED();
#endif
this->wifi_initialized = false;
return true;
@@ -384,6 +392,10 @@ bool WiFiScan::shutdownBLE() {
pBLEScan->clearResults();
BLEDevice::deinit();
#ifdef MARAUDER_FLIPPER
flipper_led.offLED();
#endif
this->ble_initialized = false;
return true;
@@ -431,6 +443,9 @@ void WiFiScan::StopScan(uint8_t scan_mode)
#ifdef HAS_SCREEN
display_obj.display_buffer->clear();
#ifdef SCREEN_BUFFER
display_obj.screen_buffer->clear();
#endif
//Serial.print("display_buffer->size(): ");
Serial.println(display_obj.display_buffer->size());
@@ -498,6 +513,10 @@ void WiFiScan::RunAPScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("ap");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
Serial.println(text_table4[9] + (String)access_points->size());
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
@@ -507,9 +526,11 @@ void WiFiScan::RunAPScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[44],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[44],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -666,11 +687,11 @@ void WiFiScan::RunInfo()
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(false);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setCursor(0, SCREEN_HEIGHT / 3);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_CYAN);
display_obj.tft.println(text_table4[20]);
display_obj.tft.println(text_table4[21] + display_obj.version_number + "\n");
display_obj.tft.println(text_table4[21] + display_obj.version_number);
display_obj.tft.println(text_table4[22] + (String)esp_get_idf_version());
#endif
@@ -727,6 +748,10 @@ void WiFiScan::RunInfo()
void WiFiScan::RunEspressifScan(uint8_t scan_mode, uint16_t color) {
sd_obj.openCapture("espressif");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
@@ -735,9 +760,11 @@ void WiFiScan::RunEspressifScan(uint8_t scan_mode, uint16_t color) {
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[36],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[36],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -756,38 +783,62 @@ void WiFiScan::RunEspressifScan(uint8_t scan_mode, uint16_t color) {
void WiFiScan::RunPacketMonitor(uint8_t scan_mode, uint16_t color)
{
#ifdef HAS_SCREEN
display_obj.tft.init();
display_obj.tft.setRotation(1);
display_obj.tft.fillScreen(TFT_BLACK);
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
sd_obj.openCapture("packet_monitor");
#ifdef HAS_SCREEN
#ifdef TFT_SHIELD
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
Serial.println("Using TFT Shield");
#else if defined(TFT_DIY)
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
Serial.println("Using TFT DIY");
#ifndef MARAUDER_MINI
#ifdef HAS_SCREEN
display_obj.tft.init();
display_obj.tft.setRotation(1);
display_obj.tft.fillScreen(TFT_BLACK);
#endif
display_obj.tft.setTouch(calData);
//display_obj.tft.setFreeFont(1);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setTextSize(1);
display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); // Buttons
display_obj.tft.fillRect(12, 0, 90, 32, TFT_BLACK); // color key
delay(10);
display_obj.tftDrawGraphObjects(x_scale); //draw graph objects
display_obj.tftDrawColorKey();
display_obj.tftDrawXScaleButtons(x_scale);
display_obj.tftDrawYScaleButtons(y_scale);
display_obj.tftDrawChannelScaleButtons(set_channel);
display_obj.tftDrawExitScaleButtons();
#ifdef HAS_SCREEN
#ifdef TFT_SHIELD
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
Serial.println("Using TFT Shield");
#else if defined(TFT_DIY)
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
Serial.println("Using TFT DIY");
#endif
display_obj.tft.setTouch(calData);
//display_obj.tft.setFreeFont(1);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setTextSize(1);
display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); // Buttons
display_obj.tft.fillRect(12, 0, 90, 32, TFT_BLACK); // color key
delay(10);
display_obj.tftDrawGraphObjects(x_scale); //draw graph objects
display_obj.tftDrawColorKey();
display_obj.tftDrawXScaleButtons(x_scale);
display_obj.tftDrawYScaleButtons(y_scale);
display_obj.tftDrawChannelScaleButtons(set_channel);
display_obj.tftDrawExitScaleButtons();
#endif
#else
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[38],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
#endif
Serial.println("Running packet scan...");
@@ -805,37 +856,62 @@ void WiFiScan::RunPacketMonitor(uint8_t scan_mode, uint16_t color)
void WiFiScan::RunEapolScan(uint8_t scan_mode, uint16_t color)
{
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
num_eapol = 0;
#ifdef HAS_SCREEN
display_obj.tft.init();
display_obj.tft.setRotation(1);
display_obj.tft.fillScreen(TFT_BLACK);
#endif
sd_obj.openCapture("eapol");
#ifdef HAS_SCREEN
#ifdef TFT_SHIELD
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
//Serial.println("Using TFT Shield");
#else if defined(TFT_DIY)
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
//Serial.println("Using TFT DIY");
#ifndef MARAUDER_MINI
#ifdef HAS_SCREEN
display_obj.tft.init();
display_obj.tft.setRotation(1);
display_obj.tft.fillScreen(TFT_BLACK);
#endif
display_obj.tft.setTouch(calData);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setTextSize(1);
display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); // Buttons
display_obj.tft.fillRect(12, 0, 90, 32, TFT_BLACK); // color key
sd_obj.openCapture("eapol");
delay(10);
display_obj.tftDrawGraphObjects(x_scale); //draw graph objects
display_obj.tftDrawEapolColorKey();
display_obj.tftDrawChannelScaleButtons(set_channel);
display_obj.tftDrawExitScaleButtons();
#ifdef HAS_SCREEN
#ifdef TFT_SHIELD
uint16_t calData[5] = { 391, 3491, 266, 3505, 7 }; // Landscape TFT Shield
//Serial.println("Using TFT Shield");
#else if defined(TFT_DIY)
uint16_t calData[5] = { 213, 3469, 320, 3446, 1 }; // Landscape TFT DIY
//Serial.println("Using TFT DIY");
#endif
display_obj.tft.setTouch(calData);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setTextSize(1);
display_obj.tft.fillRect(127, 0, 193, 28, TFT_BLACK); // Buttons
display_obj.tft.fillRect(12, 0, 90, 32, TFT_BLACK); // color key
delay(10);
display_obj.tftDrawGraphObjects(x_scale); //draw graph objects
display_obj.tftDrawEapolColorKey();
display_obj.tftDrawChannelScaleButtons(set_channel);
display_obj.tftDrawExitScaleButtons();
#endif
#else
sd_obj.openCapture("eapol");
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[38],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
#endif
@@ -867,9 +943,11 @@ void WiFiScan::RunMimicFlood(uint8_t scan_mode, uint16_t color) {
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" Mimic Flood ",120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" Mimic Flood ",120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
#endif
@@ -889,6 +967,10 @@ void WiFiScan::RunPwnScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("pwnagotchi");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
@@ -897,9 +979,11 @@ void WiFiScan::RunPwnScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[37],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[37],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -921,6 +1005,10 @@ void WiFiScan::RunBeaconScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("beacon");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
@@ -929,9 +1017,11 @@ void WiFiScan::RunBeaconScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[38],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[38],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -952,6 +1042,10 @@ void WiFiScan::RunDeauthScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("deauth");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
@@ -960,9 +1054,11 @@ void WiFiScan::RunDeauthScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[39],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[39],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -985,6 +1081,10 @@ void WiFiScan::RunProbeScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("probe");
#ifdef MARAUDER_FLIPPER
flipper_led.sniffLED();
#endif
#ifdef HAS_SCREEN
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
@@ -993,9 +1093,11 @@ void WiFiScan::RunProbeScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[40],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[40],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -1033,9 +1135,11 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color)
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[41],120,16,2);
display_obj.touchToExit();
#ifndef MARAUDER_MINI
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(text_table4[41],120,16,2);
display_obj.touchToExit();
#endif
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
#endif
@@ -2055,8 +2159,8 @@ void WiFiScan::broadcastRandomSSID(uint32_t currentTime) {
packet[38 + 6 + i] = postSSID[i];
esp_wifi_80211_tx(WIFI_IF_AP, packet, sizeof(packet), false);
esp_wifi_80211_tx(WIFI_IF_AP, packet, sizeof(packet), false);
esp_wifi_80211_tx(WIFI_IF_AP, packet, sizeof(packet), false);
//ESP_ERROR_CHECK(esp_wifi_80211_tx(WIFI_IF_AP, packet, sizeof(packet), false));
//ESP_ERROR_CHECK(esp_wifi_80211_tx(WIFI_IF_AP, packet, sizeof(packet), false));
packets_sent = packets_sent + 3;
}
@@ -2210,6 +2314,14 @@ void WiFiScan::wifiSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
wifi_pkt_rx_ctrl_t ctrl = (wifi_pkt_rx_ctrl_t)snifferPacket->rx_ctrl;
int len = snifferPacket->rx_ctrl.sig_len;
String display_string = "";
#ifdef HAS_SCREEN
int buff = display_obj.display_buffer->size();
#else
int buff = 0;
#endif
if (type == WIFI_PKT_MGMT)
{
len -= 4;
@@ -2218,18 +2330,44 @@ void WiFiScan::wifiSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
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] == 0x80)
{
num_beacon++;
}
else if ((snifferPacket->payload[0] == 0xA0 || snifferPacket->payload[0] == 0xC0 ))
{
num_deauth++;
}
else if (snifferPacket->payload[0] == 0x40)
{
num_probe++;
}
#ifndef MARAUDER_MINI
if (snifferPacket->payload[0] == 0x80)
{
num_beacon++;
}
else if ((snifferPacket->payload[0] == 0xA0 || snifferPacket->payload[0] == 0xC0 ))
{
num_deauth++;
}
else if (snifferPacket->payload[0] == 0x40)
{
num_probe++;
}
#endif
char addr[] = "00:00:00:00:00:00";
getMAC(addr, snifferPacket->payload, 10);
display_string.concat(addr);
int temp_len = display_string.length();
#ifdef HAS_SCREEN
for (int i = 0; i < 40 - temp_len; i++)
{
display_string.concat(" ");
}
//Serial.print(" ");
#ifdef MARAUDER_MINI
if (display_obj.display_buffer->size() == 0)
{
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
#endif
#endif
if (save_packet)
sd_obj.addPacket(snifferPacket->payload, len);
@@ -2246,6 +2384,8 @@ void WiFiScan::eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
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)
{
len -= 4;
@@ -2254,6 +2394,12 @@ void WiFiScan::eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
const WifiMgmtHdr *hdr = &ipkt->hdr;
}
#ifdef HAS_SCREEN
int buff = display_obj.display_buffer->size();
#else
int buff = 0;
#endif
// Found beacon frame. Decide whether to deauth
if (send_deauth) {
if (snifferPacket->payload[0] == 0x80) {
@@ -2294,6 +2440,30 @@ void WiFiScan::eapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
num_eapol++;
Serial.println("Received EAPOL:");
char addr[] = "00:00:00:00:00:00";
getMAC(addr, snifferPacket->payload, 10);
display_string.concat(addr);
int temp_len = display_string.length();
#ifdef HAS_SCREEN
for (int i = 0; i < 40 - temp_len; i++)
{
display_string.concat(" ");
}
Serial.print(" ");
#ifdef MARAUDER_MINI
if (display_obj.display_buffer->size() == 0)
{
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
#endif
#endif
for (int i = 0; i < len; i++) {
char hexCar[4];
sprintf(hexCar, "%02X", snifferPacket->payload[i]);
@@ -2795,6 +2965,12 @@ void WiFiScan::activeEapolSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t
// showMetadata(snifferPacket, type);
//}
void WiFiScan::changeChannel(int chan) {
this->set_channel = chan;
esp_wifi_set_channel(this->set_channel, WIFI_SECOND_CHAN_NONE);
delay(1);
}
void WiFiScan::changeChannel()
{
esp_wifi_set_channel(this->set_channel, WIFI_SECOND_CHAN_NONE);
@@ -2841,13 +3017,17 @@ void WiFiScan::main(uint32_t currentTime)
else if (currentScanMode == WIFI_PACKET_MONITOR)
{
#ifdef HAS_SCREEN
packetMonitorMain(currentTime);
#ifndef MARAUDER_MINI
packetMonitorMain(currentTime);
#endif
#endif
}
else if (currentScanMode == WIFI_SCAN_EAPOL)
{
#ifdef HAS_SCREEN
eapolMonitorMain(currentTime);
#ifndef MARAUDER_MINI
eapolMonitorMain(currentTime);
#endif
#endif
}
else if (currentScanMode == WIFI_SCAN_ACTIVE_EAPOL)

View File

@@ -30,6 +30,7 @@
#include "TemperatureInterface.h"
#include "settings.h"
#include "Assets.h"
#include "flipperLED.h"
//#include "MenuFunctions.h"
#define bad_list_length 3
@@ -74,6 +75,7 @@ extern Buffer buffer_obj;
extern BatteryInterface battery_obj;
extern TemperatureInterface temp_obj;
extern Settings settings_obj;
extern flipperLED flipper_led;
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
@@ -295,6 +297,7 @@ class WiFiScan
String getApMAC();
String freeRAM();
void changeChannel();
void changeChannel(int chan);
void RunInfo();
void RunShutdownWiFi();
void RunShutdownBLE();

View File

@@ -7,11 +7,11 @@
//#define MARAUDER_MINI
//#define MARAUDER_V4
//#define MARAUDER_V6
#define MARAUDER_KIT
//#define MARAUDER_KIT
//#define GENERIC_ESP32
//#define MARAUDER_FLIPPER
#define MARAUDER_FLIPPER
#define MARAUDER_VERSION "v0.9.9"
#define MARAUDER_VERSION "v0.9.12"
//// BUTTON DEFINITIONS
#ifdef MARAUDER_MINI
@@ -201,6 +201,10 @@
#define TOUCH_CS 21
#define SD_CS 4
#define SCREEN_BUFFER
#define MAX_SCREEN_BUFFER 9
#define BANNER_TEXT_SIZE 1
#ifndef TFT_WIDTH
@@ -210,7 +214,8 @@
#ifndef TFT_HEIGHT
#define TFT_HEIGHT 128
#endif
#define CHAR_WIDTH 6
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
#define HEIGHT_1 TFT_WIDTH
@@ -346,7 +351,7 @@
#endif
#ifdef MARAUDER_FLIPPER
#define SD_CS -1
#define SD_CS 10
#endif
//// END SD DEFINITIONS

View File

@@ -34,6 +34,7 @@ https://www.online-utility.org/image/convert/to/XBM
#include "settings.h"
#include "CommandLine.h"
#include "lang_var.h"
#include "flipperLED.h"
#ifdef HAS_SCREEN
#include "Display.h"
@@ -60,6 +61,7 @@ LedInterface led_obj;
EspInterface esp_obj;
Settings settings_obj;
CommandLine cli_obj;
flipperLED flipper_led;
#ifdef HAS_SCREEN
Display display_obj;
@@ -134,6 +136,10 @@ void setup()
// Serial.println("Does not have screen");
//#endif
#ifdef MARAUDER_FLIPPER
flipper_led.RunSetup();
#endif
#ifdef HAS_SCREEN
display_obj.RunSetup();
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
@@ -271,6 +277,11 @@ void setup()
void loop()
{
currentTime = millis();
bool mini = false;
#ifdef MARAUDER_MINI
mini = true;
#endif
// Update all of our objects
#ifdef HAS_SCREEN
@@ -292,8 +303,8 @@ void loop()
temp_obj.main(currentTime);
#endif
settings_obj.main(currentTime);
if ((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) &&
(wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) {
if (((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) ||
(mini)) {
#ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
@@ -301,7 +312,11 @@ void loop()
}
if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
web_obj.main();
delay(1);
#ifdef HAS_SCREEN
delay(1);
#else
delay(50);
#endif
}
#ifdef HAS_SCREEN
else if ((display_obj.draw_tft) &&

Binary file not shown.

View File

@@ -0,0 +1,41 @@
#include "flipperLED.h"
void flipperLED::RunSetup() {
pinMode(B_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(R_PIN, OUTPUT);
delay(50);
digitalWrite(B_PIN, LOW);
delay(500);
digitalWrite(B_PIN, HIGH);
digitalWrite(G_PIN, LOW);
delay(500);
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, LOW);
delay(500);
digitalWrite(R_PIN, HIGH);
}
void flipperLED::attackLED() {
digitalWrite(B_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
delay(10);
digitalWrite(R_PIN, LOW);
}
void flipperLED::sniffLED() {
digitalWrite(B_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
delay(10);
digitalWrite(B_PIN, LOW);
}
void flipperLED::offLED() {
digitalWrite(B_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
}

View File

@@ -0,0 +1,19 @@
#ifndef flipperLED_h
#define flipperLED_h
#include <Arduino.h>
#define B_PIN 4
#define G_PIN 5
#define R_PIN 6
class flipperLED {
public:
void RunSetup();
void attackLED();
void sniffLED();
void offLED();
};
#endif

View File

@@ -144,21 +144,21 @@ PROGMEM const char text4_16[] = "Shutting down WiFi...";
PROGMEM const char text4_17[] = "WiFi not currently initialized";
PROGMEM const char text4_18[] = "Shutting down BLE...";
PROGMEM const char text4_19[] = "BLE not currently initialized";
PROGMEM const char text4_20[] = " Firmware: Marauder"; //From 20 to 35 add spaces so : is in line like it is now
PROGMEM const char text4_21[] = " Version: ";
PROGMEM const char text4_22[] = " ESP-IDF: ";
PROGMEM const char text4_23[] = " WSL Bypass: enabled\n";
PROGMEM const char text4_24[] = " WSL Bypass: disabled\n";
PROGMEM const char text4_25[] = " Station MAC: ";
PROGMEM const char text4_26[] = " AP MAC: ";
PROGMEM const char text4_27[] = " ";
PROGMEM const char text4_28[] = " SD Card: Connected";
PROGMEM const char text4_29[] = " SD Card Size: ";
PROGMEM const char text4_30[] = " SD Card: Not Connected";
PROGMEM const char text4_31[] = " SD Card Size: 0";
PROGMEM const char text4_32[] = " IP5306 I2C: supported";
PROGMEM const char text4_33[] = " Battery Lvl: ";
PROGMEM const char text4_34[] = " IP5306 I2C: not supported";
PROGMEM const char text4_20[] = "Firmware: Marauder"; //From 20 to 35 add spaces so : is in line like it is now
PROGMEM const char text4_21[] = "Version: ";
PROGMEM const char text4_22[] = "ESP-IDF: ";
PROGMEM const char text4_23[] = "WSL Bypass: enabled";
PROGMEM const char text4_24[] = "WSL Bypass: disabled";
PROGMEM const char text4_25[] = "Station MAC: ";
PROGMEM const char text4_26[] = "AP MAC: ";
PROGMEM const char text4_27[] = "";
PROGMEM const char text4_28[] = "SD Card: Connected";
PROGMEM const char text4_29[] = "SD Card Size: ";
PROGMEM const char text4_30[] = "SD Card: Not Connected";
PROGMEM const char text4_31[] = "SD Card Size: 0";
PROGMEM const char text4_32[] = "IP5306 I2C: supported";
PROGMEM const char text4_33[] = "Battery Lvl: ";
PROGMEM const char text4_34[] = "IP5306 I2C: not supported";
PROGMEM const char text4_35[] = "Internal temp: ";
PROGMEM const char text4_36[] = " Detect Espressif ";
PROGMEM const char text4_37[] = " Detect Pwnagotchi ";

View File

@@ -20,7 +20,6 @@ class Settings {
private:
String json_settings_string;
void printJsonSettings(String json_string);
bool createDefaultSettings(fs::FS &fs);
public:
@@ -50,6 +49,7 @@ class Settings {
//uint8_t loadSetting<uint8_t>(String key);
String getSettingsString();
void printJsonSettings(String json_string);
void main(uint32_t currentTime);
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB