first commit
This commit is contained in:
200
DeautherX/DeautherX.ino
Normal file
200
DeautherX/DeautherX.ino
Normal file
@@ -0,0 +1,200 @@
|
||||
#include <StringSplitter.h>
|
||||
|
||||
/* =====================
|
||||
This software is licensed under the MIT License:
|
||||
https://github.com/BlackTechX011/DeautherX
|
||||
===================== */
|
||||
|
||||
extern "C" {
|
||||
// Please follow this tutorial:
|
||||
// https://github.com/spacehuhn/esp8266_deauther/wiki/Installation#compiling-using-arduino-ide
|
||||
// And be sure to have the right board selected
|
||||
#include "user_interface.h"
|
||||
}
|
||||
|
||||
#include "EEPROMHelper.h"
|
||||
|
||||
#include "src/ArduinoJson-v5.13.5/ArduinoJson.h"
|
||||
#if ARDUINOJSON_VERSION_MAJOR != 5
|
||||
// The software was build using ArduinoJson v5.x
|
||||
// version 6 is still in beta at the time of writing
|
||||
// go to tools -> manage libraries, search for ArduinoJSON and install version 5
|
||||
#error Please upgrade/downgrade ArduinoJSON library to version 5!
|
||||
#endif // if ARDUINOJSON_VERSION_MAJOR != 5
|
||||
|
||||
#include "oui.h"
|
||||
#include "language.h"
|
||||
#include "functions.h"
|
||||
#include "settings.h"
|
||||
#include "Names.h"
|
||||
#include "SSIDs.h"
|
||||
#include "Scan.h"
|
||||
#include "Attack.h"
|
||||
#include "CLI.h"
|
||||
#include "DisplayUI.h"
|
||||
#include "A_config.h"
|
||||
|
||||
#include "led.h"
|
||||
|
||||
// Run-Time Variables //
|
||||
Names names;
|
||||
SSIDs ssids;
|
||||
Accesspoints accesspoints;
|
||||
Stations stations;
|
||||
Scan scan;
|
||||
Attack attack;
|
||||
CLI cli;
|
||||
DisplayUI displayUI;
|
||||
|
||||
simplebutton::Button* resetButton;
|
||||
|
||||
#include "wifi.h"
|
||||
|
||||
uint32_t autosaveTime = 0;
|
||||
uint32_t currentTime = 0;
|
||||
|
||||
bool booted = false;
|
||||
|
||||
void setup() {
|
||||
// for random generator
|
||||
randomSeed(os_random());
|
||||
|
||||
// start serial
|
||||
Serial.begin(115200);
|
||||
Serial.println();
|
||||
|
||||
// start SPIFFS
|
||||
prnt(SETUP_MOUNT_SPIFFS);
|
||||
// bool spiffsError = !LittleFS.begin();
|
||||
LittleFS.begin();
|
||||
prntln(/*spiffsError ? SETUP_ERROR : */ SETUP_OK);
|
||||
|
||||
// Start EEPROM
|
||||
EEPROMHelper::begin(EEPROM_SIZE);
|
||||
|
||||
#ifdef FORMAT_SPIFFS
|
||||
prnt(SETUP_FORMAT_SPIFFS);
|
||||
LittleFS.format();
|
||||
prntln(SETUP_OK);
|
||||
#endif // ifdef FORMAT_SPIFFS
|
||||
|
||||
#ifdef FORMAT_EEPROM
|
||||
prnt(SETUP_FORMAT_EEPROM);
|
||||
EEPROMHelper::format(EEPROM_SIZE);
|
||||
prntln(SETUP_OK);
|
||||
#endif // ifdef FORMAT_EEPROM
|
||||
|
||||
// Format SPIFFS when in boot-loop
|
||||
if (/*spiffsError || */ !EEPROMHelper::checkBootNum(BOOT_COUNTER_ADDR)) {
|
||||
prnt(SETUP_FORMAT_SPIFFS);
|
||||
LittleFS.format();
|
||||
prntln(SETUP_OK);
|
||||
|
||||
prnt(SETUP_FORMAT_EEPROM);
|
||||
EEPROMHelper::format(EEPROM_SIZE);
|
||||
prntln(SETUP_OK);
|
||||
|
||||
EEPROMHelper::resetBootNum(BOOT_COUNTER_ADDR);
|
||||
}
|
||||
|
||||
// get time
|
||||
currentTime = millis();
|
||||
|
||||
// load settings
|
||||
#ifndef RESET_SETTINGS
|
||||
settings::load();
|
||||
#else // ifndef RESET_SETTINGS
|
||||
settings::reset();
|
||||
settings::save();
|
||||
#endif // ifndef RESET_SETTINGS
|
||||
|
||||
wifi::begin();
|
||||
wifi_set_promiscuous_rx_cb([](uint8_t* buf, uint16_t len) {
|
||||
scan.sniffer(buf, len);
|
||||
});
|
||||
|
||||
// start display
|
||||
if (settings::getDisplaySettings().enabled) {
|
||||
displayUI.setup();
|
||||
displayUI.mode = DISPLAY_MODE::INTRO;
|
||||
}
|
||||
// load everything else
|
||||
names.load();
|
||||
ssids.load();
|
||||
cli.load();
|
||||
|
||||
// create scan.json
|
||||
scan.setup();
|
||||
|
||||
// dis/enable serial command interface
|
||||
if (settings::getCLISettings().enabled) {
|
||||
cli.enable();
|
||||
} else {
|
||||
prntln(SETUP_SERIAL_WARNING);
|
||||
Serial.flush();
|
||||
Serial.end();
|
||||
}
|
||||
|
||||
// start access point/web interface
|
||||
if (settings::getWebSettings().enabled) wifi::startAP();
|
||||
|
||||
// STARTED
|
||||
prntln(SETUP_STARTED);
|
||||
|
||||
// version
|
||||
prntln(DEAUTHER_VERSION);
|
||||
|
||||
// setup LED
|
||||
led::setup();
|
||||
|
||||
// setup reset button
|
||||
resetButton = new ButtonPullup(RESET_BUTTON);
|
||||
resetButton->setOnDoubleClicked([](){
|
||||
displayUI.shutDown();
|
||||
});
|
||||
}
|
||||
|
||||
void loop() {
|
||||
currentTime = millis();
|
||||
|
||||
led::update(); // update LED color
|
||||
wifi::update(); // manage access point
|
||||
attack.update(); // run attacks
|
||||
displayUI.update();
|
||||
cli.update(); // read and run serial input
|
||||
scan.update(); // run scan
|
||||
ssids.update(); // run random mode, if enabled
|
||||
|
||||
// auto-save
|
||||
if (settings::getAutosaveSettings().enabled
|
||||
&& (currentTime - autosaveTime > settings::getAutosaveSettings().time)) {
|
||||
autosaveTime = currentTime;
|
||||
names.save(false);
|
||||
ssids.save(false);
|
||||
settings::save(false);
|
||||
}
|
||||
|
||||
if (!booted) {
|
||||
booted = true;
|
||||
EEPROMHelper::resetBootNum(BOOT_COUNTER_ADDR);
|
||||
#ifdef HIGHLIGHT_LED
|
||||
displayUI.setupLED();
|
||||
#endif // ifdef HIGHLIGHT_LED
|
||||
}
|
||||
|
||||
resetButton->update();
|
||||
if (resetButton->holding(3000)) {
|
||||
led::setMode(LED_MODE::SCAN);
|
||||
DISPLAY_MODE _mode = displayUI.mode;
|
||||
displayUI.mode = DISPLAY_MODE::RESETTING;
|
||||
displayUI.update(true);
|
||||
|
||||
settings::reset();
|
||||
settings::save(true);
|
||||
|
||||
delay(2000);
|
||||
|
||||
led::setMode(LED_MODE::IDLE);
|
||||
displayUI.mode = _mode;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user