Créer un WiFi Deauther compact avec une esp8266-01

Un WiFi Deauther permet de déconnecter des appareils d’un réseau WiFi. Même si vous n’êtes pas connecté à ce réseau. Les deauthers tirent parti d’une faiblesse du protocole 802.11 qui permet l’envoi de trames de désauthentification par des périphériques non autorisés. Les deauthers comportent d’autres fonctionnalités telles que Beacon Spamming (spamming noms de réseaux WiFi) et Probe Spamming. Nos deauthers ne sont pas des WiFi Jammers, bien qu’ils aient un effet similaire. de réseaux de spams pour dérouter les autres.

Le but de mon projet est de réaliser un wifi Deauther dans un boitier compacte (imprimé en 3d) doté d’une batterie pour rendre le dispositif discret et ainsi démontrer la simplicité et discrétion d’un sabotage de réseaux wifi.

Matériel nécessaire

  • ESP8266-01 (-2€ sur AliexPress)
  • lipo 1s (3,7v) 300 mAh (récupération sur casque bluetooth hs ou AE -3€)
  • Circuit de charge lipo 1s TP4056 (2€ les 10 sur AE)
  • résistance pour adapter le circuit de charge a la batterie
  • interrupteur (récupération ou achat pour un prix dérisoire)
  • fil électrique de petite section, gaine thermo-rétractable et matériel de soudure
  • PLA ou ABS (nécessite une impimante 3d et certaines connaissance en impression 3d)
  • De la patience et de la minutie

Prototypage préproduction

pour vérifier que le projet fonctionne, compiler les sources (https://github.com/spacehuhn/esp8266_deauther) sur l’esp8266 et faire tourner le projet a l’aide d’une breadboard.

Pensez a modifier le nom / mot de passe du point d’acces wifi généré par l’esp dans le programme pour le rendre incognito.

/*
   ===========================================
      Copyright (c) 2018 Stefan Kremser
             github.com/spacehuhn
   ===========================================
 */

extern "C" {
  // Please follow this tutorial:
  // https://github.com/spacehuhn/esp8266_deauther/wiki/Installation#compiling-using-arduino-ide
  // And be sure to have the right board selected
  #include "user_interface.h"
}
#include <EEPROM.h>

#include <ArduinoJson.h>
#if ARDUINOJSON_VERSION_MAJOR != 5
// The software was build using ArduinoJson v5.x
// version 6 is still in beta at the time of writing
// go to tools -> manage libraries, search for ArduinoJSON and install the latest version 5
#error Please upgrade/downgrade ArduinoJSON library to version 5!
#endif

#include "oui.h"
#include "language.h"
#include "functions.h"
#include "Settings.h"
#include "Names.h"
#include "SSIDs.h"
#include "Scan.h"
#include "Attack.h"
#include "CLI.h"
#include "DisplayUI.h"
#include "A_config.h"
#include "webfiles.h"

#include "LED.h"

// Run-Time Variables //
LED led;
Settings settings;
Names    names;
SSIDs    ssids;
Accesspoints accesspoints;
Stations     stations;
Scan   scan;
Attack attack;
CLI    cli;
DisplayUI displayUI;

#include "wifi.h"

uint32_t autosaveTime = 0;
uint32_t currentTime  = 0;

bool booted = false;

void setup() {
    // for random generator
    randomSeed(os_random());

    // start serial
    Serial.begin(115200);
    Serial.println();

    // start SPIFFS
    prnt(SETUP_MOUNT_SPIFFS);
    prntln(SPIFFS.begin() ? SETUP_OK : SETUP_ERROR);

    // Start EEPROM
    EEPROM.begin(4096);

    // auto repair when in boot-loop
    uint8_t bootCounter = EEPROM.read(0);

    if (bootCounter >= 3) {
        prnt(SETUP_FORMAT_SPIFFS);
        SPIFFS.format();
        prntln(SETUP_OK);
    } else {
        EEPROM.write(0, bootCounter + 1); // add 1 to the boot counter
        EEPROM.commit();
    }

    // get time
    currentTime = millis();

    // load settings
    settings.load();

    // set mac for access point
    wifi_set_macaddr(SOFTAP_IF, settings.getMacAP());

    // start WiFi
    WiFi.mode(WIFI_OFF);
    wifi_set_opmode(STATION_MODE);
    wifi_set_promiscuous_rx_cb([](uint8_t* buf, uint16_t len) {
        scan.sniffer(buf, len);
    });

    // set mac for station
    wifi_set_macaddr(STATION_IF, settings.getMacSt());

    // start display
    if (settings.getDisplayInterface()) {
        displayUI.setup();
        displayUI.mode = displayUI.DISPLAY_MODE::INTRO;
    }

    // copy web files to SPIFFS
    copyWebFiles(false);

    // load everything else
    names.load();
    ssids.load();
    cli.load();

    // create scan.json
    scan.setup();

    // set channel
    setWifiChannel(settings.getChannel());

    // load Wifi settings: SSID, password,...
    #ifdef DEFAULT_SSID
    if (settings.getSSID() == "pwned") settings.setSSID(DEFAULT_SSID);
    #endif // ifdef DEFAULT_SSID
    loadWifiConfigDefaults();

    // dis/enable serial command interface
    if (settings.getCLI()) {
        cli.enable();
    } else {
        prntln(SETUP_SERIAL_WARNING);
        Serial.flush();
        Serial.end();
    }

    // start access point/web interface
    if (settings.getWebInterface()) startAP();

    // STARTED
    prntln(SETUP_STARTED);

    // version
    prntln(settings.getVersion());

    // setup LED
    led.setup();
}

void loop() {
    currentTime = millis();

    led.update();    // update LED color
    wifiUpdate();    // manage access point
    attack.update(); // run attacks
    displayUI.update();
    cli.update();    // read and run serial input
    scan.update();   // run scan
    ssids.update();  // run random mode, if enabled

    // auto-save
    if (settings.getAutosave() && (currentTime - autosaveTime > settings.getAutosaveTime())) {
        autosaveTime = currentTime;
        names.save(false);
        ssids.save(false);
        settings.save(false);
    }

    if (!booted) {
        // reset boot counter
        EEPROM.write(0, 0);
        EEPROM.commit();
        booted = true;
#ifdef HIGHLIGHT_LED
        displayUI.setupLED();
#endif // ifdef HIGHLIGHT_LED
    }
}

Conception du boitié en 3d

Réalisation du boitié en 3d avec Freecad après la prise de mesures des différents éléments au pieds à coulisse.

Soudage des différents éléments

Assemblage dans le boitié

rendu final :

Guillaume Vivance

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *