Як я выкарыстоўваю AirDrop замест Тиндера

Як я выкарыстоўваю AirDrop замест Тиндера

У прыладах Apple ёсць выдатная функцыя Airdrop – яна зроблена для перасылкі дадзеных паміж прыладамі. Пры гэтым ніякай налады і папярэдняга спалучэння прылад не патрабуецца, усё працуе са скрынкі ў два кліку. Для перадачы дадзеных выкарыстоўваецца надбудова над Wi-Fi, і таму дадзеныя перадаюцца з вялізнымі хуткасцямі. Пры гэтым выкарыстоўваючы некаторыя трукі, можна не проста перасылаць файлы, але і даведацца тэлефонны нумар чалавека, які знаходзіцца з табой у адным вагоне метро.

Апошні год я выкарыстоўваю гэтую функцыю для цікавых знаёмстваў па шляху на працу, у грамадскім транспарце, у грамадскага харчавання. У сярэднім за дзень у мяне атрымліваецца заводзіць некалькі новых знаёмстваў, і часам я выходжу з мятро ў кампаніі новага чалавека.

Пад катам я раскажу за ўсю хурму.

Як працуе AirDrop

Як я выкарыстоўваю AirDrop замест Тиндера

AirDrop гэта пратакол для перадачы файлаў усярэдзіне аднарангавай сеткі. Ён можа працаваць як па звычайнай лакальнай сетцы, так і па паветры паміж любымі прыладамі Apple. Мы будзем разбіраць апошні выпадак, калі дзве прылады не падлучаныя ў агульную сетку, а проста знаходзяцца побач, напрыклад два чалавекі з тэлефонамі едуць у вагоне метро і не падлучаныя да агульнага Wi-Fi.

Як я выкарыстоўваю AirDrop замест Тиндера
Першы этап перадачы праз AirDrop – рассыланне BLE пакета

Каб ініцыяваць перадачу дадзеных праз AirDrop, тэлефон ініцыятара пасылае шырокавяшчальны BLE-пакет, у якім утрымоўваецца захешаваная інфармацыя аб iCloud акаўнце і тэлефонным нумары ўладальніка прылад ініцыятара, з прапановай усталяваць падлучэнне праз пратакол AWDL (Apple Wireless Direct Link), нешта накшталт Fi Direct са свету Android. Структура гэтага BLE-пакета вельмі цікавая, мы разбяром яе далей.

На баку атрымальніка AirDrop можа быць у трох станах:

  • Выключаны - не будзе выяўляцца наогул
  • Толькі для кантактаў - прымаць файлы толькі ад кантактаў з запісной кніжкі. Пры гэтым кантактам лічыцца нумар тэлефона ці email, да якога прывязаны icloud акаўнт. Тут працуе тая ж логіка прывязкі акаўнтаў, што і з месэнджэрам iMessages.
  • для ўсіх - тэлефон будзе выяўляцца для ўсіх

Як я выкарыстоўваю AirDrop замест Тиндера
Налады прыватнасці AirDrop. Стан па змаўчанні ўсталяваны "Для кантактаў".

У залежнасці ад налад прыватнасці, тэлефон альбо працягне ўсталёўку злучэння праз AWDL, альбо проста праігнаруе BLE-пакет. Калі для AirDrop усталявана налада "для ўсіх", то на наступным кроку прылады злучацца сябар з сябрам праз AWDL, паднімуць паміж сабой IPv6-сетка, усярэдзіне якой AirDrop будзе працаваць як звычайны прыкладны пратакол з дапамогай mDNS праз стандартны пратакол IP.

Як я выкарыстоўваю AirDrop замест Тиндера

Для эксперыментаў вы можаце паглядзець за тым як працуе AWDL на макбуку. Увесь абмен па гэтым пратаколе адбываецца праз інтэрфейс awdl0, Які можна лёгка зніфаць з дапамогай Wireshark або tcpdump.

На дадзеным этапе мы ведаем тры сутнасці:

Bluetooth LowEnergy (BLE) пакет - Гэты пакет змяшчае дадзеныя, на падставе якіх тэлефон вырашае, ці ёсць ініцыятар у яго спісе кантактаў ці не.
Apple Wireless Direct Link (AWDL) - Фірменная замена Wi-Fi Direct ад Apple, уключаецца калі зносіны па BLE прайшло паспяхова.
Выкідкі дэсанта - прыкладны пратакол, які працуе ўнутры звычайнай IP-сеткі з выкарыстаннем mDNS, HTTP і г.д. Можа працаваць усярэдзіне любой Ethernet-сеткі.

