Безкоштовний метод взлому Wi-Fi в літаку, як обійти платні послуги

09.10.2024 (Оновлено 26.05.2026) 2 хвилин Автор: Lady Liberty

Дізнайтесь про унікальний та хитрий спосіб отримати безкоштовний доступ до Wi-Fi в літаку, використовуючи програму для обходу платного підключення через аккаунт програм лояльності. Прочитайте детальний гайд із прикладами та кодом.

  • Дисклеймер: Вся інформація, представлена в цьому матеріалі, призначена виключно для ознайомлення. Матеріали не мають на меті порушення прав чи захисту незаконної діяльності. Усі методи та інструменти, що згадуються, призначені виключно для освітніх і дослідницьких цілей.

Розпочнено

Літак набрав висоту близько трьох кілометрів, і пасажир витягнув свій ноутбук із надією скористатися Інтернетом або трохи попрацювати. Після підключення до Wi-Fi літака, відкрилось вікно авторизації, яке вимагало введення даних кредитної картки. Під час пошуків карти, що виявилась у паспорті, він помітив, що система пропонує безкоштовний вхід до облікового запису програми авіамиль, незважаючи на те, що оплата ще не була проведена. Це, ймовірно, вказувало на вразливість у файрволлі.

Зацікавлений ситуацією, пасажир увійшов до свого акаунту JetStreamers Diamond Altitude і побачив кнопку редагування профілю. Спочатку вона здавалася звичайною — зі стандартними параметрами редагування і можливістю змінити ім’я та адресу. Але детальніший аналіз показав, що через цю кнопку можна отримати доступ до Інтернету, використовуючи обліковий запис програми лояльності. Цей процес, хоч і був досить повільним та нелогічним, все ж міг дати позитивний результат.

Для реалізації цього задуму потрібно було створити кілька програмних прототипів. Спочатку розглядалась можливість використання мови програмування Go, але остаточний вибір упав на Python, що дозволило назвати інструмент PySkyWiFi.

Прототип 1: месенджер

Перший прототип передбачає можливість використання поля імені в обліковому записі програми авіаміль як своєрідний тунель для обміну миттєвими повідомленнями. Суть ідеї полягає в тому, що після входу в обліковий запис можна змінити своє ім’я, і будь-хто, хто також увійде в цей обліковий запис, зможе побачити нове ім’я. Таким чином, при кожній зміні імені можна передавати короткі повідомлення. Наприклад, змінити ім’я на “Привіт, як справи”, отримати відповідь “Добре, а в тебе” через зміну імені співрозмовника.

Ця система, хоча і здається незручною, може бути першим кроком до подальшого розвитку методу для обходу файрволла літакового Wi-Fi. Використовуючи цей примітивний метод, можна обмінюватися повідомленнями з іншими людьми без потреби платити за доступ до Інтернету.

Експерименти проводилися на двох ноутбуках, один з яких був старим, і після входу в обліковий запис авіаміль вдалося пересилати повідомлення через зміну імені. Хоча процес не дуже зручний, він все ж довів можливість обходу певних обмежень мережі.

Через незручність ручного процесу, було розроблено інструмент командного рядка для автоматизації обміну повідомленнями через поле імені облікового запису. Цей інструмент дозволяє користувачеві вводити повідомлення, після чого він автоматично виконує вхід в обліковий запис програми авіаміль через веб-сайт, використовуючи заздалегідь збережені облікові дані. Далі повідомлення вставляється в поле імені.

Інструмент періодично перевіряє, чи змінилось ім’я в обліковому записі, що свідчить про отримане повідомлення від співрозмовника. Після отримання нового значення інструмент виводить його на екран та пропонує користувачеві ввести нову відповідь, яка знову буде відправлена через зміну імені. Такий підхід автоматизує весь процес, перетворюючи його на більш керований та зручний спосіб спілкування, хоча і за допомогою досить примітивного методу.

Завдяки цьому інструменту можна обмінюватися повідомленнями через термінал із кимось на землі, обходячи необхідність оплати за Wi-Fi. Обидві сторони не будуть турбуватися про те, що повідомлення передаються через обліковий запис програми лояльності SkyVenture Premium Gold Rewards.

Хоча потрібно знайти співрозмовника для спілкування, інструмент вже демонструє гарний потенціал. Важливо зазначити, що надсилання автоматизованих даних через обліковий запис може викликати проблеми, тому в майбутньому варто бути обережним із подібними діями. Переконатися в роботі PySkyWiFi допомогли успішні експерименти, де ім’я в акаунті програми авіаміль було змінене багато разів без обмежень.

