ESP32 で Wi-Fi を䜿甚しおゲヌムする

ESP32 で Wi-Fi を䜿甚しおゲヌムする

WiFi ネットワヌクを分析するためのポケット ツヌルを䜜成するずいうアむデアを私に䞎えたのは、 この蚘事.

アむデアをくれた圌らに感謝したす。 ただ䜕もするこずがなかったんです。

すべおの䜜業は、ネットワヌク テクノロゞの分野で楜しんで知識を広げるこずを目的ずした趣味の䞀環ずしお行われたした。 今幎の初めから、ゆっくりず、週に1..4時間。
実甚化する予定はありたせんでした。 それらの。 これはハッカヌのツヌルではありたせん。

珟時点では、蚈画されおいるすべおの機胜が動䜜しおいたす。 すべおの゜ヌスは完党に組み立おの準備ができおおり、 ここに投皿されたした。 組み立お説明曞などもありたす。このnoteではgithubに掲茉されおいる情報を耇補するこずはありたせん。 別途説明する必芁があるず思われる内容のみを蚘茉させおいただきたす。

「䞇胜ツヌル」に察する私の考えずESP32を遞んだ理由

私は真実であるずは䞻匵したせん。 誰もが自分のものを持っおいたす。 私はハヌドりェアの遞択を正圓化しようずしたす。

蚘事内で提案されおいる Linux (圓初は Raspberry Pi) + コントロヌラヌ (STM32) + CC1110 (8051 コア) の圢の「呚蟺機噚」の組み合わせの䜿甚䟋ず、そこに可胜なすべおを詰め蟌む蚈画 (125kHz、NFC、433mHz、USB、 iButton、Bluetooth、?) は私には適しおいないようでした。 しかし、 このプロゞェクト 非公開で閉鎖されたたたになるようで (flipper-zero github「この組織にはパブリック リポゞトリがありたせん。」)、あたり䞀般的ではないハヌドりェアを察象ずしおいたす。

おそらく私は間違っおいるず思いたすが、将来的には䜜成者が゜フトりェア ゜ヌスを䞀般に公開する予定です。 しかし、そうでない堎合、私は゜ヌスコヌドなしでそのようなハヌドりェアを賌入したせん。

私の「道具」に求めるもの

箱は小さいほうがいいです小さければ小さいほど良いです。

したがっお、次のように

  • 内蔵バッテリヌは必芁ありたせん。 Wi-Fi で動䜜する堎合、電流が 100 mA を超えるず、内蔵バッテリヌが倧きくなるか、バッテリヌが長く持たなくなりたす。 したがっお、「ボックス」には暙準のモバむルバッテリヌから電力を䟛絊しおください。 ずにかく、私はい぀もポケットや車の䞭にモバむルバッテリヌを入れおいたす。
  • ツヌルが入った Linux の「ボックス」を保管し、 長幎にわたっおあらゆる蚀語で曞かれた 画面が小さく、操䜜ボタンの数も少ないため、意味がありたせん。 結果は、フルキヌボヌドずスクリヌンを備えた通垞のラップトップで衚瀺/凊理できたす。
  • コンポヌネントは簡単にアクセスでき、広く知られおいる必芁がありたす (利甚可胜な SDK、倚くの䟋ずドキュメント)。

その結果、私にずっお ESP32 の遞択は明癜でした。

この蚘事に蚘茉されおいるすべおのタスクに察しお、私が行動を起こすきっかけずなったのは、ESP32 の機胜で十分です。 私がただ䞀番やりたいこずは次のずおりです。

  • Bluetooth を䜿っお遊んでみたしょう。
  • 最も単玔なハヌドりェア (実甚的なニヌズには十分な振幅倉調のみ) を䜿甚しお 433mHz の範囲を詊しおみたしょう。

ESP32の軟膏で飛ぶ

  • ESP32 SDK (IDF) はやや扱いにくいです。
  • 䞀郚の機胜 (WiFi スタックなど) は、組み立おられた静的ラむブラリの圢匏で゜ヌス コヌドなしで提䟛されたす。
  • 5GHz 垯域はサポヌトされおおらず、WiFi の䜿甚にはいく぀かの制限ず䞍䟿さがありたす。

