Paglalaro gamit ang Wifi sa ESP32

Paglalaro gamit ang Wifi sa ESP32

Ang nagbigay sa akin ng ideya na gumawa ng pocket tool para sa pagsusuri ng mga WiFi network ay ang artikulong ito.

Salamat sa kanila para sa ideya. Wala lang akong magawa.

Ang lahat ng trabaho ay ginawa bilang bahagi ng isang libangan para sa layunin ng pagkakaroon ng kasiyahan at pagpapalawak ng aking kaalaman sa larangan ng mga teknolohiya ng network. Dahan-dahan, 1..4 na oras sa isang linggo, mula noong simula ng taong ito.
Hindi ako nagplano ng anumang praktikal na paggamit. Yung. HINDI ito isang tool ng hacker.

Sa ngayon, gumagana ang lahat ng nakaplanong pag-andar. Lahat ng mga mapagkukunan, ganap na handa para sa pagpupulong, naka-post dito. Mayroon ding mga tagubilin sa pagpupulong, atbp. Sa talang ito, hindi ko ido-duplicate ang impormasyong nai-post sa github. Sasabihin ko lang sa iyo kung ano ang itinuturing kong kinakailangan upang ilarawan nang hiwalay.

Ang aking opinyon sa "unibersal na tool" at ang dahilan sa pagpili ng ESP32

Hindi ko inaangkin na ako ang katotohanan. Ang bawat isa ay may kanya-kanyang sarili. Susubukan kong bigyang-katwiran ang aking pagpili ng hardware.

Iminungkahi sa artikulo ang kaso ng paggamit ng kumbinasyon ng Linux (sa una ay Raspberry Pi) + "mga peripheral" sa anyo ng isang controller (STM32) + CC1110 (8051 core) at ang plano na i-cram ang lahat ng posible doon (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) ay tila hindi angkop para sa akin. gayunpaman, proyektong ito Mukhang mananatili itong pribado at sarado (flipper-zero github "Walang pampublikong repositoryo ang organisasyong ito.") at pumunta sa hindi masyadong karaniwang hardware.

Marahil ay mali ako, at sa hinaharap ay gagawing available ng mga may-akda ang mga mapagkukunan ng software sa publiko. Ngunit kung hindi, hindi ako bibili ng ganoong piraso ng hardware nang walang source code.

Aking mga kinakailangan para sa "tool"

Ang kahon ay dapat maliit (mas maliit ang mas mahusay).

Samakatuwid:

  • Walang kinakailangang built-in na baterya. Sa kasalukuyang > 100 mA kapag nagtatrabaho sa Wifi, ang built-in na baterya ay magiging malaki o hindi magtatagal. Samakatuwid, hayaan ang "kahon" na pinapagana ng isang karaniwang power bank. Anyway, lagi akong may power bank sa bulsa/kotse.
  • Panatilihin ang isang Linux na "kahon" na may mga tool sa loob, nakasulat sa maraming taon sa lahat ng wika Sa maliit na screen at kakaunting hanay ng mga control button, wala itong saysay. Maaaring tingnan/iproseso ang mga resulta sa isang normal na laptop na may buong keyboard at screen.
  • Ang mga bahagi ay dapat na madaling ma-access at malawak na kilala (available SDK, maraming mga halimbawa at dokumentasyon).

Bilang isang resulta, para sa akin, ang pagpipilian ay halata - ESP32.

Para sa lahat ng mga gawain na nakasaad sa artikulo na nag-udyok sa akin na kumilos, ang mga kakayahan ng ESP32 ay sapat na. Kahit na ang pinaka gusto ko pa ring gawin ay:

  • Maglaro sa paligid gamit ang Bluetooth.
  • Maglaro sa 433mHz range na may pinakasimpleng hardware (tanging amplitude modulation, na sapat para sa mga praktikal na pangangailangan).

Lumipad sa pamahid sa ESP32

  • Ang ESP32 SDK (IDF) ay medyo malamya.
  • Ang ilan sa mga functionality (WiFi stack, halimbawa) ay walang source code sa anyo ng mga naka-assemble na static na library.
  • Ang 5gHz band ay hindi suportado at may ilang mga limitasyon at clumsiness sa pagtatrabaho sa WiFi.

Ngunit ang presyo/laki ay ganap na nagbabayad para sa mga pagkukulang na ito.

Pangunahing pag-andar ng software

Ilalarawan ko nang maikli ang pag-andar at ang aking opinyon tungkol sa...

Pamamahala ng mga setting at pag-upload ng mga file mula sa SD

