Gaming mit WLAN auf ESP32

Gaming mit WLAN auf ESP32

Was mich auf die Idee brachte, ein Taschentool zur Analyse von WiFi-Netzwerken zu entwickeln, war dieser Artikel.

Vielen Dank an sie für die Idee. Ich hatte einfach nichts zu tun.

Alle Arbeiten wurden im Rahmen eines Hobbys durchgeführt, um Spaß zu haben und mein Wissen im Bereich der Netzwerktechnologien zu erweitern. Langsam, 1..4 Stunden pro Woche, seit Anfang dieses Jahres.
Einen praktischen Nutzen habe ich nicht geplant. Diese. Dies ist KEIN Hacker-Tool.

Im Moment funktionieren alle geplanten Funktionen. Alle Quellen, komplett montagefertig, hier gepostet. Es gibt auch Montageanleitungen usw. In diesem Hinweis werde ich die auf Github veröffentlichten Informationen nicht duplizieren. Ich werde Ihnen nur sagen, was ich für notwendig halte, um es gesondert zu beschreiben.

Meine Meinung zum „Universalwerkzeug“ und der Grund für die Wahl des ESP32

Ich behaupte nicht, die Wahrheit zu sein. Jeder hat sein eigenes. Ich werde versuchen, meine Wahl der Hardware zu begründen.

Im Artikel vorgeschlagen Der Anwendungsfall einer Kombination aus Linux (ursprünglich Raspberry Pi) + „Peripheriegeräte“ in Form eines Controllers (STM32) + CC1110 (8051-Kern) und der Plan, alles Mögliche darin unterzubringen (125 kHz, NFC, 433 MHz, USB, iButton, Bluetooth, ?) schien mir nicht geeignet. Jedoch, dieses Projekt Es sieht so aus, als würde es privat und geschlossen bleiben (Flipper-Null-Github „Diese Organisation hat keine öffentlichen Repositories.“) und auf nicht sehr verbreitete Hardware umgestellt.

Vielleicht irre ich mich, und in Zukunft werden die Autoren die Softwarequellen öffentlich zugänglich machen. Aber wenn nicht, dann würde ich ohne den Quellcode keine solche Hardware kaufen.

Meine Anforderungen an das „Tool“

Die Box sollte klein sein (je kleiner, desto besser).

Deshalb:

  • Keine eingebaute Batterie erforderlich. Bei einem Strom > 100 mA beim Arbeiten mit WLAN ist der eingebaute Akku entweder groß oder hält nicht lange. Lassen Sie die „Box“ daher über eine handelsübliche Powerbank mit Strom versorgen. Ich habe sowieso immer eine Powerbank in meiner Tasche/im Auto.
  • Behalten Sie eine Linux-„Box“ mit Tools darin, über viele Jahre in allen Sprachen geschrieben Bei einem kleinen Bildschirm und einem dürftigen Satz an Bedientasten macht das keinen Sinn. Die Ergebnisse können auf einem normalen Laptop mit vollwertiger Tastatur und Bildschirm betrachtet/bearbeitet werden.
  • Komponenten sollten leicht zugänglich und allgemein bekannt sein (verfügbares SDK, viele Beispiele und Dokumentation).

Daher lag die Wahl für mich auf der Hand: ESP32.

Für alle im Artikel genannten Aufgaben, die mich zum Handeln veranlasst haben, sind die Fähigkeiten des ESP32 völlig ausreichend. Obwohl das Wichtigste, was ich immer noch tun möchte, Folgendes ist:

  • Spielen Sie mit Bluetooth herum.
  • Probieren Sie den 433-MHz-Bereich mit einfachster Hardware aus (nur Amplitudenmodulation, was für praktische Zwecke ausreicht).

Ein Problem mit ESP32

  • Das ESP32 SDK (IDF) ist etwas ungeschickt.
  • Einige der Funktionen (z. B. WiFi-Stack) werden ohne Quellcode in Form zusammengestellter statischer Bibliotheken geliefert.
  • Das 5-GHz-Band wird nicht unterstützt und es gibt einige Einschränkungen und Ungeschicklichkeiten bei der Arbeit mit WLAN.

Aber der Preis/die Größe gleicht diese Mängel vollständig aus.

Hauptfunktionen der Software

Ich beschreibe kurz die Funktionalität und meine Meinung dazu...

