A portable Wi-Fi and Bluetooth security research platform built from scratch. Custom PCB, 3D-printed enclosure, 30+ attack and monitoring tools, browser-based dashboard. All on a €4 ESP32.
What it is and why I built it
The ESP32 Cyber Device is a handheld wireless security research platform I designed and built for my Final Year Project. The concept was to build something similar to a Flipper Zero a purpose-built pocket device for security research using an ESP32 microcontroller that costs €4.
Everything is custom: the PCB designed in EasyEDA, the enclosure modelled in Tinkercad and printed in MJF nylon, the firmware written in C++ with a modular cooperative multitasking architecture, and the control dashboard built in vanilla JavaScript. All 30+ tools are accessible from any browser connected to the device's own Wi-Fi hotspot.
All tools accessible from the dashboard at 192.168.4.1 no app installation needed
| Feature | Description | Status |
|---|---|---|
| Evil Portal | Fake captive portal with DNS spoofing. iOS triggers the login page automatically via captive portal detection. Captures email, password, MAC address, and User-Agent in real time. | Works |
| Karma Attack | Listens for probe requests from nearby phones and auto-creates a matching fake AP. Devices auto-connect thinking they found a known network. | Works |
| Beacon Spam (4 variants) | Custom SSID list, random ISP-style names (BTHub6, Sky_, eir-), Rick Roll lyrics as network names, SSID confusion with homoglyph variants of real networks nearby. | Works |
| Wardriving | Async continuous AP logging BSSID, SSID, channel, encryption, RSSI. Persists in flash across reboots. CSV export. Logged 23 APs in a 5-minute walk. | Works |
| BadBLE Keyboard Injection | ESP32 advertises as a Bluetooth keyboard. Once paired, injects arbitrary keystrokes. Confirmed opening CMD on Windows 11 with a Win+R payload. | Works |
| Probe Request Sniffer | Captures SSIDs broadcast by nearby phones in probe request frames reveals their remembered network history. Passive only, no transmitted frames. | Works |
| DNS Spoofing | UDP server on port 53 redirects all DNS queries to 192.168.4.1. Any URL typed in a browser on a connected device opens the ESP32 dashboard. | Works |
| WiFi / BLE Scanners | AP discovery with SSID, BSSID, RSSI, channel, encryption, WPS, and OUI manufacturer. BLE device scan with company ID type classification (Apple, Samsung, MS). | Works |
| Station Scanner | Passive 802.11 data frame capture to map client-AP associations. Completely passive no transmitted frames. | Works |
| Network / Port Scanner | ARP discovery of all devices on the AP subnet. TCP port scan of 21 common ports. Channel analyser showing AP density per 2.4 GHz channel. | Works |
| BLE Name Spoof | Advertises as any named Bluetooth device. Visible in nRF Connect and Windows Bluetooth scanner. | Works |
| EAPOL Handshake Capture | Captures WPA2 four-way handshake. Outputs hashcat 22000 format for offline cracking. Works for devices connecting to this device's own AP only. | Own AP only |
| BLE Proximity Spam | Apple Continuity Protocol and MS Swift Pair advertisements. Frames confirmed transmitting in nRF Connect. OS-level popup notifications inconsistent. | Partial |
| Deauth Attack | Code and en_sys_seq fix are correct. ESP-IDF 5.x rejects 0xC0/0xA0 frame types at the driver level. Downgrade to 2.0.17 breaks other modules not viable. | Blocked (IDF 5.x) |
Custom PCB designed in EasyEDA, enclosure designed in Tinkercad both built from scratch
Cooperative multitasking every module ticks once per loop and returns immediately
// Every attack module exposes tick() one unit of work, returns fast void loop() { server.handleClient(); if (pendingCmd.ready) dispatch(); evilPortal.tick(); karmaAttack.tick(); beaconSpam.tick(); wardriving.tick(); // async scan AP stays online eapolSniffer.tick(); display.tick(); // ... 20+ more modules }
// EAPOL detection fixed byte offsets, adapted from ESP32 Marauder bool isEapol(const uint8_t* d, int len) { if (len < 36) return false; if (d[30]==0x88 && d[31]==0x8E) return true; // non-QoS if (d[32]==0x88 && d[33]==0x8E) return true; // QoS return false; }
Every significant issue during development with root cause and outcome
September 2025 – April 2026
What each feature demonstrates about real-world wireless vulnerabilities
EAPOL handshake material is passively observable by anyone in radio range. The entire security of WPA2-PSK depends on passphrase complexity. WPA3 with SAE eliminates this attack completely.
WPA2 has no mutual authentication clients can't verify an AP is genuine. iOS captive portal detection makes rogue portals seamless. VPN is the only reliable countermeasure.
Phones broadcast every remembered network SSID continuously. A partial movement history is passively readable. MAC randomisation helps but doesn't stop SSID content leaking.
Apple Continuity Protocol and MS Swift Pair have no cryptographic source authentication. Any BLE device can spoof any advertisement. iOS 17.3 rate-limits popups but can't fix the underlying protocol.
Windows default settings accept BLE keyboard pairings without a PIN. A paired device can inject arbitrary keystrokes immediately. Open CMD + run a command is achievable in seconds.
ESP-IDF 5.x deliberately blocks deauth frame injection a vendor security policy choice. Platform vendors can restrict research capabilities via firmware regardless of what the hardware supports.
BSc (Hons) Cybersecurity — SETU Carlow — Supervised by Joseph Kehoe