
Moderne WiFi-Auditing-Bibliothek für ESP32 mit fortschrittlichen 802.11-Techniken. Erfasst WPA/WPA2/WPA3-Handshakes per PMKID-Extraktion und CSA-Injection (umgeht PMF). Sammelt Enterprise-Zugangsdaten, unterstützt Dual-Band (2.4GHz/5GHz auf ESP32-C6), exportiert nach PCAPNG/Hashcat. Saubere C++-API mit 9 Beispielen.
Eine ausgefeilte WiFi-Auditing-Bibliothek für ESP32-Mikrocontroller
Politician ist eine eingebettete C++-Bibliothek, die für die WiFi-Sicherheitsüberprüfung auf ESP32-Plattformen entwickelt wurde. Sie bietet eine saubere, moderne API zum Erfassen von WPA/WPA2/WPA3-Handshakes und zum Ernten von Unternehmensanmeldeinformationen mit fortschrittlichen 802.11-Protokolltechniken.
Die Bibliothek basiert auf einer nicht-blockierenden Zustandsmaschine, die das Kanal-Hopping, die Zielauswahl, die Angriffsausführung und die Erfassungsverarbeitung verwaltet. Alle Vorgänge sind im politician-Namespace enthalten.
| Komponente | Beschreibung |
|---|---|
Politician | Haupt-Engine-Klasse, die den Audit-Lebenszyklus verwaltet |
PoliticianFormat | PCAPNG-Erfassungsserialisierung; Hilfs-HC22000-Textexport |
PoliticianStorage | Optionaler SD-Karten-Logging und NVS-Persistenz |
PoliticianStress | Entkoppelte DoS/Störung-Payload-Zustellung (Opt-in) |
PoliticianTypes | Kern-Datenstrukturen und Aufzählungen |
Traditionelle Deauthentifizierungsangriffe sind gegen moderne WPA3- und WPA2-Netzwerke mit Protected Management Frames (PMF/802.11w) unwirksam. Politician implementiert moderne Alternativen:
| Modus | Beschreibung | Effektivität |
|---|---|---|
ATTACK_PMKID | Extrahiert PMKID über Dummy-Authentifizierung | Funktioniert auf allen WPA2/WPA3-Transition |
ATTACK_CSA | Channel Switch Announcement-Injektion | Umgeht PMF-Schutz |
ATTACK_DEAUTH | Legacy-Deauthentifizierung (Grund 7) | Nur WPA2 ohne PMF |
ATTACK_STIMULATE | QoS-Null-Daten für schlafende Clients | Nicht-intrusives Client-Aufwecken |
ATTACK_PASSIVE | Nur-Hören-Modus | Keine Übertragung |
ATTACK_ALL | Aktiviert alle aktiven Angriffsvektoren | Maximale Aggression |
Füge zu deiner platformio.ini hinzu:```ini
[env:myboard]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
Politician
Oder klonen Sie direkt in das `lib/`-Verzeichnis Ihres Projekts:```bash
cd lib/
git clone https://github.com/0ldev/Politician.git
Klonen Sie das Repository in das components/-Verzeichnis Ihres Projekts:```bash
cd components/
git clone https://github.com/0ldev/Politician.git
Erstellen Sie einen `components/Politician/CMakeLists.txt` Komponentendeskriptor:```cmake
idf_component_register(
SRCS
"src/Politician.cpp"
"src/PoliticianFormat.cpp"
"src/PoliticianStress.cpp"
INCLUDE_DIRS "src"
)
PoliticianStorage.h ist unter ESP-IDF nicht verfügbar — es gibt einen #error zur Kompilierzeit aus, wenn es außerhalb von Arduino eingebunden wird. Verwenden Sie direkt die VFS- und nvs_flash-APIs von ESP-IDF für jegliche Persistenz, die Sie benötigen.
#include <Arduino.h> #include <SD.h> #include <Politician.h> #include <PoliticianStorage.h>
using namespace politician; using namespace politician::storage;
Politician engine;
void onHandshake(const HandshakeRecord &rec) { Serial.printf("\n[✓] Captured: %s ch%d rssi=%d type=%d\n", rec.ssid, rec.channel, rec.rssi, rec.type); // Primary output: PCAPNG — open in Wireshark or convert with hcxpcapngtool PcapngFileLogger::append(SD, "/captures.pcapng", rec); }
void setup() { Serial.begin(115200); SD.begin();
engine.setEapolCallback(onHandshake);
Config cfg;
engine.begin(cfg);
engine.setAttackMask(ATTACK_ALL);
}
void loop() { engine.tick(); }
### Bare ESP-IDF Schnellstart
Unter ESP-IDF ruft `begin()` intern `esp_wifi_init()` auf, erwartet jedoch, dass NVS und die Standard-Ereignisschleife bereits initialisiert sind. Rufen Sie diese vor `begin()` auf und treiben Sie die Engine dann von einer FreeRTOS-Aufgabe aus an.```cpp
#include <nvs_flash.h>
#include <esp_event.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <Politician.h>
using namespace politician;
static Politician engine;
static void on_handshake(const HandshakeRecord &rec) {
printf("[+] Captured: %s ch%d rssi=%d type=%d\n",
rec.ssid, rec.channel, rec.rssi, rec.type);
}
static void audit_task(void *) {
Config cfg;
engine.setEapolCallback(on_handshake);
if (engine.begin(cfg) != OK) {
printf("[!] WiFi init failed\n");
vTaskDelete(nullptr);
return;
}
engine.setAttackMask(ATTACK_ALL);
for (;;) {
engine.tick();
vTaskDelay(pdMS_TO_TICKS(1));
}
}
extern "C" void app_main(void) {
nvs_flash_init();
esp_event_loop_create_default();
xTaskCreate(audit_task, "politician", 8192, nullptr, 5, nullptr);
}
Die Haupt-Engine-Klasse. In Ihrer Hauptschleife muss tick() aufgerufen werden.
Error begin(const Config& cfg = Config());
Initialisiert die Engine. Gibt bei Erfolg `OK` oder bei Fehler einen `Error`-Code zurück. Muss vor jeder anderen Methode aufgerufen werden.