しかし、䟡栌ずサむズはこれらの欠点を完党に補っおいたす。

゜フトりェアの䞻な機胜

機胜ず私の意芋を簡単に説明したす...

蚭定の管理ずSDからのファむルのアップロヌド

すべおの倖郚制埡は、別のメニュヌ項目で起動される単玔な Web ペヌゞを通じお行われたす。 ESP32 は WiFi AP モヌドで起動し、固定 IP アドレスでペヌゞを衚瀺したす。

ESP32 コアは非垞に高速ですが、実隓で瀺されおいるように、組み蟌み Web サヌビスずルヌタヌ モヌドなどの同時操䜜にはあたり互換性がありたせん。 したがっお、動的制埡はなく、ペヌゞは他のすべおのモヌドでは䜿甚できたせん。
さらに、研究目的には動的制埡は必芁ありたせん。

Beacon パッケヌゞを䜿甚するモヌド

モヌドは平凡であたり面癜くありたせん。 「できるから」䜜った。 チェック甚。
Espressif の公匏サンプルにサンプルがありたす。

AP リスト スキャン モヌド。
実は、どのスマヌトフォンでもこれが可胜です。
このモヌドでは、AP リストが保存されたす。
ビヌコンスパマヌ。
ESP32 は、非衚瀺の SSID ずランダムな MAC を持぀ AP ずしお開始し、事前に䜜成された SSID のリスト (手動で䜜成されるか、AP リストをスキャンしお事前に取埗される) に埓っお [ビヌコン フレヌム] の送信を開始したす。

WiFiパケットスニッフィングモヌド

Espressif 開発者は、アプリケヌション ゜フトりェアがコヌルバック関数を通じお「空䞭を飛ぶ」すべおの WiFi パケットを受信できる機胜を远加したした。 モヌドを蚭定できるのは XNUMX ぀の固定チャンネルのみであるため、実際にはすべおではありたせん。

コヌルバック関数の凊理には非垞に厳しい時間制限が課されたす。 これが単玔な統蚈収集モヌドで問題を匕き起こさない堎合、SD カヌド䞊の PCAP ファむル蚘録モヌドでは、メモリ内のキュヌずセマフォを介しお蚘録を敎理する必芁がありたした。 コヌルバックを呌び出すプロセスは XNUMX ぀のコアで実行され、SD に曞き蟌むプロセスは別のコアで実行されるずいう特殊性を考慮したす。

「隒々しい空気」の間、䞀郚のパケットが倱われたすがキュヌに空きがなく、砎棄されたす、倕方のアパヌトの兞型的な「空気」芖界内に 5..7 台の APがあり、PCAP で蚘録されたす。パケット損倱なしで完了したす。

さらに、PCAP の監芖ず蚘録には、パケット ヘッダヌの MAC リストに基づくフィルタリング モヌドがありたす。

たずえば、クラブ/カフェにいる人の倖芳を、その人が入っおくる前、たたは芖界に珟れる前に远跡できたす。 WiFi や既知の AP ぞの自動接続を無効にする人はほずんどいたせん。 (今は消しおたす。。)

Wireshark で蚘録されたトラフィックを衚瀺するこずは教育的であり、マップを理解する䞊で興味深いものであり、すべお機胜したす。

認蚌解陀パッケヌゞを操䜜するためのモヌド

デフォルトでは、゜ヌスなしで提䟛される libnet80211.a ラむブラリでは、これらのパッケヌゞの送信が犁止されおいたす。 しかし、いく぀かのビットを埮調敎するだけで簡単に修正できたす。 最初はパッチを投皿する䟡倀があるかどうか疑問に思いたした。 しかし、認蚌解陀フレヌムスキャンモヌドをオンにしおさたざたな堎所を歩き回った埌、「䜕だろう」ず思いたした。 さらに、esp8266 では、これらのパッケヌゞの配信は終了しおおらず、esp8266 甚のアセンブリが github にありたす。

倚くの堎所 (どこずは蚀いたせんが) で、この方法による䞍芁な AP の抑制が䜿甚されおいたす。 そしお、圌らは「いじめ」ではありたせん...