Einstellungen verwalten und Dateien von SD hochladen

Die gesamte externe Steuerung erfolgt über eine einfache Webseite, die in einem separaten Menüpunkt gestartet wird. Der ESP32 startet im WiFi AP-Modus und zeigt eine Seite unter einer festen IP-Adresse an.

Obwohl die ESP32-Kerne recht schnell sind, wie Experimente gezeigt haben, sind der gleichzeitige Betrieb des integrierten Webdienstes und beispielsweise des Router-Modus nicht sehr kompatibel. Daher gibt es keine dynamische Steuerung und die Seite ist in allen anderen Modi nicht verfügbar.
Darüber hinaus ist eine dynamische Steuerung für Forschungszwecke nicht erforderlich.

Arbeitsweise mit Beacon-Paketen

Die Modi sind banal und nicht sehr interessant. Gemacht „weil es möglich ist.“ Zum Überprüfen.
Beispiele finden Sie in den offiziellen Espressif-Beispielen.

AP-Listen-Scanmodus.
Eigentlich kann das jedes Smartphone.
Nun, in diesem Modus wird die AP-Liste gespeichert.
Beacon-Spammer.
Der ESP32 startet als AP mit einer versteckten SSID und einem zufälligen MAC und beginnt mit dem Senden von [Beacon-Frame] gemäß einer vorab erstellten Liste von SSIDs (manuell erstellt oder zuvor durch Scannen der AP-Liste erhalten).

WiFi-Paket-Sniffing-Modus

Die Espressif-Entwickler haben der Anwendungssoftware die Möglichkeit hinzugefügt, alle „in der Luft fliegenden“ WLAN-Pakete über die Rückruffunktion zu empfangen. Eigentlich nicht alle, da man den Modus nur für einen festen Kanal einstellen kann.

Für die Verarbeitung einer Callback-Funktion gelten sehr strenge Zeitbeschränkungen. Wenn dies für den einfachen Statistikerfassungsmodus keine Probleme verursacht, musste ich für den PCAP-Dateiaufzeichnungsmodus auf der SD-Karte basteln und die Aufzeichnung über eine Warteschlange im Speicher und Semaphoren organisieren. Unter Berücksichtigung der Besonderheit, dass der Prozess, der den Rückruf aufruft, auf einem Kern läuft und der Prozess, der auf SD schreibt, auf einem anderen.

Bei „Lärmluft“ gehen einige Pakete verloren (es ist kein Platz in der Warteschlange und sie werden verworfen), aber bei einer typischen „Luft“ einer Wohnung am Abend (5..7 APs in Sichtweite), Aufzeichnung in PCAP wird ohne Paketverlust abgeschlossen.

Zusätzlich gibt es für die PCAP-Überwachung und -Aufzeichnung einen Filtermodus, der auf der MAC-Liste in den Paketheadern basiert.

Sie können beispielsweise das Erscheinen einer Person in einem Club/Café verfolgen, bevor sie überhaupt eintrifft oder in Sichtweite erscheint. Nur wenige Menschen deaktivieren WLAN und automatische Verbindungen zu bekannten APs. (Ich schalte es jetzt aus.)

Das Anzeigen des aufgezeichneten Verkehrs in Wireshark ist lehrreich und interessant für das Verständnis von Karten – alles funktioniert.

Modus zum Arbeiten mit Deauth-Paketen

Standardmäßig ist das Senden dieser Pakete in der Bibliothek libnet80211.a, die ohne Quellen geliefert wird, verboten. Aber es lässt sich leicht beheben, indem man ein paar Kleinigkeiten optimiert. Zuerst bezweifelte ich, ob es sich lohnte, einen Patch zu veröffentlichen. Aber nachdem ich mit aktiviertem Deauthentifizierungs-Frame-Scanmodus an verschiedenen Orten herumgelaufen war, dachte ich: „Was zum Teufel.“ Darüber hinaus ist in esp8266 die Lieferung dieser Pakete nicht geschlossen und es gibt Assemblys auf Github für esp8266.

An vielen Orten (ich werde nicht sagen, wo) wird die Unterdrückung unerwünschter APs durch diese Methode eingesetzt. Und das sind keine „Mobber“...

Und ich war auch überrascht, dass meine Internetverteilung von meinem Telefon aus an manchen Orten nicht funktionierte ...