Після цього залишалося лише завершити решту коду, використовуючи інші сервіси на зразок GitHub Gist, які дозволяли відправляти дані за аналогічним принципом. Це спрощувало роботу і прискорювало процеси, роблячи PySkyWiFi ще ефективнішим для обміну даними через облікові записи програм лояльності, таких як Star Power UltimateBlastOff.

Прототип 2: новини, котирування акцій та рахунок футбольних матчів

Тунель, створений через обліковий запис авіаміль, може використовуватися не лише для простого обміну повідомленнями. Для наступного прототипу було розроблено програму, яка працює на комп’ютері, розташованому на землі або в хмарі, і автоматично передає інформацію з реального світу пасажиру літака через обліковий запис. Ця програма може бути налаштована для передачі таких даних, як свіжі котирування акцій або результати футбольних матчів під час польоту.

Для реалізації цього завдання був створений демон, який постійно моніторить поле імені в обліковому записі. Коли він отримує новий запит, демон звертається до відповідного API, витягує необхідну інформацію (наприклад, STOCKPRICE: APPL або SCORE: MANUNITED) і відправляє її назад через обліковий запис. Цей процес працював ідеально, що дозволяє комбінувати перший прототип для обміну миттєвими повідомленнями з другим прототипом для відстеження важливих даних.

Найголовніше — це PySkyWiFi

Інструмент, який значно спрощує роботу з мережею, використовуючи обліковий запис програми авіаміль як тунель для HTTP-запитів і відповідей. PySkyWiFi — це спрощена версія протоколу TCP/IP, що дозволяє відправляти запити через обліковий запис та отримувати відповіді. Це може забезпечити доступ до Інтернету під час польоту, хоча швидкість буде обмежена до кількох сотень байтів за секунду.

Застереження: цей метод не рекомендується використовувати у реальних умовах, оскільки це може порушувати правила компанії і створити юридичні проблеми.

Нижче пояснюемо, як це працює (вихідний код).

Як працює PySkyWiFi

PySkyWiFi складається з двох компонентів:

  • Небесний проксі – проксі, запущений на ноутбуці в літаку

  • Наземний демон — демон, запущений на наземному комп’ютері з підключенням до Інтернету або у хмарі.

Ось спрощена діаграма:

Підготовка до використання PySkyWiFi починається ще до відправлення з дому. Спочатку на наземному комп’ютері або сервері потрібно запустити демон. Після цього, коли вже опинитеся в літаку і підключитеся до Wi-Fi, запустіть на ноутбуці небесний проксі-сервер. Тепер ретранслятор PySkyWiFi готовий до роботи.

Для відправлення HTTP-запитів до небесного проксі використовують інструменти на зразок curl. Запит відправляється через локальний проксі (наприклад, localhost:1234/) із заголовком X-PySkyWiFi, де вказується URL-адреса веб-сайту для запиту.

Наприклад:

curl localhost:1234 -H "X-PySkyWiFi: example.com"

Наземний демон отримує заголовок X-PySkyWiFi, обробляє його і перенаправляє запит на цільовий веб-сайт. Весь інший вміст запиту залишається без змін.

Після цього потрібно почекати кілька хвилин, поки не надійде HTTP-відповідь. Якщо все пройде успішно, ви отримаєте відповідь від веб-сайту, ніби відправили запит через звичайний Інтернет. Головна перевага цього методу — це безкоштовний доступ до мережі. Однак, врешті-решт, ймовірно, доведеться оплатити Wi-Fi, після того як цікавість буде задоволена, бо не варто витрачати занадто багато часу на подібні експерименти.

Покроковий розбір

Ось, як все влаштовано всередині:

  1. Небесний проксі отримує HTTP-запит із дзвінка curl. Він розбиває запит на фрагменти, тому що весь запит занадто великий для передачі через обліковий запис програми авіаміль за раз.

  2. Небесний проксі записує кожен фрагмент по черзі в полі імені облікового запису.

  3. Наземний демон опитує обліковий запис. Коли він виявляє, що поле імені змінилося і в ньому новий фрагмент, він зчитує цей фрагмент і передає відправнику підтвердження, щоб той знав, що можна передавати наступний фрагмент. Одержувач об’єднує фрагменти та відтворює вихідний HTTP-запит.

  4. Після отримання та відтворення наземним демоном повного HTTP-запиту він надсилає запит через Інтернет.

  5. Наземний демон отримує HTTP-відповідь.

  6. Наземний демон відправляє HTTP-відповідь небесному проксі, виконуючи описаний вище процес у зворотному порядку. Цього разу наземний демон поділяє на фрагменти HTTP-відповідь і по черзі відправляє ці фрагменти в поле імені облікового запису (насправді, щоб спростити протокол, він записує ці фрагменти відповіді в поле імені другого облікового запису).

  7. Небесний проксі опитує другий обліковий запис. Він зчитує кожен фрагмент і склеює їх назад, щоб відтворити відповідь HTTP.

  8. Небесний проксі повертає HTTP-відповідь вихідному дзвінку curl. При цьому curl працює з абсолютно звичайним HTTP-відповіддю, лише трохи повільним. Він і поняття не має про всю ту нісенітницю, що зараз сталася.

Небесний проксі та наземний демон досить прості: вони надсилають HTTP-запити та парсят HTTP-відповіді. Магія полягає в тому, як вони протискують ці запити та відповіді через обліковий запис програми авіаміль. Давайте розглянемо це докладніше.

Протискування HTTP-запитів через обліковий запис

Логіка комунікацій PySkyWiFi побудована на двох основних шарах: транспортному та мережевому.

Транспортний шар

Завдання транспортного шару полягає у тому, щоб організувати обмін даними між клієнтами. Він відповідає за те, як довгі повідомлення мають розбиватися на менші фрагменти для зручної передачі, і як клієнти повідомляють один одного про готовність отримати наступні частини. Цей шар працює подібно до протоколу TCP, який використовується в Інтернеті для надійної передачі даних.

Мережевий шар

Мережевий шар відповідає за фактичну передачу даних між клієнтами після того, як транспортний шар визначив, що передавати. Він нагадує IP-протокол, але в спрощеному вигляді. Завдяки цьому поділу шарів, кожен шар виконує своє завдання незалежно: транспортний шар працює з даними, а мережевий – з їх передачею.

Ця архітектура дозволяє легко додавати підтримку нових платформ або типів облікових записів. Наприклад, для роботи з іншими програмами лояльності авіакомпаній потрібно лише змінити мережевий шар, тоді як транспортний шар залишається незмінним.

Транспортне з’єднання

Транспортний шар створює з’єднання між двома клієнтами за допомогою двох каналів: SEND (відправка) і RECV (отримання). Клієнт записує дані у свій канал SEND, а для отримання даних опитує канал RECV. Таким чином, двосторонній обмін даними реалізується через постійне опитування та запис у відповідні канали.

Ця система забезпечує ефективний спосіб передачі інформації, незалежно від того, де знаходяться клієнти – у літаку чи на землі.

З точки зору транспортного шару, канал в системі PySkyWiFi розглядається як середовище для передачі даних, де можна виконувати операції запису та читання. Транспортний шар не заглиблюється в деталі того, як саме працюють ці канали — його основне завдання полягає у правильному розподілі даних.

Ключовою особливістю є те, що клієнт PSWF може або надсилати дані, або отримувати, але не одночасно. У режимі відправки клієнт не отримуватиме дані від іншого клієнта, а в режимі отримання — не може надсилати свої. Це відрізняє PySkyWiFi від протоколу TCP, де передача і отримання можуть здійснюватися паралельно.

При передачі HTTP-запитів через вузький канал (наприклад, через поле імені в обліковому записі програми лояльності), небесний проксі надсилає запит, а наземний демон отримує його. Після цього небесний проксі перемикається в режим отримання, а наземний демон виконує запит і відправляє відповідь назад. Таким чином, вони постійно змінюють ролі, щоб забезпечити двосторонній обмін даними.

Оскільки канал є вузьким, обсяг даних, який можна передати за раз, невеликий. Тому довгі повідомлення (наприклад, HTTP-запити) розбиваються на менші фрагменти, кожен з яких відправляється по черзі через канал SEND. Це робить процес досить тривалим, але в кінцевому підсумку ефективним для досягнення повного циклу передачі даних. Щоб розпочати повідомлення, відправник передає перший фрагмент даних повідомлення всередині сегмента DATA.

Сегмент DATA має таку структуру :

  • ЛітераD

  • Порядковий номер фрагмента (шестизначне число, що унікально ідентифікує фрагмент)

  • Сам фрагмент даних.

Наприклад, сегмент даних у середині повідомлення може виглядати так: D000451adline": "Mudslide in Wigan causes m

Після того, як відправник передасть сегмент DATA, він робить паузу. Він хоче передати наступний сегмент DATA, але не може переписати поле імені облікового запису, поки не знатиме, що одержувач прийняв і обробив попередній.

Одержувач повідомляє відправнику, що можна безпечно передавати новий сегмент DATA, підтверджуючи зчитування кожного сегмента. Одержувач робить це, записуючи сегмент ACK у власний канал SEND:

Сегмент ACKмає таку структуру :

  • ЛітераA

  • Шестизначний порядковий номер сегмента, здобуття якого підтверджується. Наприклад: A000451

У системі PySkyWiFi, транспортний шар використовує сегменти DATA і ACK для передачі та підтвердження отримання даних між двома клієнтами. Відправник постійно опитує свій канал RECV, очікуючи на сегмент ACK. Коли він отримує такий сегмент із певним порядковим номером, наприклад, 000451, це свідчить про те, що одержувач успішно прийняв сегмент даних із цим номером, і тепер можна відправляти наступний сегмент з номером 000452.

Процес продовжується, поки всі фрагменти повідомлення не будуть відправлені, і тоді передається сегмент END, що складається з літери E, який сигналізує про завершення передачі. Після цього клієнти змінюють ролі: колишній відправник стає отримувачем і починає опитувати свій канал RECV у пошуках нових даних, а колишній отримувач починає надсилати свою відповідь, розбиваючи її на фрагменти.

Важливим є те, що транспортний шар не турбується про те, як саме працює мережевий шар — йому лише потрібно, щоб було два канали: один для запису, інший для читання. Мережевий шар може використовувати будь-яку доступну технологію для передачі даних, будь то локальні файли, профіль у Discord або обліковий запис програми авіаміль. Це забезпечує гнучкість PySkyWiFi у роботі з різними програмами лояльності авіакомпаній, що дозволяє системі бути універсальною.

Ось як PSWF використовує сегменти транспортного протоколу для обміну довгими повідомленнями:

Транспортний шар вирішує, які дані клієнти повинні передавати один одному, але не говорить нічого про те, як вони мають їх передавати. Цим займається мережевий шар.

Мережевий шар

Завдання мережного шару – надсилання даних між клієнтами. Йому не має значення, звідки взялися дані і що вони означають; він просто отримує якісь дані з транспортного шару та відправляє їх іншому клієнту (зазвичай через обліковий запис).

Це означає, що мережевий шар досить простий. А ще це означає, що додавання нового мережевого шару для нової платформи програми авіаміль теж немає нічого складного. Ми використовуємо нову платформу для реалізації кількох операцій та кількох властивостей (див. нижче), а потім транспортний шар може автоматично використовувати нову платформу без додаткових зусиль.

Мережевий шар складається з двох операцій:

  • send(msg: str) – Запис msg у сховище. У разі реалізації на основі програми авіаміль він записує значення msg в полі імені облікового запису.

  • recv() -> str – Читання повідомлення зі сховища. У разі реалізації на основі програми авіаміль він зчитує значення з поля імені облікового запису.

Крім того, реалізація мережевого шару має визначити дві властивості:

  • sleep_for — кількість секунд, протягом якого транспортний шар має очікувати між опитуванням нових сегментів із каналу RECV. У разі тестових реалізацій sleep_for може бути дуже низьким, але у разі реалізації, наприклад, на основі облікового запису програми авіаміль він повинен складати багато секунд, щоб не перевантажувати віддалений сервер надто великою кількістю запитів.

  • segment_data_size — кількість символів, які транспортний шар повинен передавати в одному сегменті. Повинне бути рівним максимальному розміру поля облікового запису, що використовується для передачі сегментів (часто приблизно 20 символів).

Опціонально реалізація мережного шару також може надавати ще дві операції:

  • connect_send() – хук, що викликається відправником під час ініціалізації каналу SEND. У реалізації на основі облікового запису програми авіаміль це дозволяє клієнту залогінитися на платформі за допомогою імені користувача та пароля. Це дає клієнтові cookie, який він може використовувати для аутентифікації майбутніх дзвінків send і recv.

  • connect_recv() – хук, що викликається одержувачем під час ініціалізації каналу RECV.

Якщо ви реалізуєте всі ці методи, зможете використовувати PySkyWiFi на літаках іншої авіакомпанії. Але, повторюся, не варто це робити.

Хитрості та тонкощі

При написанні мережного шару, що використовує нову систему авіаміль, можна використовувати пару трюків, що підвищують швидкість та надійність реалізації.

