ESP32-də Wifi ilə oyunlar

ESP32-də Wifi ilə oyunlar

Wifi şəbəkələrini analiz etmək üçün cib aləti düzəltmək düşüncəsi məni yandırdı bu məqalə.

Onlara fikrinə görə təşəkkür edirəm. Elə vaxtım də yox idi.

Bütün iş hobbi çərçivəsində, şəbəkə texnologiyaları sahəsində biliklərimi artırmaq məqsədilə həyata keçirildi. Bu ilin əvvəldən yavaş-yavaş, həftədə 1..4 saat.
Praktiki istifadəsini planlaşdırmırdım. Yəni, bu HACKER üçün alət deyil.

Hazırda bütün nəzərdə tutulan funksiyalar işləyir. Bütün mənbə kodları, tam toplanma üçün hazır, burada yerləşdirilib. Həmçinin burada toplanma üçün təlimat və s. var. Bu yazıda GitHub-da yerləşdirilmiş məlumatları təkrarlamayacam. Yalnız ayrıca qeyd etməyi lazım bildiyim şeyi izah edəcəyəm.

Mənim "universal alət" barədə fikrim və ESP32 seçiminin səbəbi

Mən həqiqət iddiasında deyiləm. Hər kəsin öz həqiqəti var. Seçdiyim "hardware"-i əsaslandırmağa çalışacağam.

Məqalədə təklif olunan istinad Linux (ilk olaraq Raspberry Pi) + "periferiyalar" şəklində kontroller (STM32) + CC1110 (8051 nüvəsi) ilə birlikdə bütün mümkün funksiyaları sığdırma planı mənim üçün uyğunsuz görünürdü. Bununla belə, bu layihə görünür, şəxsi və bağlı qalacaq (flipper-zero github "Bu təşkilatın ictimai anbarları yoxdur.") və daha da yayılmamış hardware-ə yönəldim.

Bəlkə də yanılıram və gələcəkdə mütəxəssislər proqram təminatının mənbələrini açıq şəkildə yerləşdirəcəklər. Amma əgər yoxdursa, belə bir hardware-i mənbələr olmadan almazdım.

Mənim "alət" üçün tələblərim

Qutunun kiçik olması lazımdır (necə kiçik, o qədər yaxşıdır).

Ona görə:

  • İçindəki batareya lazım deyil. Wifi ilə işlədikdə 100 mA-dan çox olan cərəyan zamanı, içindəki batareya ya böyük olacaq, ya da uzun müddət ərzində kifayət etməyəcək. Ona görə də, "qutucuq" standart power bank-la təmin olunsun. Hər halda, power bank mənim cibimdə/maşınımda hər zaman var.
  • "Qutucuq" içində alətlər ilə Linux saxlayın, bir neçə ildir müxtəlif dillərdə yazılmış kiçik ekran və məhdud idarəetmə düymələrinə malik olduğu üçün, mənasızdır. Nəticələri normal noutbukda tam qlaviyaturası və ekran ilə baxıb emal etmək olar.
  • Tərkiblər asan əldə edilə bilən və geniş tanınan (məqsədli SDK, çoxlu nümunələr və sənədlər) olmalıdır.

Nəticədə, mənim üçün seçim açıq oldu — ESP32.

Məqalədə qeyd olunan bütün tapşırıqlar üçün ESP32-nin imkanları kifayət qədərdir. Buna baxmayaraq, istədiyim maksimum budur:

  • Bluetooth ilə oynamaq.
  • Ən sadə hardware ilə 433mHz diapazonunda oynamaq (yalnız modulyasiyaya, demək olar ki, bütün ehtiyacları ödəniş etmir).

ESP32-də qaranlıq bir lomaq

  • ESP32 SDK (IDF) bir qədər qeyri-realdır.
  • Bəzi funksiyalar (WiFi stəki, məsələn) mənbəsiz toplu statik kitabxanalar şəklində təqdim olunur.
  • 5gHz diapazonu dəstəklənmir və WiFi ilə bağlı bəzi məhdudiyyətlər və nasazlıqlar var.

Ancaq qiymət/ölçülər bu çatışmazlıqları tam şəkildə kompensasiya edir.

Proqram təminatının əsas funksiyaları

Funksiyaları və düşüncələrimi qısa izah edəcəyəm...