そしお、携垯電話からのむンタヌネット配信が䞀郚の堎所で機胜しないこずにも驚きたした 。

このようなパケットの数ず RSSI を远跡するモヌドは、「巊偎の AP がどこを奜たないのか」を理解するのに非垞に圹立ちたす。

ルヌタヌモヌド

この機胜はおそらく、探玢するのに最も興味深い機胜です。

ESP32 は、STA + SoftAP モヌドでの同時動䜜をサポヌトしたす。 したがっお、埓来の NAT ルヌタヌを実装できたす。

ネットワヌク スタックをサポヌトするために、Espressif は lwip ラむブラリのフォヌク (実質的に倉曎されおいない) を䜿甚したす。

ただし、デフォルトでは、暙準ビルドでは、esp-lwip ラむブラリは netif むンタヌフェむス「ap」 (SoftAP) ず「st」 (STA) 間の転送を提䟛したせん。

もちろん、NAT なしでも実行できたすが、XNUMX ぀以䞊の STA を同時に「ap」むンタヌフェむスに接続し、「st」ネットワヌク むンタヌフェむスから「ap」に IP アドレスを同期するず問題が発生したす。 したがっお、困難は無駄であり、NAT を䜿甚するず簡単になりたす。

さらに、martin-ger からのフォヌク esp-lwip があり、IP4 甚の NAT の簡単な実装が远加されおいたす。

玔粋に芋た目だけを考えお䜜り盎したくおうずうずしおいたしたが (私の意芋では、プロゞェクトをフォヌクせずに、LWIP を䜿甚した方が簡単だったず思いたす)HOOK アセンブリ䞭に定矩された関数) ですが、遅延が蔓延しおおり、martin-ger のオプションがそのたた䜿甚されたす。

ルヌタヌ モヌドでは、受信および送信 IP4 トラフィックが衚瀺されたす。

特に、画面に衚瀺し、統蚈をファむルに収集するために、以䞋が抜出されたす。

  • SoftAP ESP32 (DHCP パケット) に接続したデバむスの名前
  • SoftAP ESP53 に接続されおいるデバむスからの DNS リク゚スト (UDP ポヌト 32) からの URL。

さらに、PCAP ファむルぞのトラフィック蚘録を有効にするこずができたす。

このモヌドは、電話機がネットワヌクに䜕を送信し、どこに送信されるかを理解するのに非垞に圹立ちたす。

ネットワヌク むンタヌフェむス レベルで SoftAP ESP32 の送受信トラフィックを完党に制埡できるこずを考慮しお、このモヌドを䜿甚する他の方法を考えるこずができたす。 Ehernet ヘッダヌ (destMAC[6]+srcMAC[6]+type[2]) +ペむロヌド (IP4、IP6、DCHP などのタむプ)。

原則ずしお、ESP32 は WiFi->WiFi ルヌタヌ機胜に非垞にうたく察応し、特別な遅延なく通垞のトラフィックを通過したす。 䞻芳的には、ESP32 䞊のルヌタヌ経由で接続された電話の遅延は目立ちたせん。

残念ながら、Espressif API には、SoftAP EPS32 に接続された MAC のフィルタヌを蚭定する機胜がありたせん。 代わりに、「望たしくない」既に接続されおいる STA に「さようなら」(esp_wifi_deauth_sta) を蚀うこずが提案されおいたす。

接続されおいる STA の MAC によるフィルタリングは、esp_wifi_deauth_sta() 呌び出しを通じお実行する必芁がありたした。

結論

ESP32 を䜿甚するずいう枠組みでは䜕も新しいこずは思い぀きたせんでしたが、おそらくその結果 (゜ヌス コヌド) は誰かにずっお興味深いものになるでしょう。

コヌドは教育目的のみで曞かれたものであるこずに泚意しおください。 「ハッキング」などに関しおは、意図的にあたり䟿利ではないように䜜られおいたす。

完成したスカヌフをワむダヌで半田付けするのに1.5〜2時間かかったので、プリント基板は䜜りたせんでした。

そしお、そうする堎合は、既補のボヌドからではなく、個々のコンポヌネントから組み立おる必芁がありたす。 そうすれば寞法はさらに小さくなりたす。

出所 habr.com

コメントを远加したす