Структура BLE-пакета

Можа здацца, што гэты BLE-пакет пралятае толькі адзін раз ад ініцыятара да атрымальніка, а далей абмен адбываецца толькі па AWDL. У рэчаіснасці злучэнне AWDL жыве вельмі мала, усяго некалькі хвілін ці менш. Так што ў выпадку, калі атрымальнік файла захоча вам адказаць, ён гэтак жа выступіць ініцыятарам і пашле BLE-пакет.

Як тэлефон на прымаючым баку разумее, ці ёсць нумар/email ініцыятара ў яго спісе кантактаў ці не? Я вельмі здзівіўся, калі пазнаў адказ: ініцыятар шле свой нумар і email у выглядзе хеша sha256, але не цалкам, а толькі першыя 3 байта.

Як я выкарыстоўваю AirDrop замест Тиндера
Структура BLE-пакета ад ініцыятара AirDrop. Па хэшах ад тэлефоннага нумара і email адказчык разумее, ці ёсць ініцыятар у яго спісе кантактаў.

Напрыклад, калі ваш Apple-акаўнт (ён жа iCloud, ён жа iMessages) прывязаны да нумара +79251234567, хэш ад яго будзе лічыцца так:

echo -n "+79251234567" | shasum -a 256
07de58621e5d274f5844b6663a918a94cfd0502222ec2adee0ae1aed148def36

І ў выніку ў BLE-пакеце паляціць значэнне 07de58 для тэлефоннага нумара. Гэтага здаецца мала, але часта гэтых трох байт дастаткова, каб даведацца рэальны нумар тэлефона.

Важна таксама памятаць, што настройка прыватнасці AirDrop не ўплывае на дадзеныя ў BLE-пакеце. Хэш ад тэлефоннага нумара будзе змяшчацца ў ім, нават калі ўстаноўлена настройка "Для ўсіх". Таксама BLE-пакет з хэшам тэлефоннага нумара дасылаецца ў выпадку адкрыцця акна Share (Падзяліцца) і пры ўводзе пароля да Wi-Fi сеткі.

Падрабязны разбор структуры BLE-пакетаў і магчымых нападаў на яго чытайце ў даследаванні Apple Bleee і руская пераклад на Хабры.

У даследаванні Apple Bleee апублікаваны гатовыя скрыпты на python для аўтаматызацыі аналізу дадзеных у BLE-пакетах. Я вельмі рэкамендую вывучыць даследаванне і паспрабаваць праграмы, там шмат чаго цікавага.

AWDL (Apple Wireless Direct Link)

AWDL – гэта такая прапрыетарная надбудова Apple над звычайным Wi-Fi, якая рэалізуе нешта накшталт Wi-Fi Direct. Я да канца не ведаю як яна працуе, там адмысловы спосаб анансавання і ўзгадненні каналаў, і працуе гэта толькі на прапрыетарных драйверах Apple. Гэта значыць толькі макбукі/айфоны могуць злучацца праз AWDL.

Сумныя ўладальнікі тэлефонаў Android пакуль яшчэ толькі мараць аб нармальна працуе функцыі Wi-Fi Direct.

Як я выкарыстоўваю AirDrop замест Тиндера

Але нядаўна хлопцы з seemoo-lab напісалі цалкам адкрытую рэалізацыю AWDL і назвалі яе Open Wireless Link (OWL). Для запуску OWL, адаптар Wi-Fi павінен падтрымліваць маніторны рэжым і ін'екцыі пакетаў, таму запускаецца не на кожным жалезе. На сайце ёсць прыклады наладкі на raspberry pi. Працуе гэта істотна горш арыгінальнага AWDL, напрыклад час усталёўкі падлучэння расцягваецца на ~10 секунд замест пары секунд у арыгінала, але працуе.

Як я выкарыстоўваю AirDrop замест Тиндера

Таксама гэтыя хлопцы напісалі з нуля рэалізацыю пратакола AirDrop на пітоне, называецца OpenDrop. Яго можна выкарыстоўваць як у звязку з OWL, для запуску AirDrop на лінуксе так і з арыгінальным AWDL на macOS.

Як падкочваць праз AirDrop

Як я выкарыстоўваю AirDrop замест Тиндера
Тыповая сітуацыя з падкатваннем праз AirDrop

Хопіць сумнай тэорыі, сітавіна прыступаць да практыкі. Такім чынам ты ўзброіўся ўсім неабходным абсталяваннем і готаў высоўвацца падкочваць шары з дапамогай высокіх тэхналогій.

