Խաղեր Wifi-ով ESP32-ում

Խաղեր Wifi-ով ESP32-ում

WiFi ցանցերը վերլուծելու համար գրպանային գործիք ստեղծելու գաղափարը ինձ հուշեց այս հոդվածը.

Շնորհակալություն նրանց գաղափարի համար։ Ես ուղղակի անելիք չունեի։

Բոլոր աշխատանքները կատարվել են որպես հոբբի՝ զվարճանալու և ցանցային տեխնոլոգիաների ոլորտում իմ գիտելիքներն ընդլայնելու նպատակով։ Կամաց-կամաց շաբաթական 1..4 ժամ այս տարվա սկզբից։
Հավելվածի օգտագործումը նախատեսված չէր: Նրանք. դա հաքերների գործիք ՉԷ:

Այս պահին աշխատում է բոլոր նախատեսված ֆունկցիոնալությունը։ Բոլոր աղբյուրները, լիովին պատրաստ հավաքման, տեղադրված է այստեղ. Կան նաև հավաքման հրահանգներ և այլն: Այս գրառման մեջ ես չեմ կրկնօրինակի github-ում տեղադրված տեղեկատվությունը: Ես ձեզ կասեմ միայն այն, ինչ անհրաժեշտ եմ համարում առանձին նկարագրել։

Իմ կարծիքը «ունիվերսալ գործիքի» և ESP32-ի ընտրության պատճառի մասին

Ես ճշմարտությունը չեմ պնդում. Յուրաքանչյուրն ունի իր սեփականը: Կփորձեմ արդարացնել «երկաթի» իմ ընտրությունը.

Առաջարկվում է հոդվածում Linux-ի (ի սկզբանե Raspberry Pi) + «ծայրամասային սարքերի» համակցման օգտագործման տարբերակը կարգավորիչի (STM32) + CC1110 (8051 միջուկ) և հնարավոր ամեն ինչ խցկելու պլանի (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) մեջ ինձ հարմար չէր թվում: Այնուամենայնիվ, այս նախագիծը Կարծես թե այն կմնա մասնավոր և փակ (flipper-zero github «Այս կազմակերպությունը չունի հանրային պահեստներ») և գնաց դեպի ոչ շատ տարածված սարքավորում:

Միգուցե ես սխալվում եմ, և ապագայում հեղինակները կներկայացնեն ծրագրաշարի սկզբնական կոդը հանրային տիրույթում: Բայց եթե ոչ, ապա ես չէի գնի այդպիսի երկաթի կտոր առանց կոդերի։

Իմ գործիքի պահանջները

Տուփը պետք է փոքր լինի (որքան փոքր, այնքան լավ):

Ահա թե ինչու:

  • Ներկառուցված մարտկոցը պետք չէ: Ավելի քան 100 մԱ հոսանքի դեպքում Wifi-ով աշխատելիս ներկառուցված մարտկոցը կա՛մ մեծ կլինի, կա՛մ երկար չի աշխատի: Հետեւաբար, թող «տուփը» սնուցվի ստանդարտ էներգաբանկով: Միևնույն է, ես միշտ գրպանումս/մեքենայում ունեմ power bank։
  • Գործիքներով Linux-ը պահեք «տուփի» մեջ, գրված է երկար տարիների ընթացքում բոլոր լեզուներով փոքր էկրանի և կառավարման կոճակների խղճուկ հավաքածուի առկայության դեպքում դա անիմաստ է: Արդյունքները կարելի է դիտել/մշակել նորմալ նոութբուքի վրա՝ ամբողջական ստեղնաշարով և էկրանով:
  • Բաղադրիչները պետք է լինեն մատչելի և լայնորեն հայտնի (հասանելի SDK, բազմաթիվ օրինակներ և փաստաթղթեր):

Արդյունքում, ինձ համար ընտրությունն ակնհայտ էր՝ ESP32։

