Skip to content

Commit 83c1db6

Browse files
author
Stefan Kremser
committed
Merge remote-tracking branch 'origin/testing' into testing
2 parents 406d624 + fd7c7ac commit 83c1db6

File tree

10 files changed

+161
-27
lines changed

10 files changed

+161
-27
lines changed

esp8266_deauther/Attack.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "Attack.h"
22

33
Attack::Attack() {
4-
randomSeed(os_random());
54
}
65

76
void Attack::generate() {
@@ -13,8 +12,7 @@ void Attack::generate() {
1312

1413
for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
1514
do {
16-
getRandomVendorMac(_randomMacBuffer);
17-
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
15+
_randomBeaconMac.randomize();
1816
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
1917
if (debug) Serial.println("done");
2018

@@ -162,7 +160,7 @@ void Attack::run() {
162160
if (apScan.isSelected(a)) {
163161
Mac _ap;
164162
int _ch = apScan.getAPChannel(a);
165-
_ap.setMac(apScan.aps._get(a));
163+
_ap.set(apScan.aps._get(a));
166164

167165
wifi_set_channel(_ch);
168166

@@ -317,7 +315,7 @@ void Attack::_log(int num){
317315
for(int a=0;a<apScan.results;a++){
318316
if(apScan.isSelected(a)){
319317
Mac _ap;
320-
_ap.setMac(apScan.aps._get(a));
318+
_ap.set(apScan.aps._get(a));
321319
addLog(_ap.toString());
322320
}
323321
}
@@ -463,11 +461,11 @@ void Attack::refreshLed() {
463461
}
464462
if (numberRunning >= 1 && settings.useLed) {
465463
if (debug) Serial.println("Attack LED : ON");
466-
digitalWrite(settings.ledPin, LOW);
464+
digitalWrite(settings.ledPin, !settings.pinStateOff);
467465
}
468466
else if (numberRunning == 0 || !settings.useLed) {
469467
if (debug) Serial.println("Attack LED : OFF");
470-
digitalWrite(settings.ledPin, HIGH);
468+
digitalWrite(settings.ledPin, settings.pinStateOff);
471469
}
472470
}
473471

esp8266_deauther/Mac.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,22 @@ void Mac::set(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth, uint
1515
adress[5] = sixth;
1616
}
1717

18-
void Mac::setAt(uint8_t first, int num) {
19-
if (num > -1 && num < 6) adress[num] = first;
18+
void Mac::set(uint8_t* mac) {
19+
for(int i=0; i<6 || i<sizeof(mac); i++){
20+
adress[i] = mac[i];
21+
}
2022
}
2123

22-
void Mac::setMac(Mac adr) {
24+
void Mac::set(Mac adr) {
2325
for (int i = 0; i < 6; i++) {
2426
adress[i] = adr._get(i);
2527
}
2628
}
2729

30+
void Mac::setAt(uint8_t first, int num) {
31+
if (num > -1 && num < 6) adress[num] = first;
32+
}
33+
2834
bool Mac::valid() {
2935
for (int i = 0; i < 6; i++) {
3036
if (adress[i] != 0xFF && adress[i] != 0x00) return true;
@@ -52,6 +58,10 @@ void Mac::_println() {
5258
Serial.println(Mac::toString());
5359
}
5460

61+
uint8_t* Mac::_get() {
62+
return adress;
63+
}
64+
5565
uint8_t Mac::_get(int num) {
5666
return adress[num];
5767
}
@@ -63,4 +73,10 @@ bool Mac::compare(Mac target) {
6373
return true;
6474
}
6575

76+
void Mac::randomize() {
77+
uint8_t randomMac[6];
78+
getRandomVendorMac(randomMac);
79+
this->set(randomMac);
80+
}
81+
6682

esp8266_deauther/Mac.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,24 @@
33

44
#include <Arduino.h>
55

6+
extern void getRandomVendorMac(uint8_t *buf);
7+
68
class Mac
79
{
810
public:
911
Mac();
1012
void set(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth, uint8_t fifth, uint8_t sixth);
13+
void set(uint8_t* mac);
14+
void set(Mac adr);
1115
void setAt(uint8_t first, int num);
12-
void setMac(Mac adr);
1316
String toString();
1417
void _print();
1518
void _println();
19+
uint8_t* _get();
1620
uint8_t _get(int num);
1721
bool compare(Mac target);
1822
bool valid();
23+
void randomize();
1924
private:
2025
uint8_t adress[6];
2126
};

esp8266_deauther/MacList.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ bool MacList::contains(Mac adr) {
1414
int MacList::add(Mac adr) {
1515
if(num < len && adr.valid()) {
1616
if (!contains(adr)) {
17-
macAdrs[num].setMac(adr);
17+
macAdrs[num].set(adr);
1818
num++;
1919
return num - 1;
2020
}
@@ -58,6 +58,6 @@ void MacList::remove(Mac adr) {
5858
}
5959

6060
void MacList::set(int num, Mac adr) {
61-
macAdrs[num].setMac(adr);
61+
macAdrs[num].set(adr);
6262
}
6363

esp8266_deauther/Settings.cpp

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,44 @@
11
#include "Settings.h"
22

33
Settings::Settings() {
4+
uint8_t tempMAC[6];
5+
defaultMacAP.set(WiFi.softAPmacAddress(tempMAC));
6+
if(!defaultMacAP.valid()) defaultMacAP.randomize();
7+
}
48

9+
void Settings::syncMacInterface(){
10+
if(debug) Serial.println("Trying to sync the MAC addr with settings");
11+
if(isSettingsLoaded){
12+
Mac macToSync;
13+
if(isMacAPRand){
14+
macToSync.randomize();
15+
wifi_set_macaddr(SOFTAP_IF, macToSync._get());
16+
if(debug) Serial.println("Synced with a random mac addr : " + macToSync.toString());
17+
}else if(macAP.valid()){
18+
macToSync = macAP;
19+
wifi_set_macaddr(SOFTAP_IF, macToSync._get());
20+
if(debug) Serial.println("Synced with saved mac addr : " + macToSync.toString());
21+
}else{
22+
if(debug) Serial.println("Could not sync because of invalid settings !");
23+
}
24+
}else{
25+
if(debug) Serial.println("Could not sync because settings are not loaded !");
26+
}
27+
}
28+
29+
void Settings::setLedPin(int newLedPin){
30+
prevLedPin = ledPin;
31+
if(newLedPin > 0 && newLedPin != prevLedPin){
32+
ledPin = newLedPin;
33+
pinMode(ledPin, OUTPUT);
34+
if(!prevLedPin == 0){
35+
digitalWrite(ledPin, digitalRead(prevLedPin));
36+
digitalWrite(prevLedPin, pinStateOff);
37+
pinMode(prevLedPin, INPUT);
38+
}else{
39+
digitalWrite(ledPin, pinStateOff);
40+
}
41+
}
542
}
643

744
void Settings::load() {
@@ -31,6 +68,11 @@ void Settings::load() {
3168
} else {
3269
apChannel = 1;
3370
}
71+
for(int i=0; i<6; i++){
72+
macAP.setAt((uint8_t)EEPROM.read(macAPAdr+i),i);
73+
}
74+
if(!macAP.valid()) macAP.set(defaultMacAP);
75+
isMacAPRand = (bool)EEPROM.read(isMacAPRandAdr);
3476

3577
apScanHidden = (bool)EEPROM.read(apScanHiddenAdr);
3678

@@ -45,7 +87,8 @@ void Settings::load() {
4587
multiAttacks = (bool)EEPROM.read(multiAttacksAdr);
4688
macInterval = eepromReadInt(macIntervalAdr);
4789
beaconInterval = (bool)EEPROM.read(beaconIntervalAdr);
48-
ledPin = (int)EEPROM.read(ledPinAdr);
90+
setLedPin((int)EEPROM.read(ledPinAdr));
91+
isSettingsLoaded = 1;
4992
}
5093

5194
void Settings::reset() {
@@ -58,6 +101,8 @@ void Settings::reset() {
58101

59102
ssidLen = ssid.length();
60103
passwordLen = password.length();
104+
macAP = defaultMacAP;
105+
isMacAPRand = 0;
61106

62107
apScanHidden = true;
63108

@@ -91,6 +136,12 @@ void Settings::save() {
91136
EEPROM.write(ssidHiddenAdr, ssidHidden);
92137
EEPROM.write(apChannelAdr, apChannel);
93138

139+
EEPROM.write(isMacAPRandAdr, isMacAPRand);
140+
141+
for(int i=0; i<6; i++){
142+
EEPROM.write(macAPAdr+i, macAP._get(i));
143+
}
144+
94145
EEPROM.write(apScanHiddenAdr, apScanHidden);
95146

96147
EEPROM.write(deauthReasonAdr, deauthReason);
@@ -124,6 +175,9 @@ void Settings::info() {
124175
Serial.println("password: " + password);
125176
Serial.println("password length: " + (String)passwordLen);
126177
Serial.println("channel: " + (String)apChannel);
178+
Serial.println("Default MAC AP: " + defaultMacAP.toString());
179+
Serial.println("Saved MAC AP: " + macAP.toString());
180+
Serial.println("MAC AP random: " + (String)isMacAPRand);
127181
Serial.println("Scan hidden APs: " + (String)apScanHidden);
128182
Serial.println("deauth reson: " + (String)(int)deauthReason);
129183
Serial.println("attack timeout: " + (String)attackTimeout);
@@ -147,6 +201,8 @@ size_t Settings::getSize() {
147201
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
148202
json += "\"password\":\"" + password + "\",";
149203
json += "\"apChannel\":" + (String)apChannel + ",";
204+
json += "\"macAp\":\"" + macAP.toString() + "\",";
205+
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
150206
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
151207
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
152208
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
@@ -174,6 +230,8 @@ void Settings::send() {
174230
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
175231
json += "\"password\":\"" + password + "\",";
176232
json += "\"apChannel\":" + (String)apChannel + ",";
233+
json += "\"macAp\":\"" + macAP.toString() + "\",";
234+
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
177235
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
178236
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
179237
json += "\"attackTimeout\":" + (String)attackTimeout + ",";

esp8266_deauther/Settings.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
#include "MacList.h"
99
#include "NameList.h"
1010

11+
extern "C" {
12+
#include "user_interface.h"
13+
}
14+
1115
extern void sendBuffer();
1216
extern void sendToBuffer(String str);
1317
extern void sendHeader(int code, String type, size_t _size);
@@ -37,9 +41,11 @@ extern NameList nameList;
3741
#define macIntervalAdr 1103
3842
#define beaconIntervalAdr 1105
3943
#define ledPinAdr 1106
44+
#define macAPAdr 1107
45+
#define isMacAPRandAdr 1113
4046

4147
#define checkNumAdr 2001
42-
#define checkNum 15
48+
#define checkNum 16
4349

4450
class Settings
4551
{
@@ -69,7 +75,15 @@ class Settings
6975
bool multiAttacks;
7076
int macInterval;
7177
bool beaconInterval;
72-
int ledPin;
78+
int ledPin = 0;
79+
int prevLedPin = 0;
80+
Mac defaultMacAP;
81+
Mac macAP;
82+
bool isMacAPRand;
83+
bool isSettingsLoaded = 0;
84+
void syncMacInterface();
85+
void setLedPin(int newLedPin);
86+
bool pinStateOff = true; // When attack is off, pin state is HIGH
7387

7488
private:
7589
size_t getSize();

esp8266_deauther/data.h

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

esp8266_deauther/esp8266_deauther.ino

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,25 @@ void saveSettings() {
392392
settings.apChannel = server.arg("apChannel").toInt();
393393
}
394394
}
395+
if (server.hasArg("macAp")) {
396+
String macStr = server.arg("macAp");
397+
macStr.replace(":","");
398+
Mac tempMac;
399+
if(macStr.length() == 12){
400+
for(int i=0;i<6;i++){
401+
const char* val = macStr.substring(i*2,i*2+2).c_str();
402+
uint8_t valByte = strtoul(val, NULL, 16);
403+
tempMac.setAt(valByte,i);
404+
}
405+
if(tempMac.valid()) settings.macAP.set(tempMac);
406+
} else if(macStr.length() == 0){
407+
settings.macAP.set(settings.defaultMacAP);
408+
}
409+
}
410+
if (server.hasArg("randMacAp")) {
411+
if (server.arg("randMacAp") == "false") settings.isMacAPRand = false;
412+
else settings.isMacAPRand = true;
413+
}
395414
if (server.hasArg("ssidEnc")) {
396415
if (server.arg("ssidEnc") == "false") settings.attackEncrypted = false;
397416
else settings.attackEncrypted = true;
@@ -426,7 +445,7 @@ void saveSettings() {
426445
else settings.multiAttacks = true;
427446
}
428447

429-
if (server.hasArg("ledPin")) settings.ledPin = server.arg("ledPin").toInt();
448+
if (server.hasArg("ledPin")) settings.setLedPin(server.arg("ledPin").toInt());
430449
if(server.hasArg("macInterval")) settings.macInterval = server.arg("macInterval").toInt();
431450

432451
settings.save();
@@ -439,24 +458,31 @@ void resetSettings() {
439458
}
440459

441460
void setup() {
461+
462+
randomSeed(os_random());
442463

443464
#ifdef USE_LED16
444465
pinMode(16, OUTPUT);
445466
digitalWrite(16, LOW);
446467
#endif
447468

448469
Serial.begin(115200);
449-
470+
450471
attackMode = "START";
451472

452473
EEPROM.begin(4096);
453474
SPIFFS.begin();
454-
475+
455476
settings.load();
456477
if (debug) settings.info();
478+
settings.syncMacInterface();
457479
nameList.load();
458480
ssidList.load();
459481

482+
attack.refreshLed();
483+
484+
delay(500); // Prevent bssid leak
485+
460486
startWifi();
461487
attack.stopAll();
462488
attack.generate();
@@ -544,20 +570,15 @@ void setup() {
544570
if(digitalRead(resetPin) == LOW) settings.reset();
545571
#endif
546572

547-
pinMode(settings.ledPin, OUTPUT);
548-
digitalWrite(settings.ledPin, HIGH);
549-
550573
if(debug){
551574
Serial.println("\nStarting...\n");
552575
#ifndef USE_DISPLAY
553576
delay(2000);
554577
#endif
555578
}
556-
557579
}
558580

559581
void loop() {
560-
561582
if (clientScan.sniffing) {
562583
if (clientScan.stop()) startWifi();
563584
} else {

0 commit comments

Comments
 (0)