Для пачатку трэба запомніць асноўныя моманты:

  • AirDrop спрацуе толькі калі тэлефон разблакаваны - лепш за ўсё, калі мэта бесперапынна глядзіць у тэлефон. Часцей за ўсё гэта адбываецца ў месцах, дзе сумна, напрыклад, у метро.
  • Патрэбен час - Як правіла, станоўчая канверсія адбываецца на 3-5 адпраўленай малюнку, таму трэба хаця б 5 хвілін спакойнага знаходжання на адным месцы. Станоўчай канверсіі я лічу момант, калі вы дамовіліся праз AirDrop працягнуць зносіны ў мэсэнджэры. Гэта складана рэалізаваць на хаду, таму што не адразу зразумела, хто прыняў тваёй пэйлаад, і хутчэй за ўсё вы размінецеся раней, чым зможаце аб нечым дамовіцца.
  • Персаналізаваны крэатыў працуе лепш - я заву пейлоадом той медыякантэнт, які ты адпраўляеш праз AirDrop. Проста карцінка з мемам, хутчэй за ўсё, ні да чаго не прывядзе, кантэнт павінен быць рэлевантным сітуацыі і мець зразумелы call to action.

Спосаб класічны - толькі тэлефон

Падыходзіць усім у каго ёсць айфон, не патрабуе асаблівых навыкаў акрамя сацыяльных. Пераводзім AirDrop у рэжым Everyone і спускаемся ў метро. У звычайны дзень (да самаізаляцыі) у вагоне маскоўскага метро я назіраў прыкладна такую ​​карціну:

Як я выкарыстоўваю AirDrop замест Тиндера
List of targets

Як відаць, амаль усе тэлефоны броадкасцяць імя ўладальніка, па якім мы лёгка можам вызначыць яго падлогу і падрыхтаваць адпаведны пейлаад.

Пейлаад

Як я пісаў вышэй, унікальны пэйлаад працуе лепш. У ідэале карцінка павінна звяртацца да ўладальніцы па імені. Раней мне даводзілася ляпіць крэатыў з дапамогай графічнага рэдактара ў дадатку «нататкі» і нейкага агрызка мабільнага фоташопа. У выніку, да моманту пакуль патрэбная карцінка была адмаляваная, ужо трэба было выходзіць з вагона.

Мая сяброўка Аня koteeq, спецыяльна па маёй просьбе, напісала Тэлеграм-бота, які генеруе патрэбныя карцінкі з подпісам на лета: @AirTrollBot. Дзякуй ёй вялікі за тое, што я зараз магу падкочваць шары нашмат тэхналагічна, чым раней.

Досыць адправіць робату радок з тэкстам, і ён згенеруе яе ў выглядзе малюначка сапраўды прыдатнай па суадносінах бакоў для прэв'ю ў акне AirDrop. Можна абраць персанажа на малюнку націскам кнопак. Таксама апцыянальна можна ўключыць даданне вашага Тэлеграм-лагіна на карцінку ў куце.

Як я выкарыстоўваю AirDrop замест Тиндера
Payload generator

Самы тлушч быў у тым, што карцінка паказвалася адразу на экране ахвяры без якіх-небудзь дзеянняў. Не трэба нават было націскаць "прыняць". Можна было бачыць імгненную рэакцыю на твары ад загрузкі пэйлааду. Нажаль, з версіі iOS 13 малюначкі ад незнаёмых кантактаў больш не паказваюцца на экране. Вось, як гэта выглядала раней:

Як я выкарыстоўваю AirDrop замест Тиндера
Payload delivered on iOS ≤12

Цяпер замест прэв'ю паказваецца толькі імя прылады адпраўніка. Таму адзіны спосаб звярнуцца да ахвяры з iOS ≥13 па імені, гэта задаць яго ў наладах вашага прылады, напрыклад назваць тэлефон "Юля, прывітанне". Hint: у назве прылады можна выкарыстоўваць эмоджы. Вядома такі спосаб не настолькі яркі, як з малюначкам, але моцна падвышае шанец націску кнопкі «прыняць».