Հոդվածում նշված բոլոր առաջադրանքների համար, որոնք ինձ դրդեցին քայլեր ձեռնարկել, ESP32-ի հնարավորությունները բավարար են: Թեև ամենաշատը ես ուզում եմ անել սա է.

  • Խաղացեք Bluetooth-ով:
  • Խաղացեք 433 մՀց տիրույթով ամենապարզ սարքաշարով (միայն ամպլիտուդային մոդուլյացիան, որը բավարար է գործնական կարիքների համար):

Fly in the քսուք ESP32-ում

  • SDK (IDF) ESP32-ը որոշ չափով անշնորհք է:
  • Ֆունկցիոնալության մի մասը (օրինակ, WiFi-ի կույտը) գալիս է առանց կոդերի՝ հավաքված ստատիկ գրադարանների տեսքով:
  • 5 ԳՀց տիրույթը չի ապահովվում, և կան որոշակի սահմանափակումներ և անշնորհքություն WiFi-ի հետ աշխատելիս:

Բայց գինը / չափը լիովին փոխհատուցում է այս թերությունները:

Ծրագրաշարի հիմնական ֆունկցիոնալությունը

Ես համառոտ նկարագրելու եմ ֆունկցիոնալությունը և իմ կարծիքը ...

Կառավարեք կարգավորումները և վերբեռնեք ֆայլերը SD-ից

Ամբողջ արտաքին հսկողությունը կատարվում է մենյուի առանձին տարրում գործարկված պարզ վեբ էջի միջոցով: ESP32-ը սկսվում է WiFi AP ռեժիմով և ցուցադրում է ֆիքսված IP հասցեով էջ:

Թեև ESP32 միջուկները բավականին արագ են, բայց, ինչպես ցույց են տվել փորձերը, ներկառուցված վեբ ծառայության միաժամանակյա աշխատանքը և, օրինակ, երթուղիչի ռեժիմը լավ չեն խառնվում: Հետևաբար, չկա դինամիկ կառավարում և մնացած բոլոր ռեժիմներում էջը հասանելի չէ։
Ավելին, դինամիկ հսկողությունը հետազոտական ​​նպատակների համար անհրաժեշտ չէ:

Beacon փաթեթների հետ աշխատելը

Ռեժիմները սովորական են և ոչ այնքան հետաքրքիր: Պատրաստված է «որովհետև դու կարող ես»: Ստուգման համար.
Օրինակներ կան պաշտոնական Espressif օրինակներում։

AP ցուցակի սկանավորման ռեժիմ:
Իրականում, ցանկացած սմարթֆոն կարող է դա անել:
Դե, այս ռեժիմում ԱԵԱ-ների ցանկը կպահպանվի:
Փարոս սպամեր:
ESP32-ը սկսվում է որպես AP՝ թաքնված SSID-ով և պատահական MAC-ով և սկսում է ուղարկել [beacon frame] նախապես ստեղծված SSID ցուցակում (ձեռքով ստեղծված կամ ավելի վաղ ստացված՝ AP ցուցակը սկանավորելու միջոցով)

WiFi sniffing ռեժիմ

Էսպրեսիֆի մշակողները կիրառական ծրագրային ապահովման համար ավելացրել են հնարավորություն՝ ստանալու «օդում թռչող» բոլոր WiFi փաթեթները՝ հետադարձ կապի գործառույթի միջոցով: Փաստորեն, ոչ բոլորը, քանի որ դուք կարող եք ռեժիմ սահմանել միայն մեկ ֆիքսված ալիքի համար:

