mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-21 22:19: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"
|
||||
|
||||
Attack::Attack() {
|
||||
randomSeed(os_random());
|
||||
}
|
||||
|
||||
void Attack::generate() {
|
||||
@@ -13,8 +12,7 @@ void Attack::generate() {
|
||||
|
||||
for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
|
||||
do {
|
||||
getRandomVendorMac(_randomMacBuffer);
|
||||
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
|
||||
_randomBeaconMac.randomize();
|
||||
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
|
||||
if (debug) Serial.println("done");
|
||||
|
||||
@@ -162,7 +160,7 @@ void Attack::run() {
|
||||
if (apScan.isSelected(a)) {
|
||||
Mac _ap;
|
||||
int _ch = apScan.getAPChannel(a);
|
||||
_ap.setMac(apScan.aps._get(a));
|
||||
_ap.set(apScan.aps._get(a));
|
||||
|
||||
wifi_set_channel(_ch);
|
||||
|
||||
@@ -317,7 +315,7 @@ void Attack::_log(int num){
|
||||
for(int a=0;a<apScan.results;a++){
|
||||
if(apScan.isSelected(a)){
|
||||
Mac _ap;
|
||||
_ap.setMac(apScan.aps._get(a));
|
||||
_ap.set(apScan.aps._get(a));
|
||||
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;
|
||||
}
|
||||
|
||||
void Mac::setAt(uint8_t first, int num) {
|
||||
if (num > -1 && num < 6) adress[num] = first;
|
||||
void Mac::set(uint8_t* mac) {
|
||||
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++) {
|
||||
adress[i] = adr._get(i);
|
||||
}
|
||||
}
|
||||
|
||||
void Mac::setAt(uint8_t first, int num) {
|
||||
if (num > -1 && num < 6) adress[num] = first;
|
||||
}
|
||||
|
||||
bool Mac::valid() {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (adress[i] != 0xFF && adress[i] != 0x00) return true;
|
||||
@@ -52,6 +58,10 @@ void Mac::_println() {
|
||||
Serial.println(Mac::toString());
|
||||
}
|
||||
|
||||
uint8_t* Mac::_get() {
|
||||
return adress;
|
||||
}
|
||||
|
||||
uint8_t Mac::_get(int num) {
|
||||
return adress[num];
|
||||
}
|
||||
@@ -63,4 +73,10 @@ bool Mac::compare(Mac target) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void Mac::randomize() {
|
||||
uint8_t randomMac[6];
|
||||
getRandomVendorMac(randomMac);
|
||||
this->set(randomMac);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,19 +3,24 @@
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
extern void getRandomVendorMac(uint8_t *buf);
|
||||
|
||||
class Mac
|
||||
{
|
||||
public:
|
||||
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* mac);
|
||||
void set(Mac adr);
|
||||
void setAt(uint8_t first, int num);
|
||||
void setMac(Mac adr);
|
||||
String toString();
|
||||
void _print();
|
||||
void _println();
|
||||
uint8_t* _get();
|
||||
uint8_t _get(int num);
|
||||
bool compare(Mac target);
|
||||
bool valid();
|
||||
void randomize();
|
||||
private:
|
||||
uint8_t adress[6];
|
||||
};
|
||||
|
||||
@@ -14,7 +14,7 @@ bool MacList::contains(Mac adr) {
|
||||
int MacList::add(Mac adr) {
|
||||
if(num < len && adr.valid()) {
|
||||
if (!contains(adr)) {
|
||||
macAdrs[num].setMac(adr);
|
||||
macAdrs[num].set(adr);
|
||||
num++;
|
||||
return num - 1;
|
||||
}
|
||||
@@ -58,6 +58,6 @@ void MacList::remove(Mac adr) {
|
||||
}
|
||||
|
||||
void MacList::set(int num, Mac adr) {
|
||||
macAdrs[num].setMac(adr);
|
||||
macAdrs[num].set(adr);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,29 @@
|
||||
#include "Settings.h"
|
||||
|
||||
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() {
|
||||
@@ -31,6 +53,11 @@ void Settings::load() {
|
||||
} else {
|
||||
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);
|
||||
|
||||
@@ -46,6 +73,7 @@ void Settings::load() {
|
||||
macInterval = eepromReadInt(macIntervalAdr);
|
||||
beaconInterval = (bool)EEPROM.read(beaconIntervalAdr);
|
||||
ledPin = (int)EEPROM.read(ledPinAdr);
|
||||
isSettingsLoaded = 1;
|
||||
}
|
||||
|
||||
void Settings::reset() {
|
||||
@@ -58,6 +86,8 @@ void Settings::reset() {
|
||||
|
||||
ssidLen = ssid.length();
|
||||
passwordLen = password.length();
|
||||
macAP = defaultMacAP;
|
||||
isMacAPRand = 0;
|
||||
|
||||
apScanHidden = true;
|
||||
|
||||
@@ -91,6 +121,12 @@ void Settings::save() {
|
||||
EEPROM.write(ssidHiddenAdr, ssidHidden);
|
||||
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(deauthReasonAdr, deauthReason);
|
||||
@@ -124,6 +160,9 @@ void Settings::info() {
|
||||
Serial.println("password: " + password);
|
||||
Serial.println("password length: " + (String)passwordLen);
|
||||
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("deauth reson: " + (String)(int)deauthReason);
|
||||
Serial.println("attack timeout: " + (String)attackTimeout);
|
||||
@@ -147,6 +186,8 @@ size_t Settings::getSize() {
|
||||
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
||||
json += "\"password\":\"" + password + "\",";
|
||||
json += "\"apChannel\":" + (String)apChannel + ",";
|
||||
json += "\"macAp\":\"" + macAP.toString() + "\",";
|
||||
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
|
||||
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
||||
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
||||
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
||||
@@ -174,6 +215,8 @@ void Settings::send() {
|
||||
json += "\"ssidHidden\":" + (String)ssidHidden + ",";
|
||||
json += "\"password\":\"" + password + "\",";
|
||||
json += "\"apChannel\":" + (String)apChannel + ",";
|
||||
json += "\"macAp\":\"" + macAP.toString() + "\",";
|
||||
json += "\"randMacAp\":" + (String)isMacAPRand + ",";
|
||||
json += "\"apScanHidden\":" + (String)apScanHidden + ",";
|
||||
json += "\"deauthReason\":" + (String)(int)deauthReason + ",";
|
||||
json += "\"attackTimeout\":" + (String)attackTimeout + ",";
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
#include "MacList.h"
|
||||
#include "NameList.h"
|
||||
|
||||
extern "C" {
|
||||
#include "user_interface.h"
|
||||
}
|
||||
|
||||
extern void sendBuffer();
|
||||
extern void sendToBuffer(String str);
|
||||
extern void sendHeader(int code, String type, size_t _size);
|
||||
@@ -37,6 +41,8 @@ extern NameList nameList;
|
||||
#define macIntervalAdr 1103
|
||||
#define beaconIntervalAdr 1105
|
||||
#define ledPinAdr 1106
|
||||
#define macAPAdr 1107
|
||||
#define isMacAPRandAdr 1113
|
||||
|
||||
#define checkNumAdr 2001
|
||||
#define checkNum 15
|
||||
@@ -50,6 +56,7 @@ class Settings
|
||||
void save();
|
||||
void send();
|
||||
void info();
|
||||
void syncMacInterface();
|
||||
|
||||
int ssidLen;
|
||||
String ssid = "";
|
||||
@@ -70,6 +77,10 @@ class Settings
|
||||
int macInterval;
|
||||
bool beaconInterval;
|
||||
int ledPin;
|
||||
Mac defaultMacAP;
|
||||
Mac macAP;
|
||||
bool isMacAPRand;
|
||||
bool isSettingsLoaded = 0;
|
||||
|
||||
private:
|
||||
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();
|
||||
}
|
||||
}
|
||||
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.arg("ssidEnc") == "false") settings.attackEncrypted = false;
|
||||
else settings.attackEncrypted = true;
|
||||
@@ -440,6 +459,8 @@ void resetSettings() {
|
||||
|
||||
void setup() {
|
||||
|
||||
randomSeed(os_random());
|
||||
|
||||
#ifdef USE_LED16
|
||||
pinMode(16, OUTPUT);
|
||||
digitalWrite(16, LOW);
|
||||
@@ -454,6 +475,7 @@ void setup() {
|
||||
|
||||
settings.load();
|
||||
if (debug) settings.info();
|
||||
settings.syncMacInterface();
|
||||
nameList.load();
|
||||
ssidList.load();
|
||||
|
||||
@@ -553,11 +575,9 @@ void setup() {
|
||||
delay(2000);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
if (clientScan.sniffing) {
|
||||
if (clientScan.stop()) startWifi();
|
||||
} else {
|
||||
|
||||
@@ -2,6 +2,8 @@ var ssid = getE('ssid');
|
||||
var ssidHidden = getE('ssidHidden');
|
||||
var password = getE('password');
|
||||
var apChannel = getE('apChannel');
|
||||
var macAp = getE('macAp');
|
||||
var randMacAp = getE('randMacAp');
|
||||
var apScanHidden = getE('apScanHidden');
|
||||
var scanTime = getE('scanTime');
|
||||
var timeout = getE('timeout');
|
||||
@@ -33,6 +35,8 @@ function getData() {
|
||||
ssidHidden.checked = res.ssidHidden;
|
||||
password.value = res.password;
|
||||
apChannel.value = res.apChannel;
|
||||
macAp.value = res.macAp;
|
||||
randMacAp.checked = res.randMacAp;
|
||||
apScanHidden.checked = res.apScanHidden;
|
||||
scanTime.value = res.clientScanTime;
|
||||
timeout.value = res.attackTimeout;
|
||||
@@ -56,6 +60,8 @@ function saveSettings() {
|
||||
url += "&ssidHidden=" + ssidHidden.checked;
|
||||
url += "&password=" + password.value;
|
||||
url += "&apChannel=" + apChannel.value;
|
||||
url += "&macAp=" + macAp.value;
|
||||
url += "&randMacAp=" + randMacAp.checked;
|
||||
url += "&apScanHidden=" + apScanHidden.checked;
|
||||
url += "&scanTime=" + scanTime.value;
|
||||
url += "&timeout=" + timeout.value;
|
||||
|
||||
@@ -61,6 +61,22 @@
|
||||
<input type="number" id="apChannel" min="1" max="14">
|
||||
</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 />
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
Reference in New Issue
Block a user