Далейшае апісанне дзеянняў выходзіць за рамкі тэхнічнага артыкула і залежыць толькі ад вашай фантазіі, імправізацыі і гумару. Магу сказаць толькі, што тыя, хто ўступаюць у гэтую гульню і пачынаюць адказваць вам карцінкамі або пасылаць нататкі, як правіла вельмі вясёлыя, адкрытыя і цікавыя людзі. Тыя, хто паглядзеўшы карцінку проста не адказваюць, ці таго горш, проста адхіляюць паведамленне, звычайна сумныя снобы і ханжы. Таксама нярэдка гуляе ролю фактар ​​страху: далікатныя палахлівыя людзі баяцца ўзаемадзейнічаць з такім нахабным ананімным незнаёмцам.

Аўтаматычная дыкпік-машына

Калі табе лянота генераваць і рассылаць пейлоады ўручную, і ты жадаеш аўтаматызаваць працэс, можна вырабіць аўтаматычную дикпик-машыну, якая ў фоне будзе рассылаць карцінкі па AirDrop усім, хто знаходзіцца ў радыусе дзеяння. У якасці апаратнай платформы будзем выкарыстоўваць raspberry pi zero, але падыдзе любы комп з лінуксам, галоўнае каб Wi-Fi картка падтрымлівала маніторны рэжым і ін'екцыі пакетаў.

Як я выкарыстоўваю AirDrop замест Тиндера
Рассылальнік дзікпікаў па Airdrop на базе raspberry pi zero w + батарэйны шылд UPS Lite

Ёсць праграмы AirDrop флудэраў для Jailbreak айфонаў, яны працуюць стабільней, чым адкрытыя варыянты на raspberry pi

Настройка OWL на raspberry pi падрабязна апісана на сайце праекта, але я аддаю перавагу выкарыстоўваць зборку Kali Linux для Raspberry Pi Zero, таму што ў ёй ужо ўсталяваныя патчы nexmon, для актывацыі маніторнага рэжыму Wi-Fi на rpi0.

Важна памятаць, што Airdrop (дакладней AWDL) у пацыентаў актывуецца толькі пасля атрымання BLE-пакета. Таму мы павінны яго дасылаць з інтэрвалам у некалькі секунд. Гэта можна зрабіць з дапамогай утыліты py-bluetooth-utils. Выкарыстоўваючы функцыю start_le_advertising(), я дасылаю радок дадзеных з прыкладаў apple bleee: 000000000000000001123412341234123400.

Пасля таго, як вы атрымалі які працуе OWL-дэман, далей можна запускаць мой форк opendrop. У рэпазітары ляжыць скрыпт flooder.py, які рассылае ўсім карцінку kak_dela.jpeg.

Па маіх назіраннях raspberry pi zero w працуе нестабільна ў маніторным рэжыме. Прыкладна праз 20 хвілін актыўнай працы флудэра, вылятае падсістэма Wi-Fi. Праблема апісана ў аўтара pwnagotchi, І меркавана выклікана перагрэвам. Трэба прадугледзець watchdog ці выкарыстоўваць больш стабільнае жалеза

Рэжым маньячэла - я ведаю твой нумар

Калі ты хочаш паказаць сябе неадэкватным маньякам і назаўжды адбіць жаданне працягваць з табой зносіны, можна паспрабаваць даведацца нумар тэлефона чалавека, які знаходзіцца побач.

Як мы ўжо пазналі раней, у BLE-пакетах, якія пасылае ініцыятар, утрымоўваюцца першыя тры байта ад sha256 тэлефоннага нумара. Гэты хэш можна злавіць у момант, калі ахвяра націсне кнопку «падзяліцца» і запусціць сканаванне airdrop прылад або топне ў поле ўводу Wi-Fi пароля ад новай сеткі (такім чынам apple шукае сяброў у радыусе дзеяння, у якіх можна запытаць пароль ад сеткі).

Табе спатрэбіцца нейкім чынам трыгернуць пасылку хеша ад ахвяры, і злавіць яго. Я выкарыстоўваю ўтыліты з рэпазітара Apple Bleee. Так як Bluetooth MAC-адрасы прылад рандомныя і ўвесь час змяняюцца, табе прыйдзецца знайсці іншы спосаб вызначыць патрэбную прыладу ў гэтым спісе. Задача спрашчаецца тым, што iOS транслюе бягучы стан тэлефона накшталт: выключаны экран, уключаны экран, lock screen, разблакаваны і г.д. Таму проста назіраючы за дзеяннямі ахвяры можна супаставіць бягучы стан прылады з прыладай у табліцы. Прасцей за ўсё злавіць момант, калі карыстач дастаў тэлефон з кішэні, уключыў экран і разблакаваў тэлефон пальцам ці тварам. Усё гэта будзе бачна ў сніферы.

Як я выкарыстоўваю AirDrop замест Тиндера
значок Х азначае, што злоўлены пакет з хэшамі тэлефона.

Іх парсер часам ламаецца, але часцей за ўсё працуе. Я не буду цалкам пераказваць сутнасць уразлівасці, бо гэта падрабязна разабрана аўтарамі Apple Blee, апішу толькі свой досвед. Скажу толькі, што я выкарыстоўваю USB Bluetooth-адаптар на чыпе CSR 8510, бо ў мяне ён працуе моцна стабільней, чым убудаваны ў макбук Bluetooth-адаптар, пракінуты ў віртуальную машыну.

Такім чынам мы злавілі хэш ад тэлефона ахвяры і атрымалі запаветныя тры байта ад хеша нумара тэлефона.

Як я выкарыстоўваю AirDrop замест Тиндера
Перахоплены BLE-пакет з хэшам нумара тэлефона, з дапамогай утыліты read_ble_state.py

Мы ведаем, што ў Расіі ўсе мабільныя нумары пачынаюцца з кода 79 і, хутчэй за ўсё, у нашай ахвяры тэлефон мае такі ж код. Атрымліваецца, мы маем дыяпазон нумароў ад 79000000000 да 79999999999, каля мільярда нумароў.

Каб звузіць дыяпазон, бяром толькі коды, рэальна зарэгістраваныя за якім-небудзь аператарам і выкідваем астатнія. У выніку дыяпазон становіцца ў два разы меншым, каля паўмільярда нумароў.

Далей які генеруецца sha256 ад усіх нумароў і захоўваем ад кожнага хеша толькі першыя 3 байта. Заносім гэты спіс у Sqlite базу, для паскарэння пошуку які будуецца азначнік.

Так выглядаюць дадзеныя ў базе:

Як я выкарыстоўваю AirDrop замест Тиндера
Усе расійскія тэлефонныя нумары і першыя тры байта хеша

Далей, маючы хэш ахвяры, мы можам пашукаць усе супадзенні ў базе. Звычайна на адзін хэш выходзіць 15-30 супадзенняў.

Як я выкарыстоўваю AirDrop замест Тиндера
Усе нумары, якія супалі з хешам ахвяры

Відавочна, што не ўсе гэтыя нумары рэальна выкарыстоўваюцца. Мы можам адсекчы лішнія з дапамогай HLR-запыту ці нябачнай SMS. З 30 нумароў у сетцы аказалася 5.

Як я выкарыстоўваю AirDrop замест Тиндера
Вынік выканання HLR-запыту. Зялёным вылучаны нумары ў сетцы.

Я б мог працягваць прасейваць нумары, напрыклад, дадаць іх усё ў Telegram/Whatsapp і паглядзець аватаркі, праверыць праз базы накшталт Getcontact і гэтак далей. Але прасцей аказалася проста патэлефанаваць па чарзе на ўсе пяць нумароў і глядзець калі ў ахвяры зазвоніць тэлефон.

Як я выкарыстоўваю AirDrop замест Тиндера
Target located

Усе

  • Флудэр на raspberry pi вельмі нестабільны, трэба паспрабаваць іншыя аднаплатнікі.
  • Натыўны флудэр для iOS будзе нашмат лепш, але я не змог знайсці які працуе на iOS 12-13 нават з джэйлбрэйкам.
  • Скрыпт flooder.py вельмі тупы. Напэўна, ён бы мог генераваць імянную карцінку, беручы імя з імя прылады атрымальніка і выразаючы слова iPhone.
  • Спосаб вызначэння нумара тэлефона можна аптымізаваць, правяраючы толькі факт прывязкі нумара да iMessage. Хутчэй за ўсё, гэта дасць блізкае да 100% трапленне.

Заключэнне

Гэта ідэальная забаўка для метро. Ёсць ваў-эфект, цікаўным людзям такое цікава. Шмат імправізацыі, бывалі вельмі кур'ёзныя выпадкі. Аказваецца многія людзі гатовы падыгрываць і нават адмяняць свае планы каб выйсці на тваёй станцыі метро і падняцца выпіць кавы. За год я пазнаёміўся з кучай народа і з некаторымі працягваю размаўляць.

Часам я адключаю адлюстраванне Тэлеграм-лагіна і забаўляюся вось так.

Як я выкарыстоўваю AirDrop замест Тиндера

Як я выкарыстоўваю AirDrop замест Тиндера

Крыніца: habr.com

Дадаць каментар