Parametrləri idarə etmək və SD-dən faylları yükləmək

Bütün xarici idarəetmə sadə bir veb səhifəsi vasitəsilə həyata keçirilir və ayrı bir menyu elementində açılır. ESP32 WiFi AP rejimində başlayır və sabit IP ünvanı ilə səhifəni təqdim edir.

ESP32 nüvələri olduqca sürətli olsa da, təcrübələr göstərdi ki, daxili veb xidmətinin eyni anda işləməsi, məsələn, router rejimi ilə bir araya gəlmir. Buna görə də dinamik idarəetmə yoxdur və bütün digər rejimlərdə səhifə əlçatmazdır.
Xüsusilə, tədqiqat məqsədləri üçün dinamik idarəetmə lazım deyil.

Beacon paketləri ilə işləmə rejimi

Rejimlər sadədir və çox maraqlı deyil. 'Çünki edə bildiyimiz üçün' həyata keçirilib. Sadəcə olaraq.
Espressif-in rəsmi nümunələrində nümunələr var.

AP-lərin siyahısını skan etmə rejimi.
Əslində, bunu istənilən smartfon edə bilir.
Və bu rejimdə AP-lərin siyahısı saxlanacaq.
Beacon spammer.
ESP32 gizli SSID ilə AP kimi başlayır və təsadüfi MAC ünvanı ilə əvvəlcədən yaradılmış SSID siyahısına (əllə yaradılmış və ya əvvəlki AP siyahısını skan etməklə alınmış) əsaslanaraq [beacon frame] göndərməyə başlayır.

WiFi paketlərinin sniffing rejimi

Espressif inkişafçılar tətbiq proqramlarına callback funksiyası vasitəsilə havada 'uçan' bütün WiFi paketlərini almaq imkanı əlavə ediblər. Əslində hamısı deyil, çünki yalnız bir sabit kanalda rejim qura bilmək mümkündür.

Callback funksiyasının çağırılması üçün sərt vaxt məhdudiyyətləri qoyulmuşdur. Sadə statistik yığma rejimi üçün bu problem yaratmır, lakin SD kartda PCAP faylının yazılması üçün xatirədəki növbə və semaphore ilə yazmağı təşkil edərək bir az əziyyət çəkmək lazım oldu. Callback-i çağıran proses bir nüvədə, SD-yə yazan proses isə digərində işləyir.

‘Səs-küylü hava’ durumunda bəzi paketlər itirilir (növbədə yer olmur və buraxılır), amma tipik ‘hava’ şərtlərində (axşam 5..7 AP görünüşündə) PCAP-ın yazılması paket itkisi olmadan başa çatır.

Əlavə olaraq, PCAP-ın monitorinqi və yazılması üçün paketlərin başlıqlarında MAC siyahısına görə filtrasiya rejimi var.

Məsələn, bir insanın klubda/kafe içində görünməsindən əvvəl orada görünməsi izlənilə bilər. Az adam WiFi-ni söndürür və tanış AP-lərə avtomatik qoşulmanı bağlayır. (Mən indi bağlayıram.)

Wireshark-da yazılmış trafikə baxmaq faydalıdır və bunun necə işlədiyini anlamaq üçün maraqlıdır.

Deauth paketləri ilə işləmə rejimi

Varsayılan olarak, bu paketlerin gönderimi libnet80211.a kütüphanesinde yasaktır ve bu sürüm kaynak kodu olmadan gelir. Ancak, birkaç baytı düzelterek bunu aşmak zor değil. Başlangıçta bu yamanın çıkıp çıkmaması gerektiğinden şüpheliyken, [deauthentication frame] gönderim modunu açık tutarak farklı yerlerde dolaşmayı düşündüm: "neyse, neden olmasın". Özellikle, esp8266'da bu paketlerin gönderiminin kapatılmadığı ve esp8266 için GitHub'da derlemelerin bulunduğu göz önüne alındığında.

Birçok yerde (nerede olduğunu söylemeyeceğim) istenmeyen AP'leri bu yöntemle bastırmak için bu yöntemin kullanıldığı görülüyor. Ve bu, "saldırganlar" tarafından gerçekleştirilen bir şey değil...

Ben de telefonla internet paylaşımımın bazı yerlerde neden çalışmadığını düşünmüştüm...