1. Кодувати повідомлення так, щоб обліковий запис точно міг прийняти їх формат

Щоб подолати обмеження HTML-форм облікових записів програм авіаміль, які дозволяють вводити лише алфавітні символи, мережевий шар PySkyWiFi використовує кодування base26. Це кодування перетворює байтовий рядок на набір літер від A до Z.

Процес перетворення включає перетворення байтів у велике число, яке потім представляється у системі числення з основою 26. У цій системі букви A до Z виступають у ролі «цифр». Таким чином, будь-які дані можуть бути закодовані виключно літерами, що дозволяє їх записати у поле імені, яке приймає лише алфавітні символи. Цей підхід забезпечує можливість обходу обмежень форм для введення тексту, і забезпечує передачу даних через обліковий запис авіаміль.

def b26_encode(input_string: str) -> int:
    # Перетворимо вхідний рядок на ціле число base-256
    base256_int = 0
    for char in input_string:
        base256_int = base256_int * 256 + ord(char)
    
    # Перетворимо ціле число base-256 у рядок base26
    if base256_int == 0:
        return 'A'  # Особливий випадок порожніх вхідних даних або вхідних даних, рівних нулю
    
    base26_str = ""
    while base256_int > 0:
        base26_str = chr(base256_int % 26 + 65) + base26_str
        base256_int //= 26
    
    return base26_str

b26_encode("Hello world")
# => 'CZEZINADXFFTZEIDPKM'

Транспортний шар у системі PySkyWiFi не бере участі у процесі кодування даних. Мережевий шар отримує байти, перетворює їх у закодовані рядки за допомогою base26, і ці рядки, що містять тільки літери від A до Z, записуються в обліковий запис. Коли потрібно отримати дані назад, мережевий шар зчитує рядок, декодує його назад у байти та передає їх транспортному шару. Таким чином, транспортний шар працює з байтами і не потребує знати про методи кодування, використовувані для передачі даних.

Недоліком використання base26 є те, що рядок стає набагато довшим, що знижує пропускну спроможність протоколу, подібно до того, як двійковий вигляд числа довший за десятковий. Щоб покращити ефективність, можна було б використовувати base52, який включає літери як верхнього, так і нижнього регістрів, дозволяючи передавати більше даних у меншому обсязі. Це поліпшення може бути запроваджене у майбутній версії системи.

2. Збільшити пропускну спроможність, задіявши більше полів облікового запису

Ще один спосіб збільшення пропускної спроможності PSWF – розширення розміру сегмента, що може обробляти мережевий шар. Якщо ми подвоїмо розмір сегментів, то й подвоїмо пропускну спроможність протоколу.

Поля в облікових записах програм авіаміль зазвичай мають обмеження на довжину. Наприклад, може бути дозволено ім’я не довше 20 символів. Однак можна максимізувати пропускну здатність:

  1. Використовуючи повну довжину поля

  2. Розбивши сегмент на кілька полів

Допустимо, ми можемо керувати п’ятьма полями, у кожному з яких може зберігатися до 20 символів. Замість використання одного поля для передачі сегментів із 20 символів ми можемо розбити сегмент із 100 символів на 5 блоків по 20 і оновлювати їх усі разом в одному запиті. Тоді одержувач зможе теж за один запит рахувати всі 5 полів та пошити їх разом, щоб відтворити повний сегмент.

HTTP CONNECT

Було б ефективніше використовувати запити CONNECT для налаштування тунелю між небесним проксі та цільовим веб-сайтом в PySkyWiFi, оскільки це дозволило б системі працювати на рівні системного проксі. Більшість HTTP-проксі реалізовані на основі запитів CONNECT, що забезпечує пряме встановлення TLS-з’єднання з веб-сайтом. Це означало б, що трафік, переданий через обліковий запис авіаміль, був би зашифрований, що значно підвищило б безпеку та ефективність передачі даних.

Однак, впровадження цього механізму вимагало б більшого обсягу роботи, ніж просте перекидання HTTP-запитів вручну, як це робиться зараз у PySkyWiFi. Використання CONNECT вимагає більш складного налаштування та контролю над з’єднанням.

Заключення:

Після експерименту з PySkyWiFi, тунель через GitHub Gist був успішно використаний для завантаження домашньої сторінки блогу через curl. Хоча це зайняло багато часу, результат показав потенціал такого підходу, і це можна вважати водночас найпродуктивнішим та найменш продуктивним польотом.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.