Ang lahat ng panlabas na kontrol ay ginagawa sa pamamagitan ng isang simpleng Web page, na inilunsad sa isang hiwalay na item sa menu. Ang ESP32 ay nagsisimula sa WiFi AP mode at nagpapakita ng isang pahina sa isang nakapirming IP address.

Bagaman ang mga core ng ESP32 ay medyo mabilis, tulad ng ipinakita ng mga eksperimento, ang sabay-sabay na operasyon ng built-in na serbisyo sa Web at, halimbawa, ang mode ng router ay hindi masyadong tugma. Samakatuwid, walang dynamic na kontrol at ang pahina ay hindi magagamit sa lahat ng iba pang mga mode.
Bukod dito, hindi kailangan ang dynamic na kontrol para sa mga layunin ng pananaliksik.

Mode ng pagtatrabaho sa mga pakete ng Beacon

Ang mga mode ay karaniwan at hindi masyadong kawili-wili. Ginawa "dahil posible." Para sa check.
Mayroong mga halimbawa sa mga opisyal na halimbawa ng Espressif.

AP list scanning mode.
Sa totoo lang, magagawa ito ng anumang smartphone.
Well, sa mode na ito ang listahan ng AP ay isi-save.
Beacon spammer.
Ang ESP32 ay nagsisimula bilang isang AP na may nakatagong SSID at isang random na MAC at magsisimulang magpadala ng [beacon frame] ayon sa isang paunang ginawang listahan ng mga SSID (manu-manong ginawa o nakuha nang mas maaga sa pamamagitan ng pag-scan sa listahan ng AP)

WiFi packet sniffing mode

Ang mga developer ng espressif ay nagdagdag ng kakayahan para sa software ng application na matanggap ang lahat ng mga WiFi packet na "lumipad sa hangin" sa pamamagitan ng callback function. Sa totoo lang hindi lahat, dahil maaari mo lamang itakda ang mode para sa isang nakapirming channel.

Napakahigpit na mga paghihigpit sa oras ay ipinapataw sa pagproseso ng isang callback function. Kung hindi ito nagdudulot ng mga problema para sa simpleng mode ng pagkolekta ng mga istatistika, kung gayon para sa mode ng pag-record ng file ng PCAP sa SD card kailangan kong mag-tinker, ayusin ang pag-record sa pamamagitan ng isang pila sa memorya at mga semaphores. Isinasaalang-alang ang kakaiba na ang proseso ng pagtawag sa callback ay tumatakbo sa isang core, at ang proseso na nagsusulat sa SD sa isa pa.

Sa panahon ng "maingay na hangin", nawawala ang ilang packet (walang puwang sa pila at itinatapon ang mga ito), ngunit may tipikal na "hangin" ng isang apartment sa gabi (5..7 AP na nasa visibility), na nagre-record sa PCAP ay nakumpleto nang walang packet loss.

Bukod pa rito, para sa pagsubaybay at pag-record ng PCAP, mayroong mode ng pag-filter batay sa listahan ng MAC sa mga header ng packet.

Halimbawa, maaari mong subaybayan ang hitsura ng isang tao sa isang club/cafe bago pa man siya pumasok o lumitaw sa paningin. Ilang tao ang nagdi-disable ng WiFi at mga awtomatikong koneksyon sa mga kilalang AP. (I-turn off ko ngayon..)

Ang pagtingin sa naitalang trapiko sa Wireshark ay pang-edukasyon at kawili-wili para sa pag-unawa sa mga mapa - gumagana ang lahat.

Mode para sa pagtatrabaho sa mga death package

Bilang default, ang pagpapadala ng mga package na ito ay ipinagbabawal sa libnet80211.a library, na walang source. Ngunit madali itong ayusin sa pamamagitan ng pag-tweak ng ilang piraso. Sa una ay nag-alinlangan ako kung ito ay nagkakahalaga ng pag-post ng patch. Ngunit pagkatapos maglakad sa iba't ibang lugar na naka-on ang deauthentication frame scanning mode, naisip ko: "ano ba?" Bukod dito, sa esp8266 ang paghahatid ng mga paketeng ito ay hindi sarado at may mga pagtitipon sa github para sa esp8266.

Sa maraming lugar (hindi ko sasabihin kung saan) ginagamit ang pagsugpo sa mga hindi gustong AP sa pamamagitan ng pamamaraang ito. At hindi ito mga "bully"...

At nagulat din ako na ang aking pamamahagi ng Internet mula sa aking telepono ay hindi gumana sa ilang mga lugar...

