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 :