mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-21 14:09:59 +01:00
Increase stealth - Change the bssid of AP + random mode
+++ Ability to set the bssid +++ Ability to randomize the bssid at load time ++ Updated settings.html ++ Added Mac::randomize() + Updated Attack::generate to use Mac::randomize() + removed Mac::setMac() and overloaded Mac::set() with new parameters void set(uint8_t* mac); void set(Mac adr);
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
#include "Attack.h"
|
#include "Attack.h"
|
||||||
|
|
||||||
Attack::Attack() {
|
Attack::Attack() {
|
||||||
randomSeed(os_random());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Attack::generate() {
|
void Attack::generate() {
|
||||||
@@ -13,8 +12,7 @@ void Attack::generate() {
|
|||||||
|
|
||||||
for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
|
for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
|
||||||
do {
|
do {
|
||||||
getRandomVendorMac(_randomMacBuffer);
|
_randomBeaconMac.randomize();
|
||||||
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
|
|
||||||
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
|
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
|
||||||
if (debug) Serial.println("done");
|
if (debug) Serial.println("done");
|
||||||
|
|
||||||
@@ -162,7 +160,7 @@ void Attack::run() {
|
|||||||
if (apScan.isSelected(a)) {
|
if (apScan.isSelected(a)) {
|
||||||
Mac _ap;
|
Mac _ap;
|
||||||
int _ch = apScan.getAPChannel(a);
|
int _ch = apScan.getAPChannel(a);
|
||||||
_ap.setMac(apScan.aps._get(a));
|
_ap.set(apScan.aps._get(a));
|
||||||
|
|
||||||
wifi_set_channel(_ch);
|
wifi_set_channel(_ch);
|
||||||
|
|
||||||
@@ -317,7 +315,7 @@ void Attack::_log(int num){
|
|||||||
for(int a=0;a<apScan.results;a++){
|
for(int a=0;a<apScan.results;a++){
|
||||||
if(apScan.isSelected(a)){
|
if(apScan.isSelected(a)){
|
||||||
Mac _ap;
|
Mac _ap;
|
||||||
_ap.setMac(apScan.aps._get(a));
|
_ap.set(apScan.aps._get(a));
|
||||||
addLog(_ap.toString());
|
addLog(_ap.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,16 +15,22 @@ void Mac::set(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth, uint
|
|||||||
adress[5] = sixth;
|
adress[5] = sixth;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mac::setAt(uint8_t first, int num) {
|
void Mac::set(uint8_t* mac) {
|
||||||
if (num > -1 && num < 6) adress[num] = first;
|
for(int i=0; i<6 || i<sizeof(mac); i++){
|
||||||
|
adress[i] = mac[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mac::setMac(Mac adr) {
|
void Mac::set(Mac adr) {
|
||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
adress[i] = adr._get(i);
|
adress[i] = adr._get(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mac::setAt(uint8_t first, int num) {
|
||||||
|
if (num > -1 && num < 6) adress[num] = first;
|
||||||
|
}
|
||||||
|
|
||||||
bool Mac::valid() {
|
bool Mac::valid() {
|
||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
if (adress[i] != 0xFF && adress[i] != 0x00) return true;
|
if (adress[i] != 0xFF && adress[i] != 0x00) return true;
|
||||||
@@ -52,6 +58,10 @@ void Mac::_println() {
|
|||||||
Serial.println(Mac::toString());
|
Serial.println(Mac::toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t* Mac::_get() {
|
||||||
|
return adress;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t Mac::_get(int num) {
|
uint8_t Mac::_get(int num) {
|
||||||
return adress[num];
|
return adress[num];
|
||||||
}
|
}
|
||||||
@@ -63,4 +73,10 @@ bool Mac::compare(Mac target) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mac::randomize() {
|
||||||
|
uint8_t randomMac[6];
|
||||||
|
getRandomVendorMac(randomMac);
|
||||||
|
this->set(randomMac);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,19 +3,24 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
extern void getRandomVendorMac(uint8_t *buf);
|
||||||
|
|
||||||
class Mac
|
class Mac
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Mac();
|
Mac();
|
||||||
void set(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth, uint8_t fifth, uint8_t sixth);
|
void set(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth, uint8_t fifth, uint8_t sixth);
|
||||||
|
void set(uint8_t* mac);
|
||||||
|
void set(Mac adr);
|
||||||
void setAt(uint8_t first, int num);
|
void setAt(uint8_t first, int num);
|
||||||
void setMac(Mac adr);
|
|
||||||
String toString();
|
String toString();
|
||||||
void _print();
|
void _print();
|
||||||
void _println();
|
void _println();
|
||||||
|
uint8_t* _get();
|
||||||
uint8_t _get(int num);
|
uint8_t _get(int num);
|
||||||
bool compare(Mac target);
|
bool compare(Mac target);
|
||||||
bool valid();
|
bool valid();
|
||||||
|
void randomize();
|
||||||
private:
|
private:
|
||||||
uint8_t adress[6];
|
uint8_t adress[6];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ bool MacList::contains(Mac adr) {
|
|||||||
int MacList::add(Mac adr) {
|
int MacList::add(Mac adr) {
|
||||||
if(num < len && adr.valid()) {
|
if(num < len && adr.valid()) {
|
||||||
if (!contains(adr)) {
|
if (!contains(adr)) {
|
||||||
macAdrs[num].setMac(adr);
|
macAdrs[num].set(adr);
|
||||||
num++;
|
num++;
|
||||||
return num - 1;
|
return num - 1;
|
||||||
}
|
}
|
||||||
@@ -58,6 +58,6 @@ void MacList::remove(Mac adr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MacList::set(int num, Mac adr) {
|
void MacList::set(int num, Mac adr) {
|
||||||
macAdrs[num].setMac(adr);
|
macAdrs[num].set(adr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,29 @@
|
|||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
|
||||||
Settings::Settings() {
|
Settings::Settings() {
|
||||||
|
uint8_t tempMAC[6];
|
||||||
|
defaultMacAP.set(WiFi.softAPmacAddress(tempMAC));
|
||||||
|
if(!defaultMacAP.valid()) defaultMacAP.randomize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::syncMacInterface(){
|
||||||
|
if(debug) Serial.println("Trying to sync the MAC addr with settings");
|
||||||
|
if(isSettingsLoaded){
|
||||||
|
Mac macToSync;
|
||||||
|
if(isMacAPRand){
|
||||||
|
macToSync.randomize();
|
||||||
|
wifi_set_macaddr(SOFTAP_IF, macToSync._get());
|
||||||
|
if(debug) Serial.println("Synced with a random mac addr : " + macToSync.toString());
|
||||||
|
}else if(macAP.valid()){
|
||||||
|
macToSync = macAP;
|
||||||
|
wifi_set_macaddr(SOFTAP_IF, macToSync._get());
|
||||||
|
if(debug) Serial.println("Synced with saved mac addr : " + macToSync.toString());
|
||||||
|
}else{
|
||||||
|
if(debug) Serial.println("Could not sync because of invalid settings !");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(debug) Serial.println("Could not sync because settings are not loaded !");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Settings::load() {
|
void Settings::load() {
|
||||||
@@ -31,6 +53,11 @@ void Settings::load() {
|
|||||||
} else {
|
} else {
|
||||||
apChannel = 1;
|
apChannel = 1;
|
||||||
}
|
}
|
||||||
|
for(int i=0; i<6; i++){
|
||||||
|
macAP.setAt((uint8_t)EEPROM.read(macAPAdr+i),i);
|
||||||
|
}
|
||||||
|
if(!macAP.valid()) macAP.set(defaultMacAP);
|
||||||
|
isMacAPRand = (bool)EEPROM.read(isMacAPRandAdr);
|
||||||
|
|
||||||
apScanHidden = (bool)EEPROM.read(apScanHiddenAdr);
|
apScanHidden = (bool)EEPROM.read(apScanHiddenAdr);
|
||||||
|
|
||||||
@@ -46,6 +73,7 @@ void Settings::load() {
|
|||||||
macInterval = eepromReadInt(macIntervalAdr);
|
macInterval = eepromReadInt(macIntervalAdr);
|
||||||
beaconInterval = (bool)EEPROM.read(beaconIntervalAdr);
|
beaconInterval = (bool)EEPROM.read(beaconIntervalAdr);
|
||||||
ledPin = (int)EEPROM.read(ledPinAdr);
|
ledPin = (int)EEPROM.read(ledPinAdr);
|
||||||
|
isSettingsLoaded = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Settings::reset() {
|
void Settings::reset() {
|
||||||
@@ -58,6 +86,8 @@ void Settings::reset() {
|
|||||||
|
|
||||||
ssidLen = ssid.length();
|
ssidLen = ssid.length();
|
||||||
passwordLen = password.length();
|
passwordLen = password.length();
|
||||||
|
macAP = defaultMacAP;
|
||||||
|
isMacAPRand = 0;
|
||||||
|
|
||||||
apScanHidden = true;
|
apScanHidden = true;
|
||||||
|
|
||||||
@@ -91,6 +121,12 @@ void Settings::save() {
|
|||||||
EEPROM.write(ssidHiddenAdr, ssidHidden);
|
EEPROM.write(ssidHiddenAdr, ssidHidden);
|
||||||
EEPROM.write(apChannelAdr, apChannel);
|
EEPROM.write(apChannelAdr, apChannel);
|
||||||
|
|
||||||
|
EEPROM.write(isMacAPRandAdr, isMacAPRand);
|
||||||
|
|
||||||
|
for(int i=0; i<6; i++){
|
||||||
|
EEPROM.write(macAPAdr+i, macAP._get(i));
|
||||||
|
}
|
||||||
|
|
||||||
EEPROM.write(apScanHiddenAdr, apScanHidden);
|
EEPROM.write(apScanHiddenAdr, apScanHidden);
|
||||||
|
|
||||||
EEPROM.write(deauthReasonAdr, deauthReason);
|
EEPROM.write(deauthReasonAdr, deauthReason);
|
||||||
@@ -124,6 +160,9 @@ void Settings::info() {
|
|||||||
Serial.println("password: " + password);
|
Serial.println("password: " + password);
|
||||||
Serial.println("password length: " + (String)passwordLen);
|
Serial.println("password length: " + (String)passwordLen);
|
||||||
Serial.println("channel: " + (String)apChannel);
|
Serial.println("channel: " + (String)apChannel);
|
||||||
|
Serial.println("Default MAC AP: " + defaultMacAP.toString());
|
||||||
|
Serial.println("Saved MAC AP: " + macAP.toString());
|
||||||
|
Serial.println("MAC AP random: " + (String)isMacAPRand);
|
||||||
Serial.println("Scan hidden APs: " + (String)apScanHidden);
|
Serial.println("Scan hidden APs: " + (String)apScanHidden);
|
||||||
Serial.println("deauth reson: " + (String)(int)deauthReason);
|
Serial.println("deauth reson: " + (String)(int)deauthReason);
|
||||||
Serial.println("attack timeout: " + (String)attackTimeout);
|
Serial.println("attack timeout: " + (String)attackTimeout);
|
||||||
@@ -147,6 +186,8 @@ size_t Settings::getSize() {
|
|||||||
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
||||||
json += "\"password\":\"" + password + "\",";
|
json += "\"password\":\"" + password + "\",";
|
||||||
json += "\"apChannel\":" + (String)apChannel + ",";
|
json += "\"apChannel\":" + (String)apChannel + ",";
|
||||||
|
json += "\"macAp\":\"" + macAP.toString() + "\",";
|
||||||
|
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
|
||||||
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
||||||
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
||||||
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
||||||
@@ -174,6 +215,8 @@ void Settings::send() {
|
|||||||
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
||||||
json += "\"password\":\"" + password + "\",";
|
json += "\"password\":\"" + password + "\",";
|
||||||
json += "\"apChannel\":" + (String)apChannel + ",";
|
json += "\"apChannel\":" + (String)apChannel + ",";
|
||||||
|
json += "\"macAp\":\"" + macAP.toString() + "\",";
|
||||||
|
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
|
||||||
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
||||||
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
||||||
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
#include "MacList.h"
|
#include "MacList.h"
|
||||||
#include "NameList.h"
|
#include "NameList.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "user_interface.h"
|
||||||
|
}
|
||||||
|
|
||||||
extern void sendBuffer();
|
extern void sendBuffer();
|
||||||
extern void sendToBuffer(String str);
|
extern void sendToBuffer(String str);
|
||||||
extern void sendHeader(int code, String type, size_t _size);
|
extern void sendHeader(int code, String type, size_t _size);
|
||||||
@@ -37,6 +41,8 @@ extern NameList nameList;
|
|||||||
#define macIntervalAdr 1103
|
#define macIntervalAdr 1103
|
||||||
#define beaconIntervalAdr 1105
|
#define beaconIntervalAdr 1105
|
||||||
#define ledPinAdr 1106
|
#define ledPinAdr 1106
|
||||||
|
#define macAPAdr 1107
|
||||||
|
#define isMacAPRandAdr 1113
|
||||||
|
|
||||||
#define checkNumAdr 2001
|
#define checkNumAdr 2001
|
||||||
#define checkNum 15
|
#define checkNum 15
|
||||||
@@ -50,6 +56,7 @@ class Settings
|
|||||||
void save();
|
void save();
|
||||||
void send();
|
void send();
|
||||||
void info();
|
void info();
|
||||||
|
void syncMacInterface();
|
||||||
|
|
||||||
int ssidLen;
|
int ssidLen;
|
||||||
String ssid = "";
|
String ssid = "";
|
||||||
@@ -70,6 +77,10 @@ class Settings
|
|||||||
int macInterval;
|
int macInterval;
|
||||||
bool beaconInterval;
|
bool beaconInterval;
|
||||||
int ledPin;
|
int ledPin;
|
||||||
|
Mac defaultMacAP;
|
||||||
|
Mac macAP;
|
||||||
|
bool isMacAPRand;
|
||||||
|
bool isSettingsLoaded = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
size_t getSize();
|
size_t getSize();
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -392,6 +392,25 @@ void saveSettings() {
|
|||||||
settings.apChannel = server.arg("apChannel").toInt();
|
settings.apChannel = server.arg("apChannel").toInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (server.hasArg("macAp")) {
|
||||||
|
String macStr = server.arg("macAp");
|
||||||
|
macStr.replace(":","");
|
||||||
|
Mac tempMac;
|
||||||
|
if(macStr.length() == 12){
|
||||||
|
for(int i=0;i<6;i++){
|
||||||
|
const char* val = macStr.substring(i*2,i*2+2).c_str();
|
||||||
|
uint8_t valByte = strtoul(val, NULL, 16);
|
||||||
|
tempMac.setAt(valByte,i);
|
||||||
|
}
|
||||||
|
if(tempMac.valid()) settings.macAP.set(tempMac);
|
||||||
|
} else if(macStr.length() == 0){
|
||||||
|
settings.macAP.set(settings.defaultMacAP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (server.hasArg("randMacAp")) {
|
||||||
|
if (server.arg("randMacAp") == "false") settings.isMacAPRand = false;
|
||||||
|
else settings.isMacAPRand = true;
|
||||||
|
}
|
||||||
if (server.hasArg("ssidEnc")) {
|
if (server.hasArg("ssidEnc")) {
|
||||||
if (server.arg("ssidEnc") == "false") settings.attackEncrypted = false;
|
if (server.arg("ssidEnc") == "false") settings.attackEncrypted = false;
|
||||||
else settings.attackEncrypted = true;
|
else settings.attackEncrypted = true;
|
||||||
@@ -440,6 +459,8 @@ void resetSettings() {
|
|||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
|
randomSeed(os_random());
|
||||||
|
|
||||||
#ifdef USE_LED16
|
#ifdef USE_LED16
|
||||||
pinMode(16, OUTPUT);
|
pinMode(16, OUTPUT);
|
||||||
digitalWrite(16, LOW);
|
digitalWrite(16, LOW);
|
||||||
@@ -454,6 +475,7 @@ void setup() {
|
|||||||
|
|
||||||
settings.load();
|
settings.load();
|
||||||
if (debug) settings.info();
|
if (debug) settings.info();
|
||||||
|
settings.syncMacInterface();
|
||||||
nameList.load();
|
nameList.load();
|
||||||
ssidList.load();
|
ssidList.load();
|
||||||
|
|
||||||
@@ -553,11 +575,9 @@ void setup() {
|
|||||||
delay(2000);
|
delay(2000);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
if (clientScan.sniffing) {
|
if (clientScan.sniffing) {
|
||||||
if (clientScan.stop()) startWifi();
|
if (clientScan.stop()) startWifi();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ var ssid = getE('ssid');
|
|||||||
var ssidHidden = getE('ssidHidden');
|
var ssidHidden = getE('ssidHidden');
|
||||||
var password = getE('password');
|
var password = getE('password');
|
||||||
var apChannel = getE('apChannel');
|
var apChannel = getE('apChannel');
|
||||||
|
var macAp = getE('macAp');
|
||||||
|
var randMacAp = getE('randMacAp');
|
||||||
var apScanHidden = getE('apScanHidden');
|
var apScanHidden = getE('apScanHidden');
|
||||||
var scanTime = getE('scanTime');
|
var scanTime = getE('scanTime');
|
||||||
var timeout = getE('timeout');
|
var timeout = getE('timeout');
|
||||||
@@ -33,6 +35,8 @@ function getData() {
|
|||||||
ssidHidden.checked = res.ssidHidden;
|
ssidHidden.checked = res.ssidHidden;
|
||||||
password.value = res.password;
|
password.value = res.password;
|
||||||
apChannel.value = res.apChannel;
|
apChannel.value = res.apChannel;
|
||||||
|
macAp.value = res.macAp;
|
||||||
|
randMacAp.checked = res.randMacAp;
|
||||||
apScanHidden.checked = res.apScanHidden;
|
apScanHidden.checked = res.apScanHidden;
|
||||||
scanTime.value = res.clientScanTime;
|
scanTime.value = res.clientScanTime;
|
||||||
timeout.value = res.attackTimeout;
|
timeout.value = res.attackTimeout;
|
||||||
@@ -56,6 +60,8 @@ function saveSettings() {
|
|||||||
url += "&ssidHidden=" + ssidHidden.checked;
|
url += "&ssidHidden=" + ssidHidden.checked;
|
||||||
url += "&password=" + password.value;
|
url += "&password=" + password.value;
|
||||||
url += "&apChannel=" + apChannel.value;
|
url += "&apChannel=" + apChannel.value;
|
||||||
|
url += "&macAp=" + macAp.value;
|
||||||
|
url += "&randMacAp=" + randMacAp.checked;
|
||||||
url += "&apScanHidden=" + apScanHidden.checked;
|
url += "&apScanHidden=" + apScanHidden.checked;
|
||||||
url += "&scanTime=" + scanTime.value;
|
url += "&scanTime=" + scanTime.value;
|
||||||
url += "&timeout=" + timeout.value;
|
url += "&timeout=" + timeout.value;
|
||||||
|
|||||||
@@ -61,6 +61,22 @@
|
|||||||
<input type="number" id="apChannel" min="1" max="14">
|
<input type="number" id="apChannel" min="1" max="14">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<label for="apChannel">MAC</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<input type="text" id="macAp" min="1" max="14">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<label for="ssidHidden">Random MAC</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<input type="checkbox" name="randMacAp" id="randMacAp" value="false">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|||||||
Reference in New Issue
Block a user