Ang mode para sa pagsubaybay sa numero at RSSI ng naturang mga packet ay lubhang kapaki-pakinabang upang maunawaan "kung saan ang mga kaliwang AP ay hindi ito gusto."

mode ng router

Ang tampok na ito ay marahil ang pinaka-kawili-wili sa lahat upang galugarin.

Sinusuportahan ng ESP32 ang sabay-sabay na operasyon sa STA + SoftAP mode. Samakatuwid, maaari kang magpatupad ng isang klasikong NAT router dito.

Para suportahan ang network stack, gumagamit ang Espressif ng fork (halos hindi nagbabago) ng lwip library.

Ngunit, bilang default, sa karaniwang build, ang esp-lwip library ay hindi nagbibigay ng pagpapasa sa pagitan ng mga netif interface na 'ap' (SoftAP) at 'st' (STA).

Siyempre, magagawa mo ito nang walang NAT, ngunit may problema sa sabay-sabay na pagkonekta ng dalawa o higit pang mga STA sa 'ap' na interface at pag-synchronize ng mga IP address mula sa 'st' na interface ng network sa 'ap'. Kaya hindi sulit ang mga paghihirap at mas madali ito sa pamamagitan ng NAT.

Bukod dito, mayroong isang tinidor esp-lwip mula sa martin-ger, na nagdaragdag ng isang simpleng pagpapatupad ng NAT para sa IP4.

Kahit na ang aking mga kamay ay nangangati na gawing muli itong puro cosmetically (sa aking opinyon, ito ay mas madali nang walang tinidor ng proyekto, ngunit sa pamamagitan ng LWIPKawitan function na tinukoy sa panahon ng pagpupulong), ngunit ang katamaran ay nanaig at ang pagpipilian mula sa martin-ger ay ginagamit kung ano.

Sa mode ng router, tinitingnan ang papasok at papalabas na trapiko ng IP4.

Sa partikular, ang mga sumusunod ay kinuha mula dito para ipakita sa screen at pagkolekta ng mga istatistika sa isang file:

  • Pangalan ng device na nakakonekta sa SoftAP ESP32 (DHCP packets)
  • URL mula sa mga kahilingan sa DNS (UDP port 53) mula sa isang device na nakakonekta sa SoftAP ESP32.

Bukod pa rito, maaari mong paganahin ang pag-record ng trapiko sa isang PCAP file.

Ang mode na ito ay lubhang kapaki-pakinabang, halimbawa, upang maunawaan, halimbawa, kung ano ang ipinapadala ng iyong telepono sa network at kung saan ito pupunta.

Maaari kang mag-isip ng iba pang paraan upang magamit ang mode na ito, na isinasaalang-alang ang kakayahang ganap na kontrolin ang papasok at papalabas na trapiko ng softAP ESP32 sa antas ng interface ng network: Ehernet header (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DCHP, atbp. uri).

Sa prinsipyo, ang ESP32 ay lubos na nakayanan ang WiFi->WiFi router function, na dumadaan sa normal na trapiko nang walang anumang mga espesyal na pagkaantala. Sa pangkalahatan, ang mga pagkaantala sa isang telepono na konektado sa pamamagitan ng isang router sa isang ESP32 ay hindi napapansin.

Sa kasamaang palad, ang Espressif API ay walang kakayahang magtakda ng filter para sa MAC na konektado sa SoftAP EPS32. Sa halip, iminumungkahi na magsabi ng "paalam" (esp_wifi_deauth_sta) sa mga nakakonektang STA na "hindi ninanais".

Ang pag-filter ayon sa MAC para sa mga konektadong STA ay kailangang gawin sa pamamagitan ng esp_wifi_deauth_sta() na tawag

Sa pagtatapos

Bagama't wala akong naisip na bago sa loob ng balangkas ng pagtatrabaho sa ESP32, marahil ang resulta (source code) ay magiging kawili-wili sa isang tao.

Gusto kong tandaan na ang code ay isinulat lamang para sa mga layuning pang-edukasyon. Para sa "pag-hack", atbp., sadyang ginawa itong hindi masyadong maginhawa.

Hindi ako gumawa ng naka-print na circuit board dahil tumagal ng 1.5-2 oras upang maghinang ng mga natapos na scarves gamit ang wire.

At kung gagawin mo, kailangan mong tipunin ito hindi mula sa mga yari na board, ngunit mula sa mga indibidwal na bahagi. Kung gayon ang mga sukat ay magiging mas maliit.

Pinagmulan: www.habr.com

Magdagdag ng komento