Bu paketlerin sayım ve RSSI izleme modu, "nerelerde sahte AP'lerden hoşlanmadıklarını" anlamak için oldukça kullanışlıdır.

Router modu

Bu özellik, muhtemelen araştırılması gereken en ilginç olanıdır.

ESP32, STA + SoftAP modunda aynı anda çalışmayı destekler. Bu nedenle, klasik bir NAT yönlendiricisi uygulamak mümkündür.

Espressif, ağ yığını desteği için lwip kütüphanesinin (pratikte değişiklik olmadan) bir fork’unu kullanır.

Ancak, standart derlemede, esp-lwip kütüphanesinde 'ap' (SoftAP) ve 'st' (STA) ağ arayüzleri arasında bir NAT yönlendirmesi yoktur.

Tabii ki NAT olmadan da yapılabilir, ancak 'ap' arayüzüne iki veya daha fazla STA'nın aynı anda bağlanması ve 'st' ağ arayüzünden 'ap'ye IP adreslerinin senkronizasyonu sorunu ortaya çıkar. Dolayısıyla, zorluklara değmez, NAT üzerinden yapmak daha kolaydır.

Üstelik, martin-ger tarafından bir NAT uygulaması ekleyerek esp-lwip için bir fork mevcut.

Elleriyle onu sadece kozmetik olarak yeniden yapmak istedim (bana göre, fork projeyi kullanmak yerine LWIP ile yapmak daha kolaydı), ama tembellik galip geldi ve martin-ger'in versiyonu olduğu gibi kullanıldı.HOOK oluşturulmuş olan işlevler (derleme sırasında belirlenen), ama tembellik galip geldi ve martin-ger'in versiyonu olduğu gibi kullanıldı.

Router modunda, gelen ve giden IP4 trafiği izlenir.

Özellikle, ekran üzerinde görüntülemek ve dosyaya istatistik toplamak için çıkartılır:

  • SoftAP ESP32'ye bağlanan cihazın adı (DHCP paketleri)
  • SoftAP ESP32'ye bağlı cihazlardan gelen DNS isteklerinin URL'si (UDP port 53).

Ayrıca, trafiği bir PCAP dosyasına kaydetmek mümkündür.

Bu mod, örneğin, telefonunuzun ağa ne gönderdiğini ve nereye gittiğini anlayabilmek için oldukça faydalıdır.

SoftAP ESP32'nin gelen ve giden trafiği tamamen programatik olarak yönetme yeteneğinden yararlanarak bu modun başka kullanım yollarını da düşünebilirsiniz: Ethernet başlığı (destMAC[6]+srcMAC[6]+type[2]) + yük (IP4, IP6, DCHP, vb. tip).

Temelde, ESP32, kendisi üzerinden normal trafiği büyük gecikmeler olmadan geçirecek şekilde WiFi->WiFi yönlendirici işlevini oldukça iyi bir şekilde yerine getirir. Subjektif olarak, ESP32 üzerinden yönlendiriciye bağlı telefonumdaki gecikmeleri fark etmedim.

Təəssüf ki, Espressif API-də SoftAP EPS32-yə qoşulmuş MAC-lar üzrə filter qoymaq imkanı yoxdur. Bunun əvəzinə, artıq qoşulmuş arzuolunmaz STA-lara "vidalaşın" (esp_wifi_deauth_sta) bildirmək tövsiyə olunur.

Qoşulmuş STA-lar üzrə MAC filtrasiya, esp_wifi_deauth_sta() çağırışı ilə həyata keçirilməlidir.

Nəticə olaraq

ESP32 ilə iş zamanı yenilik tapmadım, lakin bəlkə kimsəyə nəticə (mənbə kodları) maraqlı gələr.

Xüsusilə tədris məqsədilə kod yazdığımı qeyd etmək istərdim. "Sındırma" və s. üçün məqsədli olaraq o, o qədər də əlverişli olunmayıb.

İzolyasiya edilmiş dövrə plakasını etmədim, çünki hazır plataları tel ilə birləşdirmək üçün 1.5-2 saat vaxt lazım oldu.

Və əgər edirsənsə, hazır platalardan deyil, ayrı-ayrı komponentlərdən yığmalısan. Onda ölçülər daha kiçik olacaq.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster