
مكتبة حديثة لتدقيق شبكات WiFi لوحدة ESP32 باستخدام تقنيات 802.11 المتقدمة. تلتقط مصافحة WPA/WPA2/WPA3 عبر استخراج PMKID وحقن CSA (يتجاوز PMF). تجمع بيانات اعتماد المؤسسات، تدعم النطاق المزدوج (2.4GHz/5GHz على ESP32-C6)، وتُصدر إلى PCAPNG/Hashcat. واجهة برمجة تطبيقات C++ نظيفة مع 9 أمثلة.
مكتبة متطورة لتدقيق WiFi لوحدات التحكم الدقيقة ESP32
Politician هي مكتبة C++ مدمجة مصممة لتدقيق أمان WiFi على منصات ESP32. توفر واجهة برمجة تطبيقات نظيفة وحديثة لالتقاط مصافحات WPA/WPA2/WPA3 وجمع بيانات اعتماد المؤسسات باستخدام تقنيات بروتوكول 802.11 المتقدمة.
تم بناء المكتبة حول آلة حالة غير معطلة تدير التنقل بين القنوات، واختيار الهدف، وتنفيذ الهجوم، ومعالجة الالتقاط. جميع العمليات داخل namespace politician.
| المكون | الوصف |
|---|---|
Politician | فئة المحرك الرئيسية التي تدير دورة حياة التدقيق |
PoliticianFormat | تسلسل التقاط PCAPNG؛ تصدير نصي مساعد بتنسيق HC22000 |
PoliticianStorage | تسجيل اختياري على بطاقة SD وحفظ NVS |
PoliticianStress | توصيل حمولات DoS/التعطيل المنفصل (اختياري) |
PoliticianTypes | هياكل البيانات والتعدادات الأساسية |
هجمات إلغاء المصادقة التقليدية غير فعالة ضد شبكات WPA3 وWPA2 الحديثة المزودة بإطارات الإدارة المحمية (PMF/802.11w). Politician تنفذ بدائل حديثة:
| الوضع | الوصف | الفعالية |
|---|---|---|
ATTACK_PMKID | استخراج PMKID عبر مصادقة وهمية | يعمل على جميع شبكات WPA2/WPA3-Transition |
ATTACK_CSA | حقن إعلان تبديل القناة | يتجاوز حماية PMF |
ATTACK_DEAUTH | إلغاء مصادقة تقليدي (السبب 7) | فقط WPA2 بدون PMF |
ATTACK_STIMULATE | بيانات QoS Null للعملاء الخاملين | إيقاظ العميل غير التدخلي |
ATTACK_PASSIVE | وضع الاستماع فقط | بدون إرسال |
ATTACK_ALL | تفعيل جميع نواقل الهجوم النشطة | أقصى عدوانية |
أضف إلى ملف platformio.ini الخاص بك:```ini
[env:myboard]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
Politician
أو استنسخ مباشرة إلى مجلد `lib/` الخاص بمشروعك:```bash
cd lib/
git clone https://github.com/0ldev/Politician.git
استنسخ المستودع إلى دليل components/ داخل مشروعك:```bash
cd components/
git clone https://github.com/0ldev/Politician.git
أنشئ واصف مكون `components/Politician/CMakeLists.txt`:```cmake
idf_component_register(
SRCS
"src/Politician.cpp"
"src/PoliticianFormat.cpp"
"src/PoliticianStress.cpp"
INCLUDE_DIRS "src"
)
PoliticianStorage.h غير متاح تحت ESP-IDF — فهو يصدر #error في وقت الترجمة إذا تم تضمينه خارج Arduino. استخدم واجهات برمجة تطبيقات VFS و nvs_flash الخاصة بـ ESP-IDF مباشرة لأية استمرارية تحتاجها.
#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(); }
### بدء التشغيل السريع لـ ESP-IDF العاري
تحت ESP-IDF، تستدعي `begin()` داخليًا `esp_wifi_init()` ولكنها تتوقع أن تكون NVS وحلقة الأحداث الافتراضية قد تمت تهيئتها بالفعل. قم باستدعاء تلك قبل `begin()`، ثم قم بتشغيل المحرك من مهمة FreeRTOS.```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);
}
فئة المحرك الرئيسية. يجب استدعاء tick() في الحلقة الرئيسية الخاصة بك.
Error begin(const Config& cfg = Config());
تهيئة المحرك. يُرجع `OK` عند النجاح أو رمز `Error` عند الفشل. يجب استدعاؤه قبل أي طريقة أخرى.