Compare commits

...

36 Commits

Author SHA1 Message Date
Stefan b98f159811
New readme 2022-12-18 18:34:45 +01:00
Temm 02d5ad0d2a
Fix setChannel range check (#1495) 2022-04-18 12:24:46 +02:00
azzar 7d6f22c4e6
Update DisplayUI.cpp (#1540)
replace wrong comments
2022-04-18 12:23:52 +02:00
Stefan Kremser da75a4f954
Update FUNDING.yml 2022-04-09 22:25:32 +02:00
Stefan Kremser a1f467ed6e
Update stale.yml 2021-12-12 21:00:03 +01:00
Devin Norgarb bbe1b24e30
Update README.md (#1420)
small grammatical + spelling  typo Readme
2021-08-21 13:46:31 +02:00
Erdinc 8dd2a58ba2
version updated to 2.6.1 on web interface (#1468) 2021-08-21 13:46:01 +02:00
Spacehuhn 7f7d215305 Update compile script 2021-08-07 16:09:08 +02:00
Spacehuhn 684e47f7d5 Added Hackheld Vega bin 2021-08-07 16:08:56 +02:00
Spacehuhn f984e897a0 Upped version to 2.6.1 2021-08-07 15:24:55 +02:00
Spacehuhn 7a574188c7 Made Neopixel run on 800 Khz 2021-08-07 15:12:44 +02:00
Spacehuhn 1ed2f127fd Added Hackheld Vega config 2021-08-07 15:12:38 +02:00
Spacehuhn 397ec9fc70 Change beacon interval to 100ms 2021-08-07 15:12:27 +02:00
Spacehuhn f3432d20fb Change beacon interval to 100ms 2021-02-17 18:16:42 +01:00
Spacehuhn 27b921e44f Removed redundant DEFAULT_SSID 2021-02-03 19:52:44 +01:00
Spacehuhn bbafd9fdf2 Fixed msg not defined error 2021-02-01 21:50:24 +01:00
Spacehuhn 60be948cc0 Web interface "loading..." banner 2021-01-31 13:09:56 +01:00
Spacehuhn 8b99fcbb33 Compiled web files 2021-01-29 17:50:50 +01:00
Spacehuhn 84f2f83f13 Info on clicking WiFi Off
Informs the user that they can reconnect after restarting
2021-01-29 17:49:13 +01:00
Ignatius Tremor fe06b87dc1
Fix for setting web AP channel (#1388)
* Deleted wifi channel set without effect

* When initializing wifi, use actual channel from settings instead of always using channel 1
2021-01-24 23:36:33 +01:00
Spacehuhn 535d2d3f95 Fixed 404 errors when using littlefs 2021-01-23 12:46:59 +01:00
Spacehuhn 4bd56ff755 Fixed clock going out of sync 2021-01-23 12:37:01 +01:00
Spacehuhn 8c289baf33 Fixed issue with LittleFS (webSpiffs) setup 2021-01-23 12:36:46 +01:00
Spacehuhn 4e7264bc4f Clock submenu 2021-01-23 12:05:33 +01:00
Spacehuhn 0272e83c3d Fixed clock update
https://github.com/SpacehuhnTech/esp8266_deauther/issues/1385

https://github.com/SpacehuhnTech/esp8266_deauther/issues/1384
2021-01-23 11:52:44 +01:00
Spacehuhn 333e3ebd86 Removed remnants of forcePackets setting
The setting was already removed in 2019 with the rewrite of  the settings module. In my tests, it didn't make the performance better, but added complexity and made the web interface unstable.
2021-01-17 11:19:08 +01:00
Spacehuhn abf56ca866 Fixed compiler script 2021-01-17 11:03:05 +01:00
Spacehuhn d06e5d35c8 Added pl.lang 2021-01-16 10:24:38 +01:00
Spacehuhn 33c999c334 Compiled web files 2021-01-14 22:18:31 +01:00
Spacehuhn e01e95bc08 Added ko.lang 2021-01-14 22:17:47 +01:00
Spacehuhn 33e0cd2250 Increased name length to 17 2021-01-14 21:57:05 +01:00
Spacehuhn 85b37e7bb1 Merged .uk lang 2021-01-14 16:03:08 +01:00
Spacehuhn 2f43126301 Improved web responsiveness
By only forcing a channel change when required by the attack
2021-01-13 11:57:42 +01:00
Stefan Kremser d4ba63789b
Update README.md 2021-01-12 18:32:19 +01:00
Spacehuhn 247f9ce336 Reintroduced led command 2021-01-12 14:11:26 +01:00
Spacehuhn 3e4e699e78 Fix channel hopping issue 2021-01-12 13:24:30 +01:00
71 changed files with 522 additions and 277 deletions

2
.github/FUNDING.yml vendored
View File

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

2
.github/stale.yml vendored
View File

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

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

View File

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

View File

@ -69,6 +69,9 @@ void Attack::stop() {
deauth.tc = 0;
beacon.tc = 0;
probe.tc = 0;
deauth.active = false;
beacon.active = false;
probe.active = false;
prntln(A_STOP);
}
}
@ -244,7 +247,7 @@ void Attack::deauthAllUpdate() {
void Attack::probeUpdate() {
if (probe.active && (probe.maxPkts > 0) && (probe.packetCounter < probe.maxPkts)) {
if (probe.time <= currentTime - (1000 / probe.maxPkts)) {
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(probe.tc % 11);
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(probe.tc % 11, true);
probe.tc += sendProbe(probe.tc);
if (probe.tc >= ssids.count()) probe.tc = 0;
@ -300,7 +303,7 @@ bool Attack::deauthDevice(uint8_t* apMac, uint8_t* stMac, uint8_t reason, uint8_
// send deauth frame
deauthpkt[0] = 0xc0;
if (sendPacket(deauthpkt, packetSize, ch, 1)) {
if (sendPacket(deauthpkt, packetSize, ch, true)) {
success = true;
deauth.packetCounter++;
}
@ -312,7 +315,7 @@ bool Attack::deauthDevice(uint8_t* apMac, uint8_t* stMac, uint8_t reason, uint8_
disassocpkt[0] = 0xa0;
if (sendPacket(disassocpkt, packetSize, ch, 1)) {
if (sendPacket(disassocpkt, packetSize, ch, false)) {
success = true;
deauth.packetCounter++;
}
@ -327,7 +330,7 @@ bool Attack::deauthDevice(uint8_t* apMac, uint8_t* stMac, uint8_t reason, uint8_
// send deauth frame
disassocpkt[0] = 0xc0;
if (sendPacket(disassocpkt, packetSize, ch, 1)) {
if (sendPacket(disassocpkt, packetSize, ch, false)) {
success = true;
deauth.packetCounter++;
}
@ -335,7 +338,7 @@ bool Attack::deauthDevice(uint8_t* apMac, uint8_t* stMac, uint8_t reason, uint8_
// send disassociate frame
disassocpkt[0] = 0xa0;
if (sendPacket(disassocpkt, packetSize, ch, 1)) {
if (sendPacket(disassocpkt, packetSize, ch, false)) {
success = true;
deauth.packetCounter++;
}
@ -347,7 +350,7 @@ bool Attack::deauthDevice(uint8_t* apMac, uint8_t* stMac, uint8_t reason, uint8_
}
bool Attack::sendBeacon(uint8_t tc) {
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(tc % 11);
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(tc % 11, true);
mac[5] = tc;
return sendBeacon(mac, ssids.getName(tc).c_str(), wifi_channel, ssids.getWPA2(tc));
}
@ -380,7 +383,7 @@ bool Attack::sendBeacon(uint8_t* mac, const char* ssid, uint8_t ch, bool wpa2) {
tmpPacket[37] = ssidLen; // update SSID length byte
memcpy(&tmpPacket[38 + ssidLen], &beaconPacket[70], wpa2 ? 39 : 13); // copy second half of packet into buffer
bool success = sendPacket(tmpPacket, tmpPacketSize, ch, 1);
bool success = sendPacket(tmpPacket, tmpPacketSize, ch, false);
if (success) {
beacon.time = currentTime;
@ -394,7 +397,7 @@ bool Attack::sendBeacon(uint8_t* mac, const char* ssid, uint8_t ch, bool wpa2) {
}
bool Attack::sendProbe(uint8_t tc) {
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(tc % 11);
if (settings::getAttackSettings().attack_all_ch) setWifiChannel(tc % 11, true);
mac[5] = tc;
return sendProbe(mac, ssids.getName(tc).c_str(), wifi_channel);
}
@ -408,7 +411,7 @@ bool Attack::sendProbe(uint8_t* mac, const char* ssid, uint8_t ch) {
memcpy(&probePacket[10], mac, 6);
memcpy(&probePacket[26], ssid, ssidLen);
if (sendPacket(probePacket, packetSize, ch, 1)) {
if (sendPacket(probePacket, packetSize, ch, false)) {
probe.time = currentTime;
probe.packetCounter++;
return true;
@ -417,19 +420,16 @@ bool Attack::sendProbe(uint8_t* mac, const char* ssid, uint8_t ch) {
return false;
}
bool Attack::sendPacket(uint8_t* packet, uint16_t packetSize, uint8_t ch, uint16_t tries) {
bool Attack::sendPacket(uint8_t* packet, uint16_t packetSize, uint8_t ch, bool force_ch) {
// Serial.println(bytesToStr(packet, packetSize));
// set channel
setWifiChannel(ch);
setWifiChannel(ch, force_ch);
// sent out packet
bool sent = wifi_send_pkt_freedom(packet, packetSize, 0) == 0;
// try again until it's sent out
for (int i = 0; i < tries && !sent; i++) sent = wifi_send_pkt_freedom(packet, packetSize, 0) == 0;
if (sent) tmpPacketRate++;
if (sent) ++tmpPacketRate;
return sent;
}

View File

@ -27,7 +27,7 @@ extern void getRandomMac(uint8_t* mac);
extern void setOutputPower(float dBm);
extern String macToStr(const uint8_t* mac);
extern String bytesToStr(const uint8_t* b, uint32_t size);
extern void setWifiChannel(uint8_t ch);
extern void setWifiChannel(uint8_t ch, bool force);
extern bool writeFile(String path, String& buf);
extern int8_t free80211_send(uint8_t* buffer, uint16_t len);
@ -56,7 +56,7 @@ class Attack {
bool sendProbe(uint8_t tc);
bool sendProbe(uint8_t* mac, const char* ssid, uint8_t ch);
bool sendPacket(uint8_t* packet, uint16_t packetSize, uint8_t ch, uint16_t tries);
bool sendPacket(uint8_t* packet, uint16_t packetSize, uint8_t ch, bool force_ch);
bool isRunning();
@ -152,16 +152,16 @@ class Attack {
};
uint8_t beaconPacket[109] = {
/* 0 - 3 */ 0x80, 0x00, 0x00, 0x00, // Type/Subtype: managment beacon frame
/* 4 - 9 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination: broadcast
/* 10 - 15 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
/* 16 - 21 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
/* 0 - 3 */ 0x80, 0x00, 0x00, 0x00, // Type/Subtype: managment beacon frame
/* 4 - 9 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination: broadcast
/* 10 - 15 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
/* 16 - 21 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
// 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
/* 34 - 35 */ 0x31, 0x00, // capabilities Tnformation
/* 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 */ 0x64, 0x00, // Interval: 0x64, 0x00 => every 100ms - 0xe8, 0x03 => every 1s
/* 34 - 35 */ 0x31, 0x00, // capabilities Tnformation
// Tagged parameters
@ -196,7 +196,7 @@ class Attack {
/* 85 - 86 */ 0x01, 0x00,
/* 87 - 90 */ 0x00, 0x0f, 0xac, 0x02,
/* 91 - 92 */ 0x02, 0x00,
/* 93 - 100 */ 0x00, 0x0f, 0xac, 0x04, 0x00, 0x0f, 0xac, 0x04, /*Fix: changed 0x02(TKIP) to 0x04(CCMP) is default. WPA2 with TKIP not supported by many devices*/
/* 93 - 100 */ 0x00, 0x0f, 0xac, 0x04, 0x00, 0x0f, 0xac, 0x04, /*Fix: changed 0x02(TKIP) to 0x04(CCMP) is default. WPA2 with TKIP not supported by many devices*/
/* 101 - 102 */ 0x01, 0x00,
/* 103 - 106 */ 0x00, 0x0f, 0xac, 0x02,
/* 107 - 108 */ 0x00, 0x00

View File

@ -285,7 +285,6 @@ void CLI::runCommand(String input) {
prntln(CLI_HELP_SEND_PROBE);
prntln(CLI_HELP_LED_A);
prntln(CLI_HELP_LED_B);
prntln(CLI_HELP_LED_ENABLE);
prntln(CLI_HELP_DRAW);
prntln(CLI_HELP_SCREEN_ON);
prntln(CLI_HELP_SCREEN_MODE);
@ -1080,7 +1079,7 @@ void CLI::runCommand(String input) {
for (int i = 0; i < packetSize; i++) packet[i] = strtoul((packetStr.substring(i * 2,
i * 2 + 2)).c_str(), NULL, 16);
if (attack.sendPacket(packet, packetSize, wifi_channel, 10)) {
if (attack.sendPacket(packet, packetSize, wifi_channel, true)) {
prntln(CLI_CUSTOM_SENT);
counter++;
} else {
@ -1088,6 +1087,21 @@ void CLI::runCommand(String input) {
}
}
// ===== LED ===== //
// led <r> <g> <b> [<brightness>]
else if ((list->size() == 4) && eqlsCMD(0, CLI_LED)) {
led::setColor(list->get(1).toInt(), list->get(2).toInt(), list->get(3).toInt());
}
// led <#rrggbb> [<brightness>]
else if ((list->size() == 2) &&
eqlsCMD(0, CLI_LED) && (list->get(1).charAt(0) == HASHSIGN)) {
uint8_t c[3];
strToColor(list->get(1), c);
led::setColor(c[0], c[1], c[2]);
}
// ===== DELAY ===== //
else if ((list->size() == 2) && eqlsCMD(0, CLI_DELAY)) {
uint32_t endTime = currentTime + getTime(list->get(1));

View File

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

View File

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

View File

@ -11,7 +11,7 @@ extern "C" {
#include "SimpleList.h"
#define NAME_LIST_SIZE 25
#define NAME_MAX_LENGTH 16
#define NAME_MAX_LENGTH 17
extern void checkFile(String path, String data);
extern JsonVariant parseJSONFile(String path, DynamicJsonBuffer& jsonBuffer);

View File

@ -61,7 +61,7 @@ void Scan::start(uint8_t mode, uint32_t time, uint8_t nextmode, uint32_t continu
uint8_t channel) {
if (mode != SCAN_MODE_OFF) stop();
setWifiChannel(channel);
setWifiChannel(channel, true);
Scan::continueStartTime = currentTime;
Scan::snifferPacketTime = continueStartTime;
Scan::snifferOutputTime = continueStartTime;
@ -239,7 +239,7 @@ void Scan::setChannel(uint8_t ch) {
else if (ch < 1) ch = 14;
wifi_promiscuous_enable(0);
setWifiChannel(ch);
setWifiChannel(ch, true);
wifi_promiscuous_enable(1);
}

View File

@ -26,7 +26,7 @@ extern SSIDs ssids;
extern uint8_t wifiMode;
extern void setWifiChannel(uint8_t ch);
extern void setWifiChannel(uint8_t ch, bool force);
extern bool appendFile(String path, String& buf);
extern bool writeFile(String path, String& buf);
extern void readFileToSerial(const String path);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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);
// 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;
}
}
}

View File

@ -311,8 +311,8 @@ void prntln(const uint32_t i) {
}
/* ===== WiFi ===== */
void setWifiChannel(uint8_t ch) {
if ((ch != wifi_channel) && (ch > 0) && (ch < 15)) {
void setWifiChannel(uint8_t ch, bool force) {
if (((ch != wifi_channel) || force) && (ch < 15)) {
wifi_channel = ch;
wifi_set_channel(wifi_channel);
}

View File

@ -201,9 +201,8 @@ const char CLI_HELP_COMMENT[] PROGMEM = "// <comments>";
const char CLI_HELP_SEND_DEAUTH[] PROGMEM = "send deauth <apMac> <stMac> <rason> <channel>";
const char CLI_HELP_SEND_BEACON[] PROGMEM = "send beacon <mac> <ssid> <ch> [wpa2]";
const char CLI_HELP_SEND_PROBE[] PROGMEM = "send probe <mac> <ssid> <ch>";
const char CLI_HELP_LED_A[] PROGMEM = "led <r> <g> <b> [<brightness>]";
const char CLI_HELP_LED_B[] PROGMEM = "led <#rrggbb> [<brightness>]";
const char CLI_HELP_LED_ENABLE[] PROGMEM = "led <enable/disable>";
const char CLI_HELP_LED_A[] PROGMEM = "led <r> <g> <b>";
const char CLI_HELP_LED_B[] PROGMEM = "led <#rrggbb>";
const char CLI_HELP_DRAW[] PROGMEM = "draw";
const char CLI_HELP_SCREEN_ON[] PROGMEM = "screen <on/off>";
const char CLI_HELP_SCREEN_MODE[] PROGMEM = "screen mode <menu/packetmonitor/buttontest/loading>";
@ -366,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";

View File

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

View File

@ -2,6 +2,8 @@
#pragma once
#include <cstdint>
enum LED_MODE {
OFF,
SCAN,
@ -13,4 +15,5 @@ namespace led {
void setup();
void update();
void setMode(LED_MODE new_mode, bool force = false);
void setColor(uint8_t r, uint8_t g, uint8_t b);
}

File diff suppressed because one or more lines are too long

View File

@ -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;
@ -148,7 +148,7 @@ namespace wifi {
else if (filename.endsWith(str(W_DOT_PDF))) return str(W_XPDF);
else if (filename.endsWith(str(W_DOT_ZIP))) return str(W_XZIP);
else if (filename.endsWith(str(W_DOT_JSON))) return str(W_JSON);
else return str(W_TXT);
return str(W_TXT);
}
bool handleFileRead(String path) {
@ -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);
@ -326,6 +331,12 @@ namespace wifi {
server.on("/lang/ru.lang", HTTP_GET, []() {
sendProgmem(rulang, sizeof(rulang), W_JSON);
});
server.on("/lang/pl.lang", HTTP_GET, []() {
sendProgmem(pllang, sizeof(pllang), W_JSON);
});
server.on("/lang/uk.lang", HTTP_GET, []() {
sendProgmem(uklang, sizeof(uklang), W_JSON);
});
server.on("/lang/de.lang", HTTP_GET, []() {
sendProgmem(delang, sizeof(delang), W_JSON);
});
@ -341,6 +352,9 @@ namespace wifi {
server.on("/lang/in.lang", HTTP_GET, []() {
sendProgmem(inlang, sizeof(inlang), W_JSON);
});
server.on("/lang/ko.lang", HTTP_GET, []() {
sendProgmem(kolang, sizeof(kolang), W_JSON);
});
server.on("/lang/ro.lang", HTTP_GET, []() {
sendProgmem(rolang, sizeof(rolang), W_JSON);
});
@ -371,11 +385,14 @@ namespace wifi {
else if (String(settings::getWebSettings().lang) == "fi") sendProgmem(filang, sizeof(filang), W_JSON);
else if (String(settings::getWebSettings().lang) == "cn") sendProgmem(cnlang, sizeof(cnlang), W_JSON);
else if (String(settings::getWebSettings().lang) == "ru") sendProgmem(rulang, sizeof(rulang), W_JSON);
else if (String(settings::getWebSettings().lang) == "pl") sendProgmem(pllang, sizeof(pllang), W_JSON);
else if (String(settings::getWebSettings().lang) == "uk") sendProgmem(uklang, sizeof(uklang), W_JSON);
else if (String(settings::getWebSettings().lang) == "de") sendProgmem(delang, sizeof(delang), W_JSON);
else if (String(settings::getWebSettings().lang) == "it") sendProgmem(itlang, sizeof(itlang), W_JSON);
else if (String(settings::getWebSettings().lang) == "en") sendProgmem(enlang, sizeof(enlang), W_JSON);
else if (String(settings::getWebSettings().lang) == "fr") sendProgmem(frlang, sizeof(frlang), W_JSON);
else if (String(settings::getWebSettings().lang) == "in") sendProgmem(inlang, sizeof(inlang), W_JSON);
else if (String(settings::getWebSettings().lang) == "ko") sendProgmem(kolang, sizeof(kolang), W_JSON);
else if (String(settings::getWebSettings().lang) == "ro") sendProgmem(rolang, sizeof(rolang), W_JSON);
else if (String(settings::getWebSettings().lang) == "da") sendProgmem(dalang, sizeof(dalang), W_JSON);
else if (String(settings::getWebSettings().lang) == "ptbr") sendProgmem(ptbrlang, sizeof(ptbrlang), W_JSON);
@ -402,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([]() {

View File

@ -44,7 +44,6 @@
- [`send probe <mac> <ssid> <ch>`](#send)
- [`led <r> <g> <b> [<brightness>]`](#led)
- [`led <#rrggbb> [<brightness>]`](#led)
- [`led <enable/disable>`](#led)
- [`draw`](#draw)
- [`startap`](#startap)
- [`stopap`](#startap)
@ -290,19 +289,14 @@ Copy pasting packets out of Wireshark is very unlikely to work.
Also note that you're still limited to 512 characters per command!
## LED
`led <r> <g> <b> [<brightness>]`
`led <r> <g> <b>`
Changes LED color based on input.
Be sure to disable the LED updates (see command below), if you don't want the color the be rewritten by a scan or attack.
The brightness is optional and must be given in percent (between 0 and 100).
Be sure to disable the LED updates (see command below), if you don't want the color the be rewritten by a scan or attack.
`led <#rrggbb> [<brightness>]`
`led <#rrggbb>`
Changes LED color based on input in form of a hex value.
The value **must** start with a `#` and have 6 following characters.
`led <enable/disable>`
Dis/Enables the LED updates. If disabled, the color will not change automatically anymore if you start a scan or attack.
To disable the LED in general use `set ledenabled false`.
## DELAY
`delay <time>`
Will pause the serial command interface for a given time.

View File

@ -23,7 +23,6 @@
- [`chTime`](#ch-time)
- [`minDeauths`](#mindeauths)
- [`attackTimeout`](#attacktimeout)
- [`forcePackets`](#force-packets)
- [`deauthsPerTarget`](#deauths-per-target)
- [`deauthReason`](#deauth-reason)
- [`beaconChannel`](#beacon-channel)
@ -132,13 +131,6 @@ Minimum number of deauthentication frames when scanning to change the LED to dea
After what amount of time (in seconds) the attack will stop automatically.
Set it to 0 to disable it.
## FORCE-PACKETS
`uint8_t forcePackets = 1;`
How many attempts to send out a packet.
Set this value higher if you want to achieve a better packet rate in a busy area.
Be careful this setting could make the device slower or more unstable.
**Max value is 255**.
## DEAUTHS-PER-TARGET
`uint16_t deauthsPerTarget = 10;`
How many deauthentication and disassociation frames are sent out for each target.

View File

@ -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)
os.system(f"arduino-cli cache clean");
command = f"arduino-cli compile --fqbn deauther:esp8266:d1_mini --build-properties \"build.extra_flags=-DESP8266 -D{board}\" --output-dir {folder}"
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-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 :)")

View File

@ -44,9 +44,10 @@
<span data-translate="info_disclaimer">In case of an unexpected error, please reload the site and
look at the serial monitor for further debugging.</span><br>
</p>
<button onclick="load()" class="right" data-translate="reload">reload</button>
<p class="right">
<button onclick="stopAll()" data-translate="stop">stop</button>
<button onclick="load()" data-translate="reload">reload</button>
</p>
<table>
<tr>
<th data-translate="attacks">Attacks</th>
@ -111,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>

View File

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

View File

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

View File

@ -18,6 +18,12 @@ function draw() {
getE("allpkts").innerHTML = esc(attackJSON[3] + "");
}
function stopAll() {
getFile("run?cmd=stop attack", function () {
load();
});
}
function start(mode) {
switch (mode) {
case 0:
@ -31,6 +37,7 @@ function start(mode) {
break;
}
getFile("run?cmd=attack" + (attackJSON[0][0] ? " -d" : "") + (attackJSON[1][0] ? " -b" : "") + (attackJSON[2][0] ? " -p" : ""), function () {
setTimeout(load, 2000);
draw();
});
}
@ -38,6 +45,8 @@ function start(mode) {
function load() {
getFile("attack.json", function (response) {
attackJSON = JSON.parse(response);
console.log(response);
showMessage("connected");
draw();
});
}

View File

@ -150,7 +150,8 @@ function scan(type) {
+ " -ch " + getE("ch").options[getE("ch").selectedIndex].value;
getFile("run?cmd=" + cmdStr);
duts = parseInt(type);
setTimeout(buttonFunc, elxtime)
setTimeout(buttonFunc, elxtime);
setTimeout(load, elxtime);
}
function buttonFunc() {
@ -171,6 +172,7 @@ function load() {
getFile("run?cmd=save scan", function () {
getFile("scan.json", function (res) {
scanJson = JSON.parse(res);
showMessage("connected");
drawScan();
});
});
@ -178,6 +180,7 @@ function load() {
getFile("run?cmd=save names", function () {
getFile("names.json", function (res) {
nameJson = JSON.parse(res);
showMessage("connected");
drawNames();
});
});

View File

@ -5,6 +5,7 @@ var settingsJson = {};
function load() {
getFile("settings.json", function (res) {
settingsJson = JSON.parse(res);
showMessage("connected");
draw();
});
}

View File

@ -28,10 +28,21 @@ function convertLineBreaks(str) {
return "";
}
function showMessage(msg, closeAfter) {
getE("status").style.backgroundColor = "#d33";
console.error("disconnected (" + msg + ")");
getE("status").innerHTML = "disconnected";
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";
console.log("" + msg + "");
}
}
function getFile(adr, callback, timeout, method, onTimeout, onError) {
@ -64,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();

View File

@ -6,6 +6,7 @@ function load() {
getFile("run?cmd=save ssids", function () {
getFile("ssids.json", function (res) {
ssidJson = JSON.parse(res);
showMessage("connected");
draw();
});
});

View File

@ -0,0 +1,74 @@
{
"lang": "ko",
"warning": "경고",
"disclaimer": "이 프로젝트는 교육목적 또는 테스트를 위해 만들어졌습니다.\nESP8266외 다른기기에서 오류가 발생할수 있습니다!\n\n절대로 공공장소에서 사용하지마세요 자신 네트워크 장치에서만 사용하세요!\n\nIEEE 802.11 표준에 설명된 유효한 Wi-Fi 프레임을 사용하며 그외 다른 주파수를 차단하거나 방해하지 않습니다.\n해당 장치를 사용하기전에 이용중인 국가의 규정을 확인하세요.\n\n제발 이 프로젝트명을 \"재머\", 라고 칭하지말아주세요! 저희는 재머 용도로 프로젝트를 진행한게 아닙니다!\n만약 당신이 재머라고 부르면 당신은 이 프로젝트를 이해를 못했다고 생각합니다.\n적절한 설명 없이 이것을 실행한다면 추후 문제가 발생할 가능성이 높습니다.\n\n자세한 내용은 아래 링크를 접속해서 확인해주세요 :)",
"disclaimer-button": "저는 위 경고를 모두 읽고 이해를 했습니다",
"reload": "리로드",
"scan": "스캔",
"ssids": "SSID설정",
"attacks": "공격",
"settings": "설정",
"info": "정보",
"info_span": "정보: ",
"all": "전체",
"channel": "채널",
"devices": "기기 저장",
"select_all": "전체선택",
"deselect_all": "전체선택취소",
"remove_all": "전체 삭제",
"station_scan_time": "스테이션 스캔 시간",
"new": "새로 만들기",
"save": "저장",
"add": "추가",
"add_selected": "선택한 AP 복제",
"overwrite": "덮어쓰기",
"time_interval": "시간간격",
"number": "개수",
"targets": "타켓 수",
"scan_info": "- 스캔하는 동안 보드에 파란색 혹식 녹색 LED가 들어옵니다 작동중이라는 표시이니 기다리세요.\n- 스테이션 스캔을 진행하고있을떄 웹 인터페이스가 잠시 멈추니 재연결해야합니다.\n- 오직 대상을 하나만 선택하세요!\n",
"ssids_info": "- 이 SSID 목록은 Beacon과 Probe 공격에 사용합니다.\n- 각 SSID는 최대 32자리 까지 가능합니다. 한국어는 신호가 약하거나 SSID가 적게 나올수도있습니다.\n- SSID를 편집할때 저장을 클릭하는 것을 잊지 마세요.\n- SSID를 복제하고 리로드를 해야합니다.\n",
"attack_info": "- 공격도중 연결이 Wi-Fi가 끊어질때도 있습니다!\n- Deauth 공격은 공격 대상을 지정해야합니다.\n- Beacon과 Probe 공격을 위해서는 SSID를 저장해야합니다.\n- 패킷 속도를 새로 볼려면 리로드를 클릭하세요.\n",
"settings_info": "- 일부 설정은 재부팅이 필요합니다.\n- 변경내용을 적용하실려면 저장을 클릭하세요.\n",
"info_disclaimer": "예기치 않은 오류가 생길경우 리로드를 하고 디버깅을 위해 모니터를 연결하세요. 모니터가 없을시 무시하세요.",
"start_stop": "실행 / 중지",
"start": "실행",
"stop": "중지",
"wifi_off": "와이파이 끄기",
"reboot": "재부팅",
"reset": "리셋",
"enable_random": "랜덤모드 활성화",
"disable_random": "랜덤모드 비활성화",
"random_desc": "랜덤모드 활성화시 설정하신 시간마다 SSID목록을 새로 생성합니다.",
"deauth_desc": "Deauth 공격은 선택한 AP에 클라이언트 장치에 인증 해제 프레임을 전송하여 Wi-Fi연결에 장애를 발생합니다.\n많은 장치가 공격에 대한 보호를 제공하는 802.11w-2009표준을 사용하지 않을 경우 사용이 가능합니다 요약하자면 대부분 Wi-Fi에서는 공격이 가능합니다.\n- 공격대상을 하나만 선택하세요! 다른 채널에서 실행되는 Wi-Fi를 선택하고 공격하면 채널간 빠르게 전환되며 웹 인터페이스에 다시 연결하기가 어렵습니다.\n",
"beacon_desc": "Beacon 공격은 Wi-Fi를 여러개 생성하여 Wi-Fi네트워크를 만든것처럼 보이는 공격기술입니다.\nSSID설정에서 Wi-Fi이름을 선택이 가능합니다.",
"probe_desc": "알려진 네트워크가 근처에 있는지 확인하기 위해 클라우드장치에서 Prob 요청을 보냅니다.\nSSID목록에 지정한 네트워크를 요청하여 Wi-Fi 추적기를 혼동하려면 이 공격방법을 사용하세요.\n이 공격이 가정집에 미치는 영향을 볼 가능성은 적습니다.",
"setting_version": "버전 번호 예시) v2.0.\n이 설정은 소스코드에서만 변경이 가능합니다.",
"setting_ssid" : "웹인터페이스에서 사용하는 SSID\nSSID는 1~31자 사이여야 합니다.",
"setting_password": "웹인터페이스에 사용되는 Wi-Fi 비밀번호를 설정이 가능합니다.\n8~31자리여야합니다",
"setting_channel": "웹인터페이스에 사용되는 Wi-Fi의 채널을 설정할 수 있습니다.",
"setting_hidden": "웹인터페이스 Wi-Fi를 숨길 수 있습니다.",
"setting_captivePortal": "캡티브 포털 활성화 여부를 선택할 수 있습니다.",
"setting_autosave": "SSID와 장치이름을 자동으로 저장합니다.",
"setting_autosavetime": "자동저장 시간간격 (밀리초 단위)",
"setting_display": "디스플레이 인터페이스 활성화 여부를 선택할 수 있습니다.",
"setting_displayTimeout": "비활성화 상태일때 디스플레이가 꺼지는 시간 (초단 위)\n디스플레이 꺼짐 시간을 비활성화 할려면 0으로 설정하세요.",
"setting_serial": "시리얼 인터페이스 활성화 여부를 선택 할 수 있습니다.\n비활성화를 추천드립니다.",
"setting_serialEcho": "시리얼을 통해 들어오는 각 메시지에 에코 활성화 여부를 선택 할 수 있습니다.",
"setting_web": "웹인터페이스 사용여부를 선택 할 수 있습니다.",
"setting_webSpiffs": "모든 웹파일 SPIFFS 사용",
"setting_led": "LED기능 활성화 여부를 선택 할 수 있습니다.",
"setting_maxch": "최대 검색 채널\n미국 = 11, 유럽 = 13, 일본 = 14.",
"setting_macAP": "웹인터페이스 Wi-Fi에 사용하는 MAC주소를 정해주세요.\nMAC주소 지정시 내부 MAC주소를 대체합니다. 주의해주세요.",
"setting_macSt": "스테이션모드에서 사용되는 MAC주소\n스테이션모드가 활성화된 경우 내부 MAC주소를 대체합니다. 주의해주세요.",
"setting_chtime": "채널 호핑이 활성화중일때, 다음 채널로 이동하기 전에 한 채널을 검색하기 위한 시간입니다 (밀리초 단위)",
"setting_minDeauths": "LED를 삭제 모드로 변경하기 위해 검색할때 최소 인증프레임 수입니다.",
"setting_attacktimeout": "공격도중 지정한 시간후 공격이 자동으로 멈춥니다 (초 단위)\n0으로 설정할시 비활성화됩니다.",
"setting_forcepackets": "패킷을 전송 시도 횟수\n사용량이 많은 지역에서 더 나은 패킷 비율을 얻으려면 이 값을 더 높게 설정해야합니다.\n이값을 변경시 장치가 느리거나 불안정해질수 있습니다. 주의하세요.\n최대값은 255입니다!",
"setting_deauthspertarget": "각 대상에 대해 발송되는 인증 및 연결 해제 프레임 수.",
"setting_deauthReason": "공격대상 장치에 연결이 끊어지는 이유를 알리기위해 Deauth 프레임과 함께 전송되는 이유 코드",
"setting_beaconchannel": "활성화되면 Beacon 공격을 실행할때 다른 채널의 모든 프레임을 보냅니다.",
"setting_beaconInterval": "true로 설정하면 Beacon이 매초마다 전송됩니다. false로 설정하면 간격은 100ms입니다.\n더 긴 간격은 더 많은 안정성과 적은 패킷공격을 의미하지만 클라이언트가 스캔할 때 SSID를 찾을 때까지 더 오래 시간이 걸릴 수 있습니다.",
"setting_randomTX": "Beacon또는 Probe 요청 프레임을 보내기 위해 무작위 전송 전력을 활성화합니다.",
"setting_probesPerSSID": "각 SSID에 대해 전송된 Probe 요청 프레임 수입니다.",
"setting_lang": "웹인터페이스 언어를 선택 할 수 있습니다.\n언어파일이 있는지 확인해주세요."
}

View File

@ -0,0 +1,73 @@
{
"lang": "pl",
"warning": "OSTRZEŻENIE",
"disclaimer": "Ten projekt jest dowodem pomysłu który służy do celów testowych i edukacyjnych.\nAni ESP8266, ani jego SDK nie były przeznaczone i zbudowane do takich celów. Mogą występować błędy!\n\nUżywaj go tylko na swoich sieciach i urządzeniach!\n\nUżywa prawidłowych ramek Wi-Fi w standardzie IEEE 802.11 i nie blokuje ani nie zakłóca żadnych częstotliwości.\nSprawdź regulacje prawne w swoim kraju przed jego użyciem.\n\nProszę nie odnoś się do tego projektu jako \"jammer\", to całkowicie podważa prawdziwy cel tego projektu!\nJeśli to robisz, to tylko pokazuje że nie masz pojęcia po co powstał ten projekt.\nPublikowanie treści o tym bez prawidłowego wyjaśnienia oznacza że robisz to tylko dla kliknięć, sławy i/lub pieniędzy i nie masz szacunku dla własności intelektualnej, społeczności za tym stojącej i walki o lepszy standard WiFi.\n\nPo więcej informacji odwiedź:",
"disclaimer-button": "Przeczytałem i zrozumiałem powyższe informacje",
"reload": "Przeładuj",
"scan": "Skanowanie",
"ssids": "SSIDs",
"attacks": "Ataki",
"settings": "Ustawienia",
"info": "Informacje",
"info_span": "INFORMACJE: ",
"all": "Wszystkie",
"channel": "Kanał",
"devices": "Zapisane urządzenia",
"select_all": "Zaznacz wszystko",
"deselect_all": "Odznacz wszystko",
"remove_all": "Usuń wszystkio",
"station_scan_time": "Czas skanowania stacji",
"new": "Nowy",
"save": "Zapisz",
"add": "Dodaj",
"add_selected": "Sklonuj zaznaczone AP",
"overwrite": "Nadpisz",
"time_interval": "Przedział czasu",
"number": "Numer",
"scan_info": "- Kliknij Scan i poczekaj aż niebieski LED na płytce się wyłączy (lub zmieni kolor na zielony), wtedy kliknij Reload.\n- Interfejs sieciowy jest niedostępny podczas skanowania stacji, i będziesz musiał połączyć się ponownie!\n- Wybierz tylko jeden cel!\n",
"ssids_info": "- Ta lista SSID jest używana do ataków Beacon i Probe.\n- Każdy identyfikator SSID może mieć do 32 znaków.\n- Nie zapomnij kliknąć Save kiedy edytowałeś SSID.\n- Musisz kliknąć Reload po klonowaniu SSID.\n",
"attack_info": "- Możesz utracić połączenie podczas startowania ataku!\n- Musisz wybrać cel do ataku Deauth.\n- Potrzebujesz zapisanego SSID do ataków Beacon i Probe.\n- Kliknij Reload żeby odświeżyć szybkość pakietów.\n",
"settings_info": "- Niektóre ustawienia wymagają ponownego uruchomienia.\n- Kliknij Save aby upewnić się że twoje zmiany są zastosowane.\n",
"info_disclaimer": "W przypadku nieoczekiwanego błędu ponownie załaduj witrynę, i spójrz na monitor szeregowy w celu dalszego debugowania.",
"start_stop": "START / STOP",
"start": "START",
"stop": "STOP",
"wifi_off": "Wyłącz WiFi",
"reboot": "Uruchom ponownie",
"reset": "Resetuj",
"enable_random": "Włącz tryb losowy",
"disable_random": "Wyłącz tryb losowy",
"random_desc": "Włącz tryb losowy, aby wygenerować losowe identyfikatory SSID w określonym przedziale.",
"deauth_desc": "Zamyka połączenie urządzeń Wi-Fi, wysyłając ramki dezautoryzujące do wybranych punktów dostępu i ich klientów.\nJest to możliwe tylko dlatego, że wiele urządzeń nie korzysta ze standardu 802.11w-2009, który zapewnia ochronę przed tym atakiem.\n- Wybierz tylko jeden cel! Kiedy wybierzesz wiele celów, które działają na różnych kanałach i rozpoczniesz atak, szybko przełącza się między tymi kanałami i nie masz szans na ponowne połączenie się z interfejsem internetowym.\n",
"beacon_desc": "Pakiety beacon są używane do rozgłaszania punktów dostępu. Ciągłe wysyłanie pakietów beacon będzie wyglądać tak, jakbyś utworzył nowe sieci WiFi.\nMożesz określić nazwy sieci w zakładce SSID.",
"probe_desc": "Żądania sond są wysyłane przez klientów z pytaniem, czy w pobliżu znajduje się znana sieć. .\nUżyj tego ataku, aby zmylić elementy śledzące Wi-Fi, prosząc o sieci określone na liście SSID.\nPrawdopodobne nie zauważysz wpływu tego ataku na twoją domową sieć.",
"setting_version": "Numer wersji, np. v2.0.\nTo ustawienie może być zmienione tylko w kodzie źródłowym.",
"setting_ssid" : "SSID punktu dostępu używanego do tej strony (jeśli włączona).\nDługość musi być pomiędzy 1 a 31.",
"setting_password": "Hasło punktu dostępu używanego do tej strony (jeśli włączona).\nDługość musi być pomiędzy 8 a 31.",
"setting_channel": "Domyślna stacja WiFi używana na starcie.",
"setting_hidden": "Ukrywa punkt dostępu który jest używany do interfejsu sieciowego (jeśli włączony).",
"setting_captivePortal": "Włącza portal dostępowy dla punktu dostępu (jeśli jest włączony).",
"setting_autosave": "Włącza automatyczny zapis SSID, nazw urządzeń i ustawień.",
"setting_autosavetime": "Przedział czasu dla automatycznego zapisu w milisekundach.",
"setting_display": "Włącza interfejs wyświetlacza.",
"setting_displayTimeout": "Czas w sekundach po którym ekran zgaśnie jeśli jest nieaktywny.\nAby zablokować limit czasu wyświetlania, ustaw to na 0.",
"setting_serial": "Włącza interfejs szeregowy.\nLepiej tego nie wyłączać!",
"setting_serialEcho": "włącza echo dla każdej wiadomości przychodzącej przez łącze szeregowe.",
"setting_web": "Włącza interfejs sieciowy.",
"setting_webSpiffs": "Włącza SPIFFS dla wszystkich plików internetowych.",
"setting_led": "Włącza funkcje (RGB) LED.",
"setting_maxch": "Maksymalny kanał do skanowania.\nUS = 11, Europa = 13, Japonia = 14.",
"setting_macAP": "Adres MAC używany do punktu dostępu (AP).\nNależy pamiętać, że adres MAC zastąpi wewnętrzny adres MAC tylko wtedy, gdy włączony jest tryb punktu dostępu.",
"setting_macSt": "Adres MAC używany do trybiu stacji.\nNależy pamiętać, że adres MAC zastąpi wewnętrzny adres MAC tylko wtedy, gdy włączony jest tryb stacji.",
"setting_chtime": "Czas skanowania jednego kanału przed przejściem do następnego w milisekundach (tylko jeśli włączone jest przeskakiwanie kanałów).",
"setting_minDeauths": "Minimalna liczba ramek deautoryzacji podczas skanowania w celu zmiany diody LED w tryb deauth.",
"setting_attacktimeout": "Po jakim czasie (w sekundach) atak ma się zatrzymać.\nUstaw na 0 aby wyłączyć.",
"setting_forcepackets": "Ile prób wysłania pakietu.\nUstaw tę wartość wyższą, jeśli chcesz uzyskać lepszą szybkość pakietów w ruchliwym obszarze.\nOstrożnie, to ustawienie może spowodować że urządzenie będzie wolniejsze lub mniej stabilne.\nMaksymalna wartość to 255!",
"setting_deauthspertarget": "Ile ramek deautoryzacji i dysocjacji jest wysyłanych dla każdego celu.",
"setting_deauthReason": "Kod przyczyny wysyłany z ramkami deautoryzacji w celu poinformowania urządzenia docelowego, dlaczego połączenie zostanie zamknięte.",
"setting_beaconchannel": "Jeśli włączone, ramki będa wysyłane na różnych kanałach podczas ataku beacon.",
"setting_beaconInterval": "Jeśli ustawione na true, sygnały nawigacyjne będą wysyłane co sekundę. Jeśli ustawione na false, interwał będzie wynosił 100 ms.\nDłuższy interwał oznacza większą stabilność i mniej spamowania pakietów, ale może zająć więcej czasu, zanim klienci znajdą identyfikatory SSID podczas skanowania. ",
"setting_randomTX": "Włącza losową moc transmisji do wysyłania ramek beacon i sondujących.",
"setting_probesPerSSID": "Ile ramek żądań wysyłać dla każdego SSID.",
"setting_lang": "Język domyślny dla strony.\nUpewnij się że plik językowy istnieje!"
}

View File

@ -0,0 +1,74 @@
{
"lang": "uk",
"warning": "ПОПЕРЕДЖЕННЯ",
"disclaimer": "Цей проект можна використовувати тільки для тестування і в освітніх цілях. \nВикористовуйте його тільки для своїх мереж і пристроїв! \nВикористовує дійсні фрейми Wi-Fi, описані в стандарті IEEE 802.11, не блокує і не перериває які-небудь частоти.\nБудь ласка, ознайомтеся з правовими нормами у своєму країни, перш ніж використовувати цей код. \n\nБудь ласка, не звертайтеся до цього проекту як «jammer», що повністю підриває реальну мету цього проекту! \nЯкщо ви це зробите, це тільки доведе, що ви нічого не розуміли з того, що цей проект означає. \nПублікація контенту про це без належного пояснення показує, що ви робите це тільки за кліки, славу і гроші, і не поважаєте інтелектуальну власність, співтовариство за нею і боротьбу за кращий стандарт WiFi . \n\nДля отримання додаткової інформації відвідайте:",
"disclaimer-button": "Я прочитав і зрозумів повідомлення вище",
"reload": "Оновити",
"scan": "Сканувати",
"ssids": "SSIDs",
"attacks": "Атаки",
"settings": "Конфігурація",
"info": "Інформація",
"info_span": "Інформація: ",
"all": "Всі",
"channel": "Канал",
"devices": "Зберегти пристрій",
"select_all": "Вибрати все",
"deselect_all": "Відмінити всі",
"remove_all": "Видалити всі",
"station_scan_time": "Час сканування станцій",
"new": "Нове",
"save": "Зберегти",
"add": "Додати",
"add_selected": "Клонувати вибрані APs",
"overwrite": "Затерти",
"time_interval": "Часовий інтервал",
"number": "Номер",
"targets": "Цілі",
"scan_info": "- Натисніть кнопку «Сканувати» і почекайте, поки синій світлодіод на вашій платі не згасне (чи не стане зеленим), а потім натисніть кнопку «Оновити». \n- Веб-інтерфейс буде недоступний під час сканування мережі, і вам потрібно буде знову підключитися! \n- Будь ласка виберіть тільки одну мету! \n",
"ssids_info": "- Цей список SSID використовується для атаки маяка і зонда. \n- Кожен SSID може містити до 32 символу. \n- Не забудьте натиснути «Зберегти», коли ви відредагували SSID. \n- Ви повинні натиснути «Оновити» після клонування SSID. \n",
"attack_info": "- Ви можете втратити з'єднання при запуску атаки! \n- Вам потрібно вибрати мету для атаки deauth. \n- Вам потрібен збережений SSID для атаки маяка і зонда. \n- Натисніть перезавантажити, щоб оновити швидкість передачі пакетів. \n",
"settings_info": "- Деякі налаштування потребують перезавантаження. \n- Натисніть «Зберегти», щоб переконатися, що ваші зміни застосовані. \n",
"info_disclaimer": "У разі непередбаченої помилки перезавантажте сайт і подивіться на послідовний монітор для подальшого налагодження.",
"start_stop": "СТАРТ / СТОП",
"start": "СТАРТ",
"stop": "СТОП",
"wifi_off": "WiFi Вимкнути",
"reboot": "Перезавантажити",
"reset": "Скидання",
"enable_random": "Включити режим Рендомний",
"disable_random": "Вимкнути режим Рендомний",
"random_desc": "Увімкніть випадковий режим для створення випадкового списку SSID в заданий інтервал.",
"deauth_desc": "Закриває підключення WiFi-пристроїв, відправляючи фрейми деаутентификации для доступу до точок та обраним клієнтських пристроїв. \nЦе можливо тільки тому, що багато пристрою не використовують стандарт 802.11 w-2009, який забезпечує захист від цієї атаки. \n- Виберіть тільки одну мету! Коли ви вибираєте кілька цілей, які запускаються на різних каналах і запускають атаку, вони швидко перемикаються між цими каналами, і у вас немає шансів повторно підключитися до веб-інтерфейсу. \n",
"beacon_desc": "Маяковые пакети використовуються для реклами точок доступу. Постійно відправляючи пакети маяковых радіостанцій, це буде виглядати так, як ніби ви створили нові WiFi-мережі. \nВи можете вказати мережеві імена під SSID.",
"probe_desc": "Запити зонда відправляються клієнтськими пристроями, щоб запитати, чи відома мережа поблизу. \nВикористовуйте цю атаку, щоб заплутати WiFi-трекери, запросивши мережі, які ви вказали в списку SSID. \nУ малоймовірно, що ви побачите який-небудь вплив цієї атаки на ваш домашню мережу.",
"setting_version": "Номер версії, Тобто V2.0. \nЦю настройку можна змінити лише у вихідному коді.",
"setting_ssid": "SSID точки доступу, що використовується для веб-інтерфейсу (якщо дозволено). \nДовжина повинна бути від 1 до 31 символу.",
"setting_password": "Пароль точки доступу, що використовується для веб-інтерфейсу (якщо включений). \nДовжина повинна бути від 8 до 31 символу.",
"setting_channel": "Стандартний WiFi-канал, який використовується при запуску.",
"setting_hidden": "Приховує точку доступу, яка використовується для веб-інтерфейсу (якщо включена).",
"setting_captivePortal": "Включає доступний портал для точки доступу (якщо включений).",
"setting_autosave": "Включає автоматичне збереження SSID, імен пристроїв і налаштувань.",
"setting_autosavetime": "Інтервал часу для автоматичного збереження в мілісекундах.",
"setting_display": "Включає інтерфейс відображення.",
"setting_displayTimeout": "Час в секундах, після якого дисплей вимикається, коли він неактивний. \nЩоб відключити таймаут відображення, встановіть його в 0.",
"setting_serial": "Включає послідовний інтерфейс. \nНе рекомендується відключати його!",
"setting_serialEcho": "Включає ехо для кожного вхідного повідомлення через послідовний порт.",
"setting_web": "Включає веб-інтерфейс.",
"setting_webSpiffs": "Включає SPIFFS для всіх веб-файлів.",
"setting_led": "Включає функцію (RGB) LED.",
"setting_maxch": "Максимальний канал для сканування. \nUS = 11, EU = 13, Японія = 14.",
"setting_macAP": "MAC-адреса, що використовується для режиму точки доступу. \nЗверніть увагу, що MAC-адресу замінює тільки внутрішній MAC-адресу, коли включений режим точки доступу.",
"setting_macSt": "MAC-адреса, що використовується для режиму станції. \nБудь ласка, зверніть увагу, що MAC-адресу замінить тільки внутрішній MAC-адресу, коли включений режим станції.",
"setting_chtime": "Час сканування одного каналу перед переходом до наступного в мілісекундах (тільки якщо включений перемикання каналів).",
"setting_minDeauths": "Мінімальна кількість кадрів деаутентификации при скануванні для зміни світлодіода в режим deauth.",
"setting_attacktimeout": "Через деякий час (у секундах) атака автоматично зупиниться. \nВстановіть її на 0, щоб вимкнути її.",
"setting_forcepackets": "Скільки спроб відправити пакет. \nВстановите це значення вище, якщо ви хочете досягти більш високої швидкості передачі пакетів у завантаженій області. \nПереконайтеся, що цей параметр може зробити пристрій більш повільним або більш нестійким. \nМаксимальне значення - 255!",
"setting_deauthspertarget": "Скільки кадрів деаутентификации і дизассемблирования відправляється для кожної цілі.",
"setting_deauthReason": "Код причини, що відправляється з кадрами deauth, щоб повідомити цільового пристрою, чому з'єднання буде закрито.",
"setting_beaconchannel": "Якщо увімкнено, то буде відправлено всі кадри по різних каналах при запуску атаки маяка.",
"setting_beaconInterval": "Якщо встановлено true, маяки будуть відправлятися кожну секунду. Якщо встановлено значення false, інтервал буде дорівнює 100 мкс. \nA більше тривалий інтервал означає більшу стабільність і менше спаму пакетів, але це може зайняти більше часу, поки клієнти не знайдуть ssids при скануванні.",
"setting_randomTX": "Дозволяє рандомизированную потужність передачі для відправки кадрів маяка і зонда запиту.",
"setting_probesPerSSID": "Скільки кадрів запиту запиту надсилається для кожного SSID.",
"setting_lang": "Мову за замовчуванням для веб-інтерфейсу. \nПереконайтеся, що мовний файл існує!"
}

View File

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

View File

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

View File

@ -1,30 +1,29 @@
{
"version":"over9000",
"ssid":"pwned",
"password":"deauther",
"channel":1,
"hidden":false,
"captivePortal":true,
"lang": "en",
"autosave":true,
"autosavetime":30000,
"display":false,
"displayTimeout":600,
"serial":true,
"serialEcho":true,
"web":true,
"led":true,
"maxch":14,
"macSt":"aa:bb:cc:dd:ee:ff",
"macAP":"00:11:22:33:44:55",
"chtime":384,
"minDeauths":3,
"attacktimeout":600,
"forcepackets":3,
"deauthspertarget":20,
"deauthReason":1,
"beaconchannel":false,
"beaconInterval":false,
"randomTX":false,
"probesPerSSID":1
{
"version": "over9000",
"ssid": "pwned",
"password": "deauther",
"channel": 1,
"hidden": false,
"captivePortal": true,
"lang": "en",
"autosave": true,
"autosavetime": 30000,
"display": false,
"displayTimeout": 600,
"serial": true,
"serialEcho": true,
"web": true,
"led": true,
"maxch": 14,
"macSt": "aa:bb:cc:dd:ee:ff",
"macAP": "00:11:22:33:44:55",
"chtime": 384,
"minDeauths": 3,
"attacktimeout": 600,
"deauthspertarget": 20,
"deauthReason": 1,
"beaconchannel": false,
"beaconInterval": false,
"randomTX": false,
"probesPerSSID": 1
}

View File

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