Շատ խիստ ժամանակային սահմանափակումներ են սահմանվում հետադարձ կապի ֆունկցիայի կանչի մշակման համար: Եթե ​​պարզ վիճակագրության հավաքագրման ռեժիմի համար դա խնդիրներ չի առաջացնում, ապա PCAP ֆայլը SD քարտի վրա գրելու ռեժիմի համար ես ստիպված էի ջարդել՝ կազմակերպելով ձայնագրությունը հիշողության և սեմալիստների հերթի միջոցով: Հաշվի առնելով այն յուրահատկությունը, որ հետ կանչող պրոցեսը պտտվում է մի միջուկի վրա, իսկ պրոցեսը, որը գրում է SD-ին մեկ այլ միջուկում։

«Աղմկոտ օդով» որոշ փաթեթներ կորչում են (հերթում տեղ չկա, և դրանք դեն են նետվում), բայց երեկոյան բնակարանի բնորոշ «օդով» (5..7 ԱԵԱ տեսադաշտում), գրելով PCAP-ին: ժամանակ ունի ավարտելու առանց փաթեթի կորստի:

Բացի այդ, PCAP մոնիտորինգի և ձայնագրման համար կա ֆիլտրման ռեժիմ՝ հիմնված փաթեթների վերնագրերում MAC ցուցակի վրա:

Օրինակ, դուք կարող եք հետևել մարդու արտաքինին ակումբում/սրճարանում, նախքան նա նույնիսկ մուտք գործելը կամ հայտնվելը տեսադաշտում: Քչերն են անջատում WiFi-ը և ավտոմատ միացումը հայտնի ԱԵԱ-ներին: (Հիմա անջատում եմ...)

Wireshark-ում գրանցված երթևեկությունը դիտելը տեղեկատվական և հետաքրքիր է քարտեզները հասկանալու համար, ամեն ինչ աշխատում է:

Գործողության եղանակը Deauth փաթեթներով

Լռելյայնորեն, այս փաթեթներն ուղարկելն արգելված է libnet80211.a գրադարանում, որը գալիս է առանց աղբյուրների: Բայց դա հեշտ է կանգնեցնել՝ շտկելով մի քանի խայծ։ Սկզբում կասկածում էի, թե արժե՞ ներբեռնել կարկատել։ Բայց տարբեր վայրերում շրջելուց հետո, երբ միացված է [authentication frame] սկանավորման ռեժիմը, ես մտածեցի. «Ի՞նչ դժոխք»: Ավելին, esp8266-ում այս փաթեթների ուղարկումը փակված չէ և github-ում հավաքներ կան esp8266-ի տակ։

Շատ տեղերում (չեմ ասի, թե որտեղ) անցանկալի AP-ի ճնշումն օգտագործվում է այս մեթոդով։ Եվ դա «խուլիգաններ» չեն…

Եվ ես դեռ զարմացած էի, որ դա իմ հեռախոսից ինտերնետի բաշխումն էր, որը տեղ-տեղ չէր աշխատում…

Նման փաթեթների թվի և RSSI-ի հետևման ռեժիմը շատ օգտակար է հասկանալու համար, թե «որտեղ ձախ ԱԵԱ-ները չեն սիրում»:

երթուղիչի ռեժիմ

Այս հատկանիշը, հավանաբար, ամենահետաքրքիրն է ուսումնասիրելու համար:

ESP32-ն աջակցում է միաժամանակյա աշխատանքին STA + SoftAP ռեժիմում: Հետեւաբար, դրա վրա հնարավոր է ներդնել դասական NAT երթուղիչ:

Ցանցային կույտին աջակցելու համար Espressif-ն օգտագործում է lwip գրադարանի (գործնականում անփոփոխ) պատառաքաղը:

Բայց, լռելյայնորեն, ստանդարտ ժողովում, esp-lwip գրադարանում, netif միջերեսների «ap» (SoftAP) և «st» (STA) միջև վերահասցեավորում չկա:

Իհարկե, դուք կարող եք դա անել առանց NAT-ի, սակայն խնդիր կա երկու կամ ավելի STA-ների միաժամանակյա միացման «ap» ինտերֆեյսին և IP հասցեների համաժամացման «st» ցանցային ինտերֆեյսից «ap»: Այսպիսով, բարդությունը չարժե, և դա ավելի հեշտ է NAT-ի միջոցով:

Ավելին, կա marting-ger-ից պատառաքաղ esp-lwip, որն ավելացնում է NAT-ի պարզ իրականացում IP4-ի համար:

Թեև իմ ձեռքերը քոր առաջացրին, որ դա նորից կրկնեմ զուտ կոսմետիկորեն (իմ կարծիքով, դա ավելի հեշտ էր առանց պատառաքաղի նախագծի, բայց LWIP-ի միջոցովՀՈՒԿ build-սահմանված գործառույթներ), բայց ծուլությունը հաղթեց, և marting-ger տարբերակը օգտագործվում է այնպես, ինչպես կա:

Երթուղիչի ռեժիմում դիտվում է մուտքային և ելքային IP4 տրաֆիկը:

Մասնավորապես, դրանից հանվում է էկրանին ցուցադրելու և ֆայլում վիճակագրություն հավաքելու համար.

  • Սարքի անունը, որը միացել է SoftAP ESP32-ին (DHCP փաթեթներ)
  • URL DNS հարցումներից (UDP պորտ 53) SoftAP ESP32-ին միացված սարքից:

Բացի այդ, դուք կարող եք միացնել երթևեկի գրանցումը PCAP ֆայլում:

Այս ռեժիմը շատ օգտակար է, օրինակ՝ հասկանալու համար, թե, օրինակ, ինչ է ուղարկում ձեր հեռախոսը ցանց և ուր է այն գնում։

Դուք կարող եք մտածել այս ռեժիմն օգտագործելու այլ եղանակների մասին՝ հաշվի առնելով ցանցային ինտերֆեյսի մակարդակով SoftAP ESP32 մուտքային և ելքային տրաֆիկը ամբողջությամբ ծրագրավորելու հնարավորությունը՝ Ehernet վերնագիր (destMAC[6]+srcMAC[6]+տիպ[2]: ) + օգտակար բեռնվածություն (IP4, IP6, DCHP և այլն տեսակը):

Սկզբունքորեն, ESP32-ը բավականին լավ է հաղթահարում WiFi->WiFi երթուղիչի ֆունկցիան՝ առանց մեծ ուշացման անցնելով իր միջով կանոնավոր երթևեկությունը: Սուբյեկտիվորեն ESP32-ին երթուղիչի միջոցով միացված հեռախոսի հետաձգումները նկատելի չեն:

Ցավոք, Espressif API-ում SoftAP EPS32-ին միացված MAC-ով զտիչ դնելու միջոց չկա: Փոխարենը, առաջարկվում է «ցտեսություն» (esp_wifi_deauth_sta) ասել արդեն միացված STA-ներին, որոնք «չպահանջվում են»:

Միացված STA-ների համար MAC-ով զտումը պետք է կատարվեր esp_wifi_deauth_sta() հասցեին զանգի միջոցով:

Վերջում

Չնայած ESP32-ի հետ աշխատելու շրջանակներում ես ոչ մի նոր բան չեմ մտածել, միգուցե ինչ-որ մեկին կհետաքրքրի արդյունքը (աղբյուրներ):

Նշեմ, որ կոդը գրվել է բացառապես կրթական նպատակներով։ «Հակելու» և այլնի համար հատուկ պատրաստված էր ոչ այնքան հարմար։

Ես տպագիր տպատախտակ չեմ պատրաստել, քանի որ պատրաստի շարֆերը մետաղալարով զոդելու համար պահանջվել է 1.5-2 ժամ։

Եվ եթե դա անում եք, ապա դուք պետք է հավաքեք այն ոչ թե պատրաստի տախտակներից, այլ առանձին բաղադրիչներից: Այնուհետեւ չափերը նույնիսկ ավելի փոքր կլինեն:

Source: www.habr.com

Добавить комментарий