Der Modus zum Verfolgen der Anzahl und RSSI solcher Pakete ist sehr nützlich, um zu verstehen, „wo es den linken APs nicht gefällt“.

Router-Modus

Diese Funktion ist wahrscheinlich die interessanteste von allen, die es zu erkunden gilt.

ESP32 unterstützt den gleichzeitigen Betrieb im STA + SoftAP-Modus. Daher können Sie darauf einen klassischen NAT-Router implementieren.

Zur Unterstützung des Netzwerkstapels verwendet Espressif einen Zweig (praktisch unverändert) der LWIP-Bibliothek.

Aber standardmäßig bietet die esp-lwip-Bibliothek im Standard-Build keine Weiterleitung zwischen den Netif-Schnittstellen „ap“ (SoftAP) und „st“ (STA).

Natürlich können Sie es auch ohne NAT machen, aber es gibt ein Problem, wenn Sie gleichzeitig zwei oder mehr STAs mit der „ap“-Schnittstelle verbinden und IP-Adressen von der „st“-Netzwerkschnittstelle mit „ap“ synchronisieren. Die Schwierigkeiten lohnen sich also nicht und durch NAT ist es einfacher.

Darüber hinaus gibt es einen Fork esp-lwip von martin-ger, der eine einfache Implementierung von NAT für IP4 hinzufügt.

Obwohl es mir in den Händen juckte, es rein kosmetisch neu zu gestalten (meiner Meinung nach war es ohne Fork des Projekts einfacher, aber durch LWIP).HOOK Funktionen, die während der Montage definiert wurden), aber die Faulheit überwog und die Option von martin-ger wird unverändert verwendet.

Im Router-Modus wird der ein- und ausgehende IP4-Verkehr angezeigt.

Insbesondere wird daraus Folgendes extrahiert, um es auf dem Bildschirm anzuzeigen und Statistiken in einer Datei zu sammeln:

  • Name des Geräts, das eine Verbindung zu SoftAP ESP32 hergestellt hat (DHCP-Pakete)
  • URL von DNS-Anfragen (UDP-Port 53) von einem mit SoftAP ESP32 verbundenen Gerät.

Darüber hinaus können Sie die Verkehrsaufzeichnung in einer PCAP-Datei aktivieren.

Dieser Modus ist beispielsweise sehr nützlich, um zu verstehen, was Ihr Telefon an das Netzwerk sendet und wohin es geht.

Sie können sich andere Möglichkeiten zur Verwendung dieses Modus vorstellen und dabei die Möglichkeit berücksichtigen, den eingehenden und ausgehenden SoftAP ESP32-Verkehr auf Netzwerkschnittstellenebene vollständig zu steuern: Ethernet-Header (destMAC[6]+srcMAC[6]+type[2]) + Nutzlast (Typ IP4, IP6, DCHP usw.).

Prinzipiell kommt der ESP32 mit der WiFi->WiFi-Router-Funktion recht gut zurecht und leitet den normalen Datenverkehr ohne besondere Verzögerungen durch. Subjektiv sind Verzögerungen bei einem Telefon, das über einen Router an einem ESP32 angeschlossen ist, nicht spürbar.

Leider verfügt die Espressif-API nicht über die Möglichkeit, einen Filter für MAC festzulegen, der mit SoftAP EPS32 verbunden ist. Stattdessen wird vorgeschlagen, sich von bereits verbundenen STAs zu verabschieden (esp_wifi_deauth_sta), die „nicht erwünscht“ sind.

Die Filterung nach MAC für verbundene STAs musste über den Aufruf esp_wifi_deauth_sta() erfolgen

Abschließend

Obwohl mir im Rahmen der Arbeit mit ESP32 nichts Neues eingefallen ist, ist das Ergebnis (Quellcode) vielleicht für jemanden interessant.

Ich möchte darauf hinweisen, dass der Code ausschließlich zu Bildungszwecken geschrieben wurde. Für „Hacking“ usw. wurde es bewusst unpraktisch gestaltet.

Ich habe keine Leiterplatte hergestellt, da es 1.5 bis 2 Stunden gedauert hat, die fertigen Schals mit Draht zu verlöten.

Und wenn ja, müssen Sie es nicht aus vorgefertigten Platinen, sondern aus einzelnen Komponenten zusammenbauen. Dann werden die Abmessungen noch kleiner.

Source: habr.com

Kommentar hinzufügen