Compare commits
25 Commits
Author | SHA1 | Date |
---|---|---|
Stefan | b98f159811 | |
Temm | 02d5ad0d2a | |
azzar | 7d6f22c4e6 | |
Stefan Kremser | da75a4f954 | |
Stefan Kremser | a1f467ed6e | |
Devin Norgarb | bbe1b24e30 | |
Erdinc | 8dd2a58ba2 | |
Spacehuhn | 7f7d215305 | |
Spacehuhn | 684e47f7d5 | |
Spacehuhn | f984e897a0 | |
Spacehuhn | 7a574188c7 | |
Spacehuhn | 1ed2f127fd | |
Spacehuhn | 397ec9fc70 | |
Spacehuhn | f3432d20fb | |
Spacehuhn | 27b921e44f | |
Spacehuhn | bbafd9fdf2 | |
Spacehuhn | 60be948cc0 | |
Spacehuhn | 8b99fcbb33 | |
Spacehuhn | 84f2f83f13 | |
Ignatius Tremor | fe06b87dc1 | |
Spacehuhn | 535d2d3f95 | |
Spacehuhn | 4bd56ff755 | |
Spacehuhn | 8c289baf33 | |
Spacehuhn | 4e7264bc4f | |
Spacehuhn | 0272e83c3d |
|
@ -3,7 +3,7 @@
|
|||
github: spacehuhntech
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
ko_fi: spacehuhn
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 90
|
||||
daysUntilStale: 180
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
|
|
121
README.md
121
README.md
|
@ -1,115 +1,38 @@
|
|||
# ESP8266 Deauther Version 2
|
||||
# ESP8266 Deauther
|
||||
|
||||
<p align="center">
|
||||
<img alt="PICTURE logo" src="https://raw.githubusercontent.com/wiki/spacehuhn/esp8266_deauther/img/deauther_logo.png" width="200">
|
||||
<br>
|
||||
<b>Scan for WiFi devices, block selected connections, create dozens of networks and confuse WiFi scanners!</b>
|
||||
<br>
|
||||
<br>
|
||||
</p>
|
||||
<img src='https://deauther.com/img/logo.png' alt='Deauther Logo' width='200' />
|
||||
|
||||
## Difference to Version 3
|
||||
**Scan for WiFi devices, block selected connections, create dozens of networks and confuse WiFi scanners.**
|
||||
|
||||
[Version 3](https://github.com/SpacehuhnTech/esp8266_deauther/tree/v3) is in development. It is stable to use, but it is very different.
|
||||
It is command line based, which allows it to offer not just more features, but make them more customizable.
|
||||
## New Documentation
|
||||
|
||||
| Feature | Version 2 | Version 3 |
|
||||
| ------- | --------- | --------- |
|
||||
| Web Interface | ✅ | |
|
||||
| Display support | ✅ | |
|
||||
| Serial Command Line | ✅ | ✅ |
|
||||
| Scanner | ✅ | ✅ |
|
||||
| Deauth attack | ✅ | ✅ |
|
||||
| Beacon attack | ✅ | ✅ |
|
||||
| Probe attack | ✅ | ✅ |
|
||||
| [Huhnitor](https://github.com/spacehuhntech/huhnitor) support | | ✅ |
|
||||
| Signal strength scanner | | ✅ |
|
||||
| Authentication scanner | | ✅ |
|
||||
| Rogue AP | | ✅ |
|
||||
Hi 👋
|
||||
Please visit [Deauther.com](https://deauther.com) for information about this project.
|
||||
Here are some quick links:
|
||||
|
||||
## Installation
|
||||
* [Buy](https://deauther.com/docs/buy)
|
||||
* [Download](https://deauther.com/docs/download)
|
||||
* [DIY Tutorial](https://deauther.com/docs/category/diy-tutorial)
|
||||
* [Usage](https://deauther.com/docs/category/usage)
|
||||
* [FAQ](https://deauther.com/docs/faq)
|
||||
|
||||
Please refer to the [installation guide in our wiki](https://github.com/spacehuhntech/esp8266_deauther/wiki/Installation).
|
||||
If you're just looking for the .bin files, go to [releases](https://github.com/spacehuhn/esp8266_deauther/releases).
|
||||
## Password
|
||||
|
||||
## About this project
|
||||
This software allows you to easily perform a variety of actions to test 802.11 wireless networks by using an inexpensive ESP8266 WiFi SoC (System On A Chip).
|
||||
The password for `pwned` is `deauther`
|
||||
|
||||
The main feature, the deauthentication attack, is used to disconnect devices from their WiFi network.
|
||||
No one seems to care about this huge vulnerability in the official 802.11 WiFi standard, so I took action and enabled everyone who has less than 10 USD to spare to recreate this project.
|
||||
I hope it raises more attention on the issue. In 2009 the WiFi Alliance actually fixed the problem (see [802.11w](https://en.wikipedia.org/wiki/IEEE_802.11w-2009)), but only a few companies implemented it into their devices and software.
|
||||
To effectively prevent a deauthentication attack, both client and access point must support the 802.11w standard with protected management frames (PMF).
|
||||
While most client devices seem to support it when the access point forces it, basically no WiFi access point has it enabled.
|
||||
## About this Project
|
||||
|
||||
Feel free to test your hardware out, annoy these companies with the problem, share this project and push for a fix!
|
||||
This project is also a great way to learn more about WiFi, micro controllers, Arduino, hacking and electronics/programming in general.
|
||||
**But please use this tool responsibly and do not use it against others without their permission!**
|
||||
This firmware allows you to easily perform a variety of actions to test 802.11 networks using an [ESP8266](https://www.espressif.com/en/products/socs/esp8266). It's also a great project for learning about WiFi, microcontrollers, Arduino, hacking and electronics/programming in general.
|
||||
|
||||
## WiFi Jammer
|
||||
|
||||
Many refer to this project as a WiFi jammer. This is problematic, because this firmware is **not** turning your ESP8266 into a radio or frequency jammer. But this is how most people imagine it without further explaination.
|
||||
|
||||
So if you like to learn more about the difference, we made a whole video about it:
|
||||
[![Deauther or Jammer: What's the difference?](https://img.youtube.com/vi/gOyfD44A7rE/0.jpg)](https://www.youtube.com/watch?v=gOyfD44A7rE)
|
||||
|
||||
## Supported Development Boards
|
||||
|
||||
This firmware can run on any **ESP8266**, not however on the ESP32!
|
||||
The most popular development boards, the `NodeMCU` and `Wemos d1 mini`, work great for this project.
|
||||
|
||||
If you like to support our work, you can buy get a boards made with this project in mind.
|
||||
They come preflashed with the firmware, so you can start right away.
|
||||
You can chose between:
|
||||
|
||||
**[Spacehuhn Store](https://spacehuhn.store)**:
|
||||
Our very own store where all revenue goes directly to us and towards the development of new and exciting projects :)
|
||||
We manufacture and ship from Germany.
|
||||
|
||||
**[Maltronics](https://maltronics.com/)**:
|
||||
We partnered with Maltronics to bring you high quality hacking gadgets.
|
||||
They are based in the UK.
|
||||
|
||||
**[DSTIKE](https://dstike.com/)**:
|
||||
DSTIKE was our first partner. They manufactured the first official deauther boards.
|
||||
They offer a wide range of deauthers in all kind of form factores. Including a smart watch.
|
||||
They are based in China, but their products are available through a variety of stores:
|
||||
- [Tindie](https://tindie.com/stores/lspoplove)
|
||||
- [AliExpress](https://dstike.aliexpress.com/store/2996024)
|
||||
- [Taobao](https://shop135375846.taobao.com)
|
||||
The deauthentication attack is the main feature, which can be used to disconnect devices from their WiFi network.
|
||||
Although this denial-of-service attack is nothing new, a lot of devices are still vulnerable to it. Luckily this is slowly changing with more WiFi 6 enabled devices being used. But a lot of outdated WiFi devices remain in place, for example in cheap IoT hardware.
|
||||
With an ESP8266 Deauther, you can easily test this attack on your 2.4GHz WiFi network/devices and see whether it's successful or not. And if it is, you know you should upgrade your network.
|
||||
|
||||
## Disclaimer
|
||||
|
||||
This project is a proof of concept for testing and educational purposes.
|
||||
Neither the ESP8266, nor its SDK was meant or built for such purposes. Bugs can occur!
|
||||
Neither the ESP8266, nor its SDK was meant or built for such purposes. **Bugs can occur!**
|
||||
|
||||
Use it only against your own networks and devices!
|
||||
**Use it only against your own networks and devices!**
|
||||
Please check the legal regulations in your country before using it.
|
||||
We don't take any responsibility for what you do with this program.
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
A huge thanks to:
|
||||
|
||||
- [@deantonious](http://github.com/deantonious)
|
||||
- [@jLynx](https://github.com/jLynx)
|
||||
- [@lspoplove](https://github.com/lspoplove)
|
||||
- [@schinfo](https://github.com/schinfo)
|
||||
- [@tobozo](https://github.com/tobozo)
|
||||
- [@xdavidhu](https://github.com/xdavidhu)
|
||||
- [@PwnKitteh](https://github.com/PwnKitteh)
|
||||
|
||||
for helping out with various things regarding this project and keeping it alive!
|
||||
Also thanks to everyone working on the libraries used for this project:
|
||||
|
||||
- [esp8266-oled-ssd1306](https://github.com/ThingPulse/esp8266-oled-ssd1306)
|
||||
- [ArduinoJson](https://github.com/bblanchon/ArduinoJson)
|
||||
- [Adafruit_DotStar](https://github.com/adafruit/Adafruit_DotStar)
|
||||
- [Adafruit_NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel)
|
||||
- [DS3231](https://github.com/NorthernWidget/DS3231)
|
||||
- [my92xx](https://github.com/xoseperez/my92xx)
|
||||
|
||||
We also thank Espressif and their community for this awesome chip and all the software and hardware projects around it and the countless tutorials you can find online!
|
||||
|
||||
## License
|
||||
|
||||
This software is licensed under the MIT License. See the [license file](LICENSE) for details.
|
||||
We don't take any responsibility for what you do with this program.
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
// #define NODEMCU
|
||||
// #define WEMOS_D1_MINI
|
||||
// #define HACKHELD_VEGA
|
||||
// #define DISPLAY_EXAMPLE_I2C
|
||||
// #define DISPLAY_EXAMPLE_SPI
|
||||
|
||||
|
@ -56,9 +57,38 @@
|
|||
|
||||
// ========== CONFIGS ========== //
|
||||
|
||||
// https://github.com/spacehuhntech/hackheld
|
||||
#if defined(HACKHELD_VEGA)
|
||||
// ===== LED ===== //
|
||||
#define USE_LED true
|
||||
#define LED_NEOPIXEL
|
||||
|
||||
#define LED_NEOPIXEL_GRB
|
||||
// #define LED_NEOPIXEL_RGB
|
||||
|
||||
#define LED_MODE_BRIGHTNESS 10
|
||||
|
||||
#define LED_NUM 1
|
||||
#define LED_NEOPIXEL_PIN 15 // D8
|
||||
|
||||
// ===== DISPLAY ===== //
|
||||
#define USE_DISPLAY true
|
||||
#define FLIP_DIPLAY true
|
||||
|
||||
#define SH1106_I2C
|
||||
|
||||
#define I2C_ADDR 0x3C
|
||||
#define I2C_SDA 4 // D2
|
||||
#define I2C_SCL 5 // D1
|
||||
|
||||
// ===== BUTTONS ===== //
|
||||
#define BUTTON_UP 14 // D5
|
||||
#define BUTTON_DOWN 12 // D6
|
||||
#define BUTTON_A 2 // D4
|
||||
#define BUTTON_B 0 // D3
|
||||
|
||||
// https://github.com/SpacehuhnTech/esp8266_deauther/wiki/Setup-Display-&-Buttons#example-setup-with-i2c-oled
|
||||
#if defined(DISPLAY_EXAMPLE_I2C)
|
||||
#elif defined(DISPLAY_EXAMPLE_I2C)
|
||||
|
||||
// ===== DISPLAY ===== //
|
||||
#define SH1106_I2C
|
||||
|
@ -347,9 +377,9 @@
|
|||
|
||||
#elif defined(DEFAULT_ESP8266) || defined(NODEMCU) || defined(WEMOS_D1_MINI) || defined(DSTIKE_USB_DEAUTHER) || defined(DSTIKE_NODEMCU_07) || defined(DSTIKE_DEAUTHER_V1) || defined(DSTIKE_DEAUTHER_V2) || defined(DSTIKE_DEAUTHER_V3)
|
||||
// ===== LED ===== //
|
||||
#define LED_DIGITAL
|
||||
#define LED_PIN_R 16 // NodeMCU on-board LED
|
||||
#define LED_PIN_B 2 // ESP-12 LED
|
||||
// #define LED_DIGITAL
|
||||
// #define LED_PIN_R 16 // NodeMCU on-board LED
|
||||
// #define LED_PIN_B 2 // ESP-12 LED
|
||||
|
||||
#endif /* if defined(DEFAULT_ESP8266) || defined(NODEMCU) || defined(WEMOS_D1_MINI) || defined(DSTIKE_USB_DEAUTHER) || defined(DSTIKE_NODEMCU_07) || defined(DSTIKE_DEAUTHER) || defined(DSTIKE_DEAUTHER_V1) || defined(DSTIKE_DEAUTHER_V2) || defined(DSTIKE_DEAUTHER_V3) */
|
||||
// ============================== //
|
||||
|
@ -404,10 +434,6 @@
|
|||
#define MIN_DEAUTH_FRAMES 3
|
||||
#endif /* ifndef MIN_DEAUTH_FRAMES */
|
||||
|
||||
#ifndef DEFAULT_SSID
|
||||
#define DEFAULT_SSID "pwned"
|
||||
#endif /* ifndef DEFAULT_SSID */
|
||||
|
||||
// ===== ACCESS POINT ===== //
|
||||
#ifndef AP_SSID
|
||||
#define AP_SSID "pwned"
|
||||
|
@ -563,7 +589,7 @@
|
|||
|
||||
// ===== Reset ====== //
|
||||
#ifndef RESET_BUTTON
|
||||
#if BUTTON_UP != 0 && BUTTON_DOWN != 0 && BUTTON_A != 0 && BUTTON_B != 0 && BUTTON_B != 0
|
||||
#if BUTTON_UP != 0 && BUTTON_DOWN != 0 && BUTTON_A != 0 && BUTTON_B != 0
|
||||
#define RESET_BUTTON 0
|
||||
#else // if BUTTON_UP != 0 && BUTTON_DOWN != 0 && BUTTON_A != 0 && BUTTON_B != 0
|
||||
#define RESET_BUTTON 255
|
||||
|
@ -581,10 +607,10 @@
|
|||
|
||||
// ======== CONSTANTS ========== //
|
||||
// Do not change these values unless you know what you're doing!
|
||||
#define DEAUTHER_VERSION "2.6.0"
|
||||
#define DEAUTHER_VERSION "2.6.1"
|
||||
#define DEAUTHER_VERSION_MAJOR 2
|
||||
#define DEAUTHER_VERSION_MINOR 6
|
||||
#define DEAUTHER_VERSION_REVISION 0
|
||||
#define DEAUTHER_VERSION_REVISION 1
|
||||
|
||||
#define EEPROM_SIZE 4095
|
||||
#define BOOT_COUNTER_ADDR 1
|
||||
|
@ -697,6 +723,7 @@
|
|||
|
||||
*/
|
||||
|
||||
|
||||
// ========== ERROR CHECKS ========== //
|
||||
#if LED_MODE_BRIGHTNESS == 0
|
||||
#error LED_MODE_BRIGHTNESS must not be zero!
|
||||
|
|
|
@ -160,7 +160,7 @@ class Attack {
|
|||
// Fixed parameters
|
||||
/* 22 - 23 */ 0x00, 0x00, // Fragment & sequence number (will be done by the SDK)
|
||||
/* 24 - 31 */ 0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, // Timestamp
|
||||
/* 32 - 33 */ 0xe8, 0x03, // Interval: 0x64, 0x00 => every 100ms - 0xe8, 0x03 => every 1s
|
||||
/* 32 - 33 */ 0x64, 0x00, // Interval: 0x64, 0x00 => every 100ms - 0xe8, 0x03 => every 1s
|
||||
/* 34 - 35 */ 0x31, 0x00, // capabilities Tnformation
|
||||
|
||||
// Tagged parameters
|
||||
|
|
|
@ -87,15 +87,10 @@ void DisplayUI::setup() {
|
|||
scan.start(SCAN_MODE_SNIFFER, 0, SCAN_MODE_OFF, 0, false, wifi_channel);
|
||||
mode = DISPLAY_MODE::PACKETMONITOR;
|
||||
});
|
||||
|
||||
addMenuNode(&mainMenu, D_CLOCK, [this]() { // PACKET MONITOR
|
||||
mode = DISPLAY_MODE::CLOCK;
|
||||
display.setFont(ArialMT_Plain_24);
|
||||
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
});
|
||||
addMenuNode(&mainMenu, D_CLOCK, &clockMenu); // CLOCK
|
||||
|
||||
#ifdef HIGHLIGHT_LED
|
||||
addMenuNode(&mainMenu, D_LED, [this]() { // LED
|
||||
addMenuNode(&mainMenu, D_LED, [this]() { // LED
|
||||
highlightLED = !highlightLED;
|
||||
digitalWrite(HIGHLIGHT_LED, highlightLED);
|
||||
});
|
||||
|
@ -446,6 +441,20 @@ void DisplayUI::setup() {
|
|||
});
|
||||
});
|
||||
|
||||
// CLOCK MENU
|
||||
createMenu(&clockMenu, &mainMenu, [this]() {
|
||||
addMenuNode(&clockMenu, D_CLOCK_DISPLAY, [this]() { // CLOCK
|
||||
mode = DISPLAY_MODE::CLOCK_DISPLAY;
|
||||
display.setFont(ArialMT_Plain_24);
|
||||
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
});
|
||||
addMenuNode(&clockMenu, D_CLOCK_SET, [this]() { // CLOCK SET TIME
|
||||
mode = DISPLAY_MODE::CLOCK;
|
||||
display.setFont(ArialMT_Plain_24);
|
||||
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
});
|
||||
});
|
||||
|
||||
// ===================== //
|
||||
|
||||
// set current menu to main menu
|
||||
|
@ -523,7 +532,7 @@ void DisplayUI::setupButtons() {
|
|||
else currentMenu->selected = currentMenu->list->size() - 1;
|
||||
} else if (mode == DISPLAY_MODE::PACKETMONITOR) { // when in packet monitor, change channel
|
||||
scan.setChannel(wifi_channel + 1);
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) {
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) { // when in clock, change time
|
||||
setTime(clockHour, clockMinute + 1, clockSecond);
|
||||
}
|
||||
}
|
||||
|
@ -539,7 +548,7 @@ void DisplayUI::setupButtons() {
|
|||
else currentMenu->selected = currentMenu->list->size() - 1;
|
||||
} else if (mode == DISPLAY_MODE::PACKETMONITOR) { // when in packet monitor, change channel
|
||||
scan.setChannel(wifi_channel + 1);
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) { // when in packet monitor, change channel
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) { // when in clock, change time
|
||||
setTime(clockHour, clockMinute + 10, clockSecond);
|
||||
}
|
||||
}
|
||||
|
@ -556,7 +565,7 @@ void DisplayUI::setupButtons() {
|
|||
else currentMenu->selected = 0;
|
||||
} else if (mode == DISPLAY_MODE::PACKETMONITOR) { // when in packet monitor, change channel
|
||||
scan.setChannel(wifi_channel - 1);
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) { // when in packet monitor, change channel
|
||||
} else if (mode == DISPLAY_MODE::CLOCK) { // when in clock, change time
|
||||
setTime(clockHour, clockMinute - 1, clockSecond);
|
||||
}
|
||||
}
|
||||
|
@ -574,7 +583,7 @@ void DisplayUI::setupButtons() {
|
|||
scan.setChannel(wifi_channel - 1);
|
||||
}
|
||||
|
||||
else if (mode == DISPLAY_MODE::CLOCK) { // when in packet monitor, change channel
|
||||
else if (mode == DISPLAY_MODE::CLOCK) { // when in clock, change time
|
||||
setTime(clockHour, clockMinute - 10, clockSecond);
|
||||
}
|
||||
}
|
||||
|
@ -601,6 +610,7 @@ void DisplayUI::setupButtons() {
|
|||
break;
|
||||
|
||||
case DISPLAY_MODE::CLOCK:
|
||||
case DISPLAY_MODE::CLOCK_DISPLAY:
|
||||
mode = DISPLAY_MODE::MENU;
|
||||
display.setFont(DejaVu_Sans_Mono_12);
|
||||
display.setTextAlignment(TEXT_ALIGN_LEFT);
|
||||
|
@ -662,12 +672,18 @@ void DisplayUI::draw(bool force) {
|
|||
|
||||
updatePrefix();
|
||||
|
||||
#ifndef RTC_DS3231
|
||||
if (clockTime < currentTime - 1000) {
|
||||
setTime(clockHour, clockMinute++, clockSecond + 1);
|
||||
#ifdef RTC_DS3231
|
||||
bool h12;
|
||||
bool PM_time;
|
||||
clockHour = clock.getHour(h12, PM_time);
|
||||
clockMinute = clock.getMinute();
|
||||
clockSecond = clock.getSecond();
|
||||
#else // ifdef RTC_DS3231
|
||||
if (currentTime - clockTime >= 1000) {
|
||||
setTime(clockHour, clockMinute, ++clockSecond);
|
||||
clockTime += 1000;
|
||||
}
|
||||
#endif // ifndef RTC_DS3231
|
||||
#endif // ifdef RTC_DS3231
|
||||
|
||||
switch (mode) {
|
||||
case DISPLAY_MODE::BUTTON_TEST:
|
||||
|
@ -693,6 +709,7 @@ void DisplayUI::draw(bool force) {
|
|||
drawIntro();
|
||||
break;
|
||||
case DISPLAY_MODE::CLOCK:
|
||||
case DISPLAY_MODE::CLOCK_DISPLAY:
|
||||
drawClock();
|
||||
break;
|
||||
case DISPLAY_MODE::RESETTING:
|
||||
|
@ -921,4 +938,4 @@ void DisplayUI::setTime(int h, int m, int s) {
|
|||
clock.setMinute(clockMinute);
|
||||
clock.setSecond(clockSecond);
|
||||
#endif // ifdef RTC_DS3231
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@ enum class DISPLAY_MODE { OFF,
|
|||
PACKETMONITOR,
|
||||
INTRO,
|
||||
CLOCK,
|
||||
CLOCK_DISPLAY,
|
||||
RESETTING };
|
||||
|
||||
class DisplayUI {
|
||||
|
@ -156,6 +157,7 @@ class DisplayUI {
|
|||
Menu scanMenu;
|
||||
Menu showMenu;
|
||||
Menu attackMenu;
|
||||
Menu clockMenu;
|
||||
|
||||
Menu apListMenu;
|
||||
Menu stationListMenu;
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -117,9 +117,6 @@ void setup() {
|
|||
displayUI.mode = DISPLAY_MODE::INTRO;
|
||||
}
|
||||
|
||||
// copy web files to SPIFFS
|
||||
// copyWebFiles(false);
|
||||
|
||||
// load everything else
|
||||
names.load();
|
||||
ssids.load();
|
||||
|
@ -128,9 +125,6 @@ void setup() {
|
|||
// create scan.json
|
||||
scan.setup();
|
||||
|
||||
// set channel
|
||||
setWifiChannel(settings::getWifiSettings().channel, true);
|
||||
|
||||
// dis/enable serial command interface
|
||||
if (settings::getCLISettings().enabled) {
|
||||
cli.enable();
|
||||
|
@ -199,4 +193,4 @@ void loop() {
|
|||
led::setMode(LED_MODE::IDLE);
|
||||
displayUI.mode = _mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -365,6 +365,8 @@ const char D_SHOW[] PROGMEM = "SELECT";
|
|||
const char D_ATTACK[] PROGMEM = "ATTACK";
|
||||
const char D_PACKET_MONITOR[] PROGMEM = "PACKET MONITOR";
|
||||
const char D_CLOCK[] PROGMEM = "CLOCK";
|
||||
const char D_CLOCK_DISPLAY[] PROGMEM = "CLOCK DISPLAY";
|
||||
const char D_CLOCK_SET[] PROGMEM = "SET CLOCK";
|
||||
|
||||
// SCAN MENU
|
||||
const char D_SCAN_APST[] PROGMEM = "SCAN AP + ST";
|
||||
|
|
|
@ -26,9 +26,9 @@ namespace led {
|
|||
LED_MODE mode = OFF;
|
||||
|
||||
#if defined(LED_NEOPIXEL_RGB)
|
||||
Adafruit_NeoPixel strip { LED_NUM, LED_NEOPIXEL_PIN, NEO_RGB + NEO_KHZ400 };
|
||||
Adafruit_NeoPixel strip { LED_NUM, LED_NEOPIXEL_PIN, NEO_RGB + NEO_KHZ800 };
|
||||
#elif defined(LED_NEOPIXEL_GRB)
|
||||
Adafruit_NeoPixel strip { LED_NUM, LED_NEOPIXEL_PIN, NEO_GRB + NEO_KHZ400 };
|
||||
Adafruit_NeoPixel strip { LED_NUM, LED_NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800 };
|
||||
#elif defined(LED_MY92)
|
||||
my92xx myled { LED_MY92_MODEL, LED_NUM, LED_MY92_DATA, LED_MY92_CLK, MY92XX_COMMAND_DEFAULT };
|
||||
#elif defined(LED_DOTSTAR)
|
||||
|
@ -132,4 +132,4 @@ namespace led {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -85,7 +85,7 @@ namespace wifi {
|
|||
}
|
||||
|
||||
void setChannel(uint8_t ch) {
|
||||
if ((ch < 1) && (ch > 14)) {
|
||||
if ((ch < 1) || (ch > 14)) {
|
||||
debuglnF("ERROR: Channel must be withing the range of 1-14");
|
||||
} else {
|
||||
ap_settings.channel = ch;
|
||||
|
@ -192,10 +192,15 @@ namespace wifi {
|
|||
setPath("/web");
|
||||
setSSID(settings::getAccessPointSettings().ssid);
|
||||
setPassword(settings::getAccessPointSettings().password);
|
||||
setChannel(1);
|
||||
setChannel(settings::getWifiSettings().channel);
|
||||
setHidden(settings::getAccessPointSettings().hidden);
|
||||
setCaptivePortal(settings::getWebSettings().captive_portal);
|
||||
|
||||
// copy web files to SPIFFS
|
||||
if (settings::getWebSettings().use_spiffs) {
|
||||
copyWebFiles(false);
|
||||
}
|
||||
|
||||
// Set mode
|
||||
mode = wifi_mode_t::off;
|
||||
WiFi.mode(WIFI_OFF);
|
||||
|
@ -414,9 +419,6 @@ namespace wifi {
|
|||
server.send(200, str(W_JSON), attack.getStatusJSON());
|
||||
});
|
||||
|
||||
// aggressively caching static assets
|
||||
server.serveStatic("/js", LittleFS, String(String(ap_settings.path) + "/js").c_str(), "max-age=86400");
|
||||
|
||||
// called when the url is not defined here
|
||||
// use it to load content from SPIFFS
|
||||
server.onNotFound([]() {
|
||||
|
|
|
@ -11,6 +11,7 @@ import sys
|
|||
boards = [
|
||||
"NODEMCU",
|
||||
"WEMOS_D1_MINI",
|
||||
"HACKHELD_VEGA",
|
||||
"MALTRONICS",
|
||||
"DISPLAY_EXAMPLE_I2C",
|
||||
"DISPLAY_EXAMPLE_SPI",
|
||||
|
@ -54,14 +55,20 @@ os.system(f"mkdir {folder}")
|
|||
|
||||
for board in boards:
|
||||
print(f"Compiling {board}...", flush=True)
|
||||
|
||||
if os.path.exists(f"{folder}/esp8266_deauther_{version}_{board}.bin"):
|
||||
print("Already compiled")
|
||||
continue
|
||||
|
||||
os.system(f"arduino-cli cache clean")
|
||||
command = f"arduino-cli compile --fqbn deauther:esp8266:generic --build-properties \"build.extra_flags=-DESP8266 -D{board}\" --output-dir {folder}"
|
||||
command = f"arduino-cli compile --fqbn deauther:esp8266:generic --build-property \"build.extra_flags=-DESP8266 -D{board}\" --output-dir {folder}"
|
||||
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
|
||||
process.wait()
|
||||
os.system(f"mv {folder}/esp8266_deauther.ino.bin {folder}/esp8266_deauther_{version}_{board}.bin")
|
||||
os.system(
|
||||
f"mv {folder}/esp8266_deauther.ino.bin {folder}/esp8266_deauther_{version}_{board}.bin")
|
||||
print(f"OK")
|
||||
|
||||
os.system(f"rm {folder}/esp8266_deauther.ino.elf")
|
||||
os.system(f"rm {folder}/esp8266_deauther.ino.map")
|
||||
|
||||
print("Finished :)")
|
||||
print("Finished :)")
|
||||
|
|
|
@ -112,7 +112,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
|
@ -28,12 +28,15 @@ function convertLineBreaks(str) {
|
|||
return "";
|
||||
}
|
||||
|
||||
function showMessage(msg, closeAfter) {
|
||||
function showMessage(msg) {
|
||||
if (msg.startsWith("ERROR")) {
|
||||
getE("status").style.backgroundColor = "#d33";
|
||||
getE("status").innerHTML = "disconnected";
|
||||
|
||||
console.error("disconnected (" + msg + ")");
|
||||
} else if (msg.startsWith("LOADING")) {
|
||||
getE("status").style.backgroundColor = "#fc0";
|
||||
getE("status").innerHTML = "loading...";
|
||||
} else {
|
||||
getE("status").style.backgroundColor = "#3c5";
|
||||
getE("status").innerHTML = "connected";
|
||||
|
@ -72,11 +75,14 @@ function getFile(adr, callback, timeout, method, onTimeout, onError) {
|
|||
request.onreadystatechange = function () {
|
||||
if (this.readyState == 4) {
|
||||
if (this.status == 200) {
|
||||
showMessage("CONNECTED");
|
||||
callback(this.responseText);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
showMessage("LOADING");
|
||||
|
||||
/* send request */
|
||||
request.send();
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
|
@ -33,7 +33,9 @@
|
|||
<div class="col-12">
|
||||
<h1 class="header" data-translate="settings">Settings</h1>
|
||||
|
||||
<button onclick="getFile('run?cmd=stopap')" class="red" data-translate="wifi_off">WiFi off</button>
|
||||
<button
|
||||
onclick="getFile('run?cmd=stopap');alert('Turning off access point now. Restart your Deauther to be able to connect again.')"
|
||||
class="red" data-translate="wifi_off">WiFi off</button>
|
||||
<button onclick="getFile('run?cmd=reset;;save settings')" class="red"
|
||||
data-translate="reset">Reset</button>
|
||||
<button onclick="getFile('run?cmd=reboot')" class="red right" data-translate="reboot">reboot</button>
|
||||
|
@ -56,7 +58,7 @@
|
|||
<div id="settingsList"></div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<span id="version">Version 2.6.0</span>
|
||||
<span id="version">Version 2.6.1</span>
|
||||
<br>
|
||||
<br>
|
||||
<a href="http://deauther.maltronics.com" target="_blank">Wiki</a> | <a href="info.html">Credits</a>
|
||||
|
|
Loading…
Reference in New Issue