Летом 2014-го мы с друзьями были на прогулке, и случилось историческое событие. Во время съемки видео, внезапно, iPhone 5C выпал с рук моей жены и разбился об бетонный пол.
Это на тот момент мне казалось печальной ситуацией. Но именно это стало толчком для запуска сервиса, который сейчас обслуживает более 15 млн пользователей.
При чем тут iPhone? Что за сервис? Как все это связано? Ответы под катом!
![](https://habrastorage.org/r/w780q1/web/905/ba3/631/905ba3631ca6438784c1d73556f914c2.jpg)
В этой статье я хочу с вами поделиться событиями, которые начались в 2014 году. Расскажу все как было, пока моя память свежа, а также поделюсь информацией, которая до сих пор нигде не публиковалась.
Как и любой, кто ощутил на себе горечь разбитого стекла любимого гаджета, я хотел, как можно быстрее это исправить. Сам дисплей оказался не поврежден, и ремонт — просто замена стекла тач-скрина. Знакомый порекомендовал СЦ в Киеве, и я отправил туда телефон. Его переклеили и отправили мне обратно. Я не мог дождаться, когда получу телефон почтой.
Как только я его получил, меня ждало еще одно разочарование. Тач-скрин был заменен, но по краям дисплея были желтые пятна. В СЦ мне пообещали это исправить, или заменить на оригинал вместе с дисплеем. Так как под стеклом я еще нашел царапины, то решился на полную замену дисплея.
Через неделю я получил телефон обратно, оказалось, что дисплей не оригинальный. Даже на самой поверхности было видно, что он находится под углом к корпусу. Да и цвета были тусклее, что явно отличало дисплей от оригинала. Оказалось, что оригинальные дисплеи для iPhone сложно найти. Я решил смириться с данной ситуацией, и когда-то в будущем поменять iPhone на более новую модель.
Прошло несколько дней, я потихоньку привыкал к китайскому дисплею. Я сидел на кресле и телефон выскользнул из кармана. Он упал на деревянный пол, стекло опять треснуло. Телефон с оригинальным стеклом падал много раз, но не разбивался аж до бетонной схватки. Но китайское, криво склеенное стекло, разбилось с первой попытки.
![](https://habrastorage.org/r/w780q1/web/e30/41c/ae7/e3041cae7e0d452d94bb97b377e7d6a5.jpg)
Осознание того, что оригинальное стекло купить не получится, навело меня на мысль найти донор. Я начал искать iPhone что продают на olx под запчасти. Оказалось, там много тех, у которых возникла проблема с iCloud функцией Find My iPhone. Такие телефоны нельзя активировать, и они остаются в повисшем состоянии до тех пор, пока не ввести Apple ID владельца, или если владелец удалит телефон из своего аккаунта.
Я нашел донор, iPhone 5C в отличном состоянии, заблокирован под оператора и под iCloud. Дисплей успешно подошел к моему телефону, и наконец-то все стало на свои места. Зеленый iPhone решил оставить себе, на случай чего, как донор. Наконец то я смог успокоиться и забыть о этой проблеме.
Прошло несколько недель, зеленый iPhone 5C у меня так и валялся на столе под монитором. Но время от времени я вспоминал о нем, так как по привычке я не люблю чтобы вещи валялись без дела. Телефон итак был привязан к неизвестному оператору, да и еще с разбитым стеклом, толку от отвязки iCloud не было. Но мысли о том, что телефон в теории можно разблокировать, до сих пор неизвестным способом, меня не покидали.
В общем начал гуглить, читать форумы. Нашел информацию о doulCi (название не странное, а это почти задом наперед iCloud). Это была команда энтузиастов что запустили сервер для обхода FMI для ранних прошивок iOS 7. Они запустили MITM и поменяли местами пакеты от разблокированного iPhone в заблокированный. В общем на то время Apple не делали проверок на соответствие пакетов к Serial/IMEI и doulCi успешно этим воспользовались. Их сервер проработал он не долго, но они успели разблокировать где-то 70 тыс. устройств. Те, кто успели подключиться к их серверу, получили рабочее устройство, в котором не работала SIM карта. Потом один из их команды слил исходники в интернет, и Apple успешно пропатчили такую дыру. На этом этапе их команда распалась, и все пошли разными путями. Больше их сервер не работал.
Конечно я об этом тогда не знал. Я заходил на их официальный сайт, и видел там таймеры, мол «ждите до 16:00 пятницу, тогда запустим сервера бесплатно разблокируем». И еще были всюду поля для ввода IMEI и регистрация. В общем я решил ждать этот час. Как только приходило время, я ставил будильник чтобы не пропустить, держал USB кабель наготове. Наступало время, я заходил на их сайт, а тамвсе работает новое время запуска сервера. Попробовал подождать еще, и все оказалось рекламной заманухой. Это меня изрядно доставало, но останавливаться я не собирался.
Позже начали появляться новости о прокси серверах, мол подключившись к ним можно зайти на веб страницу.
В странице, которую выдает Apple
![](https://habrastorage.org/r/w1560/web/23f/644/591/23f64459189a4de49342803924e8d54f.png)
Нажав на «Помощь в активации» пользователь попадал на страницу с текстом. Но разработчики Apple упустили маленькую деталь, ссылка вела не на HTTPS, а на HTTP адрес.
Это позволяло перехватить и подменить трафик, так как он был не зашифрован.
Сервера постоянно падали, лучшим что я нашел был сервер niltpH. Но и он постоянно менял порты, то ли чтобы пользователи чаще заходили на его сайт, то ли сервер не выдерживал и так он снимал нагрузку.
Я постоянно задавался вопросом, зачем делать прокси если можно переадресовать DNS запросы?
Не будет большой нагрузки, и сервер всегда будет онлайн. Но были только proxy сервера.
Дальше началась волна мошенников, они начали массово делать прокси сервера.
Показывая страницы с оплатой несуществующего полного обхода много народу пострадало от таких фальшивых сервисов. Прокси сервера позволяли получить полный контроль над трафиком. Таким образом плохие дядьки крали пароли и кредитные карты, а пользователи верили, что это сработает так как любое изменение в их устройстве вызывало доверие.
Apple ничего не делали чтобы изменить ситуацию, но у меня получилось. В результате моих дальнейших действий больше никто не мог найти прокси сервера мошенников в поисковике.
Решено, я запущу свой сервер. Одним зимним вечером декабря я приступил к разработке. Для реализации моей задумки нужен был один HTTP и один DNS сервер. Я решил написать оба сервиса на С++ используя Visual Studio 2010. Работа с сокетами напрямую байт за байтом без сторонних библиотек.
DNS протокол не сложный, на один UDP запрос, один ответ, с одинаковой структурой каждый раз. За пару часов я написал простой DNS сервер, он отвечал статическим ІР адресом на static.ips.apple.com а остальные брал с DNS от Google.
Дальше я приступил к написанию HTTP сервера. Первый этап был просто выдавать HTML страницу. Она при запуске программы загружалась в память, и потом выдавалась готовым пакетам каждому кто пришлет запрос на 80 порт. Так что моя программа выдавала страницу всем, кто прислал запрос, не зависимо от указанного хоста. В браузере все работало, но прописав DNS в настройки Wi-Fi iOS, нажав на «Помощь в активации» я получал ошибку в телефоне.
Проанализировав трафик выяснилось, что Apple использует XML файлы, генерируя по них удаленный интерфейс.
Пример кода можно увидеть по ссылке помощи по активации:
static.ips.apple.com/deviceservices/buddy/barney_activation_help_en_us.buddyml
И вот ответ от сервера с запросом пароля на заблокированном устройстве:
Изучив исходник можно понять что в коде есть JavaScript, и работает он внутри тэгов <![CDATA[..]]>
И на тот момент существующие прокси сервера использовали единственную страницу с HTML кодом.
В телефоне можно было увидеть вместо текста по активации простенький сайт. Cookies работали. Но нажав на любую внешнюю ссылку, все стили сбивались и последующие переходы были невозможны. Именно так работали прокси сервера в то время.
Через пару часов у меня был рабочий DNS и HTTP сервер, что выдавал 1 страницу по любому запросу. XMLUI оказался разметкой с неизвестными параметрами, которые нельзя было нигде найти. Да и сейчас нигде нет документации. Apple использует его только внутри своих продуктов.
На самом деле стандартные элементы iOS, генерируются кодом XMLUI, даже те, которые работают оффлайн. Списки, кнопки, иконки, выбор даты и времени, подменю, все это лишь результат преобразования XML схожего скрипта в интерфейс налету.
Осознание того, что множество интерфейсов в iOS сделаны именно таким, корявым способом, меня слегка разочаровало. Это когда ожидаешь, что все уже сделано максимально оптимально, а выясняется там прослойка на прослойке.
Тут я сообразил, что в теории, если знать разметку интерфейса, можно сгенерировать вполне себе удобный родной iOS интерфейс со списком значков и ссылок. Такой как настройки в iOS. И заменить им диалог активации полностью.
Все что я понимал из уже сохраненного кода, это что есть некая таблица с возможностью добавления множества <section footer, которые могут ссылаться на другие XMLUI файлы. Вполне можно сделать свой XMLUI сервер с какой-то информацией. Но хотел я получить именно список с сайтами, и чтобы можно было зайти в Google, например.
Первое что мне пришло в голову — раз iOS генерирует команды, следственно сравнивает строки XML параметров, значит они должны где-то храниться в прошивке. В идеале найти бы файл с списком команд, которые можно пробовать добавлять в XMLUI код, но нет, такого не случилось.
В то время iPhone 4 был уже взломан полностью. Там из-под бут-лоадера можно загрузиться и получить полный доступ к файловой системе, не важно есть ли пароль от iOS или нет.
Я нашел прошивку iOS 7 скаченную c iPhone 4 и начал ковыряться. Собрал список известных слов, из тех XMLUI файлов которые собрал и начал искать слово за словом по всем файлам прошивки. С первого взгляда бесполезное занятие, это сравнимо с поиском иглы в стоге сена, но почему-то я был уверен, что что-то найду. Прошел еще не один час, мне не удавалось ничего найти, но мое внимание привлек файл dyld_shared_cache_armv7. Он весил аж 300 Мб, при том что вся прошивка весила около 1 Гб.
Это оказался «пакет» динамических библиотек. Чтобы не нагружать файловую систему, Apple пакует все динамические библиотеки для всех системных программ в 1 файл. С помощью утилит разработчика от Apple я распаковал этот файл, получив большое количество файлов. Я начал опять искать в их данных слова из моего списка, пробовал их комбинировать и подбирать. Начал искать похожие по стилю написания — несколько слов, первое с маленькой буквы, остальные с заглавной, без пробелов и подчеркиваний.
После несчетного количества попыток, я смог найти слово htmlButtonRow. Если его воткнуть в код, то получал ошибку, значит оно как-то влияло и распознавалось. Следующим этапом был подбор места, куда же его воткнуть?
Наконец то код сработал, и я получил заветную строку меню:
Просто отображалась строка, и текст, по нажатию ничего не происходило. Но само имя секции htmlButtonRow говорило о HTML, а значит скорее всего туда можно добавить код страницы.
Вставка HTML кода в кнопку используя <![CDATA сработала. Даже заработал переход с кнопки на сайт.
Я получил то, чего добивался, способ отобразить список разных сайтов, и переход на них. Дальше я приступил к разработке движка генерации XMLUI кода. Написал список нужных параметров для одной кнопки, засунул туда ссылку на картинку, текст и ссылку на сайт.
Получился текстовый файл конфигурации такого вида:
В нем я создал список популярных сайтов.
Дальше я сделал шаблоны страниц, в которые добавлялись кнопки, все хранилось в памяти статически и выдавалось по требованию без обращения к диску.
Через пару дней я подправил все баги, и сервер был готов для постоянного запуска. Запуск первой версии iCloud DNS Bypass состоялся 25 декабря 2014 года. Я написал адрес DNS сервера на сайте 4pda в ветке о обходе iCloud, мне в тот же день написали модераторы сайта и предложили создать отдельную ветку. Кому интересно, вот ссылка на ветку форума 4pda.
В результате все выглядело так:
![](https://habrastorage.org/r/w780q1/web/498/569/73e/49856973ee45455d868ba2c0101c7800.jpg)
Но из-за ограничений самого интерфейса можно было только перейти по ссылке, а последующий переход на сторонние сайты был невозможен. В итоге все могли пользоваться только списком сайтов, которые я добавлял в сервер.
Спустя пару дней после запуска, мой друг Dybik запустил сайт с информацией о сервере. Я создал группу в VK и общался с пользователями сервера. Оказалось, что на новой прошивке iOS уже не работает HTML переход по ссылкам.
На тот момент уже подключились где-то 500 уникальных пользователей, и все отзывы мне помогали верить, что я делаю полезное. А я всегда мечтал запустить большой проект. Эти мысли давали мне силу не сдаваться. Я приступил опять искать названия значений XMLUI, я был уверен, что есть еще много полезных команд.
Потратив еще 3-4 часа усердных поисков и подборов, я наконец то нашел полезный тэг
<linkRow и параметр к нему accessory=«disclosure», делающий кнопку подпапкой. Это было как раз то что нужно, список заработал на всех iOS и принял более найтивный вид, так как уже не было никакого HTML.
Конечный код кнопки был таким:
Мне начали присылать полезные ссылки, которые я добавлял в меню, и формировал большой список. Присылали и баги-вылеты, которые я добавлял в меню, и все могли их пробовать.
Так же я сделал языковый движок, с заменой текстов, в зависимости от языка пользователя. Пригласил всех переводить, и со временем мне присылали переводы с разных стран. Сейчас интерфейс сервера переведен уже на 50 языков, благодаря волонтерам. Так же я сделал ограничения списка сайтов для языка, допустим для русских отображаются русские сайты, китайцам китайские. Добавил чат на основе tlk.io, но позже сделал свой движок из-за спамеров.
![image](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/5cc/054/6df/5cc0546df247f681e52a1369c820f818.png)
![image](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/4c0/be4/647/4c0be4647de0edbfcd5c3eb934c1b89f.png)
![image](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/eb1/36a/f10/eb136af1009fceebbe36b81d06213f2f.png)
Дальше я так же нашел параметр shouldScaleHTMLPageToFit=«true» который привел вид браузера в мобильный там где это нужно. И попутно я нашел еще один самый важный параметр isModalHTMLView=«true». С его помощью мне удалось развернуть веб страницу на весь экран, там работал поворот экрана и все переходы по ссылках без багов и ограничений. Так же работали Cookies и после перезагрузки, так что я их использовал для подсчета количества пользователей. Впервые в мире стало возможным использовать полноценный браузер без вкладок на заблокированном iOS устройстве.
Так же через кнопку HTML загрузки фото все могли пользоваться камерой, и таким же образом включать фонарик. Я добавил список избранного, и можно было его добавлять в интерфейсе. В меню были радиостанции, можно было открывать музыку, дальше открывать еще одну вкладку спец кнопкой, пока предыдущая работала, и получалась многозадачность.
Потом выяснилось что некоторые пользователи не могут подключиться к серверу. Причиной тому были либо роутеры, либо провайдеры которые заменяли все DNS запросы на свои. И подменить домен моим сервером не удавалось. Тогда я разработал маленькую программу под Windows, которая запускает встроенный DNS сервер, помогающий подключиться в локальной сети.
Вот видео из YouTube каннала EverythingApplePro о iCloud DNS Bypass, где вы можете наблюдать как выглядел интерфейс в то время.
Спустя два месяца к серверу уже подключились более 200 тыс. устройств.
![](https://habrastorage.org/r/w1560/web/fa8/be3/da4/fa8be3da44254b719b7ba344de6d92a5.png)
Вот видео, в реальном времени видно запросы на сервере, которые были в то время
Но, чтобы Apple заметили, что у них в разметке недочет, понадобилось подключить еще 300 тыс. устройств.
Два месяца после запуска в интернете было невозможно найти что-то другое об обходе кроме моего сервера. Это положило конец мошенническим прокси, вымогающим деньги. Но началась волна объявлений на eBay начали продавать «обход iCloud» по 30-50 USD. Наивные и отчаянные владельцы заблокированных устройств легко поддаются манипуляциям, и мошенники этим пользовались.
Заплатив за «услугу разблокировки» мошенники давали покупателям инструкцию как подключиться к моему бесплатному серверу. Многие даже не подозревали что их обокрали. Меня это злило и хотелось что-то сделать чтобы их остановить.
Я написал на всех языках страницу с сообщением, чтобы, подключившись все понимали — сервер бесплатный. Такая надпись до сих пор в интерфейсе сервера осталась. А также жаловался на eBay на мошеннические товары, но эта война была бесконечной.
Мне приходило много писем, и скидывали все что находили о взломах, я публиковал на сервере, и все пробовали. Иногда получалось выйти на рабочий стол, а иногда все разблокировалось (работало только с стертыми через сайт устройствами, вылет интерфейса приводил его в рабочее состояние до перезагрузки).
С помощью информации, которую мне присылали, выяснилось что есть много источников предлагающих за деньги разблокировать устройства, которые действительно работали. Я пытался выснить как, чтобы поделиться со всем сообществом, дабы развеять заблуждения о платных услугах.
Пользователи получают заблокированное устройство по таким причинам:
Сейчас я с уверенностью могу сказать, что есть только два способа полной отвязки:
В прошлом году фишинговые сервисы массово распространялись, и Apple в ответ даже убрали сообщение от владельца на экране заблокированного устройства. Но это не было причиной столь широкого распространения фишинговых атак. Есть источники, которые продают информацию из аккаунта Apple ID за деньги, которую использовали для атак. Переставали они работать только в праздники по китайскому календарю. Скорее всего это работники Apple в Китае, которые переписывают информацию с админки Apple Care. Я решил проверить полученную информацию и все оказалось правдой. Там была информация адресов, телефон, секретные вопросы, без паролей и без ответов. Тогда я попытался связаться с Apple чтобы выяснить что происходит, и мои письма были успешно проигнорированы. Так что берегите свои IMEI/UDID подальше от сторонних глаз, а в Apple ID лучше не записывать настоящую информацию.
Я подозревал что Apple когда-нибудь заметит недочет в HTTPS ссылке, и сервер iCloud DNS Bypass залпом перестанет работать для всех устройств. Исследование альтернативных возможностей привело меня к идее создать Captive Portal. Этот механизм используется в многих отелях, аэропортах, когда вам приходится ввести свой номер на сайте, перед подключением к интернету.
Информацию о Captive Portal так же было сложно найти. Никто никогда раньше не пытался запустить портал авторизации через DNS сервер. Спустя нескольких дней исследований мне успешно удалось запустить свой собственный Captive Portal. Все работало как в обычном браузере, переход по всех ссылках работал без ограничений. В общем я был готов к тому что Apple поправит недочет, но то, что Cookies стирались по закрытию портала меня смущало.
В то время XMLUI метод работал отлично, я отвечал на письма, мне было интересно общаться с людьми. В ютубе многие снимали видео о моем сервере, и все делились информацией о поисках по полному обходу.
Прошло почти полгода с запуска сервера и Apple не думали исправлять страницу разметки. Не помню точно, когда, но мне было скучно и я начал пытаться прочитать файловую систему iOS через XMLUI. Мне это удалось, и я мог с файловой системы открывать файлы, заранее зная их путь.
У меня появилась идея, если закидывать все файлы через программу с компьютера в доступные для записи папки на устройстве, можно создать файловый менеджер. Тогда еще можно было получить доступ к файлам без подтверждения на заблокированном устройстве, сейчас на iOS 10 это больше не получится.
Я сделал поле ввода кода для разблокировки тестовых кнопок где был файловый менеджер и пригласил несколько добровольцев тестировать.
![](https://habrastorage.org/r/w780q1/web/74d/037/1b2/74d0371b252b4e6ba90351265da04a29.jpg)
Можно было закидывать файлы любых форматов и открывать на устройстве. Так же я слил воедино все меню и подменю в один файл, что давало возможность их загрузить на устройство 1 раз, а дальше пользоваться без интернета. Хотелось как можно быстрее поделиться новыми функциями с пользователями сервера. Сперва надо было сделать программу, которая бы синхронизировала структуру файловой системы на сервер, и идентифицировать пользователя предоставив ему список файлов с его устройства.
Меня это очень вовлекло, и я приступил к разработке. Много часов утекло и уже был готов аудио плеер с плейлистом и возможностью выбирать трек. На следующее утро ко мне посыпались email-ы с сообщениями что сервер не работает. Я проверил все, сервер был запущен, было онлайн несколько сотен пользователей. Но это были лишь счастливчики, которые не выходили с сервера.
13 мая 2015 года Apple разработчики обратили внимание на недочет, и исправили текст ссылки с HTTP на HTTPS.
В одночасье все устройства перестали подключаться к серверу и превратились обратно в бесполезные железки с логотипом яблока. И в один момент вся разработка файлового менеджера стала бесполезной. Никто так и не узнал, что я собирался запустить этот режим. Теперь чтобы вернуть этот метод нужно установить самописный сертификат в устройство для домена albert.apple.com, пока что это не удалось. На момент исправления бага, из-за которого старый метод больше не работает, было подключено пол миллиона уникальных устройств.
![](https://habrastorage.org/r/w780q1/web/3ca/13b/d68/3ca13bd688dd4968a29cbc8f348189c2.jpg)
Я сразу же приступил к запуску Captive Portal, и переносу всего меню в веб вариант. В основу интерфейса взят Framework7, я адаптировал его под старый конфигурационный файл меню. В тот же день сервер был запущен в новом облике, в котором он и находится до сих пор.
На фейсбуке у меня была страница iCloud DNS Bypass где я публиковал только новости и обновления сервера. Прошло больше года. Почему-то Apple это не понравились и в один (прекрасный) день я увидел следующее сообщение без каких-либо предупреждений:
![](https://habrastorage.org/r/w780q1/web/5b3/c31/db0/5b3c31db04134ced819c9741a3819866.jpeg)
Позже CloudFlare прислали email с сообщением что кто-то из подразделения Apple запросил реальный IP адрес моего сайта, так как он нарушает их авторское право. Хотя я и не понимал в чем заключается нарушение, был рад что этим все и ограничилось. За все время Apple ни разу не попытались связаться напрямую и попросить удалить то, что им не нравится.
Такая вот ирония судьбы, если бы моя жена не уронила телефон, если бы я не отвлекся от основного проекта, чтобы отдохнуть и реализовать свою задумку, то сервер iCloud DNS Bypass сегодня бы не существовал.
Сейчас количество уникальных пользователей перешло границу 15 млн. В сутки подключаются 50-60 тыс. уникальных устройств.
Текущая версия сервера работает на всех iOS существующих на данный момент. И альтернатив iCloud DNS Bypass на основе Captive Portal тоже до сих пор не существует. Сервер работает круглосуточно со времени запуска а донейтов хватает на аренду оборудования. До сих пор все HTTP подключения обслуживает одна единственная программа написанная на С++.
Вот статистика стран, где больше всего заблокированных устройств Apple, которые подключились к iCloud DNS Bypass. Всего на текущий момент 15.3 миллионов.
![](https://habrastorage.org/r/w1560/web/a3a/cfc/9cd/a3acfc9cd1cd4fd4b3070572e29598e2.png)
И да, вы можете попробовать Captive Portal на своем не заблокированном устройстве проделав все как по инструкции на видео из этой статьи. А так же можете просто зайти через любой браузер на страницу ui.iclouddnsbypass.com
Надеюсь я вас не утомил своим рассказом, и он был вам интересен. В нашей вселенной нет правил, и проект, над которым работаешь пару лет, может накрыться медным тазом, а хобби на которое потратишь две недели может превратиться в сервис, обслуживающий много миллионов людей. Желаю вам не скучать на своей работе и чаще отвлекаться на то, что действительно нравится.
Это на тот момент мне казалось печальной ситуацией. Но именно это стало толчком для запуска сервиса, который сейчас обслуживает более 15 млн пользователей.
При чем тут iPhone? Что за сервис? Как все это связано? Ответы под катом!
![](https://habrastorage.org/web/905/ba3/631/905ba3631ca6438784c1d73556f914c2.jpg)
Предисловие
В этой статье я хочу с вами поделиться событиями, которые начались в 2014 году. Расскажу все как было, пока моя память свежа, а также поделюсь информацией, которая до сих пор нигде не публиковалась.
Ремонт
Как и любой, кто ощутил на себе горечь разбитого стекла любимого гаджета, я хотел, как можно быстрее это исправить. Сам дисплей оказался не поврежден, и ремонт — просто замена стекла тач-скрина. Знакомый порекомендовал СЦ в Киеве, и я отправил туда телефон. Его переклеили и отправили мне обратно. Я не мог дождаться, когда получу телефон почтой.
Как только я его получил, меня ждало еще одно разочарование. Тач-скрин был заменен, но по краям дисплея были желтые пятна. В СЦ мне пообещали это исправить, или заменить на оригинал вместе с дисплеем. Так как под стеклом я еще нашел царапины, то решился на полную замену дисплея.
Через неделю я получил телефон обратно, оказалось, что дисплей не оригинальный. Даже на самой поверхности было видно, что он находится под углом к корпусу. Да и цвета были тусклее, что явно отличало дисплей от оригинала. Оказалось, что оригинальные дисплеи для iPhone сложно найти. Я решил смириться с данной ситуацией, и когда-то в будущем поменять iPhone на более новую модель.
Прошло несколько дней, я потихоньку привыкал к китайскому дисплею. Я сидел на кресле и телефон выскользнул из кармана. Он упал на деревянный пол, стекло опять треснуло. Телефон с оригинальным стеклом падал много раз, но не разбивался аж до бетонной схватки. Но китайское, криво склеенное стекло, разбилось с первой попытки.
![](https://habrastorage.org/web/e30/41c/ae7/e3041cae7e0d452d94bb97b377e7d6a5.jpg)
Осознание того, что оригинальное стекло купить не получится, навело меня на мысль найти донор. Я начал искать iPhone что продают на olx под запчасти. Оказалось, там много тех, у которых возникла проблема с iCloud функцией Find My iPhone. Такие телефоны нельзя активировать, и они остаются в повисшем состоянии до тех пор, пока не ввести Apple ID владельца, или если владелец удалит телефон из своего аккаунта.
Я нашел донор, iPhone 5C в отличном состоянии, заблокирован под оператора и под iCloud. Дисплей успешно подошел к моему телефону, и наконец-то все стало на свои места. Зеленый iPhone решил оставить себе, на случай чего, как донор. Наконец то я смог успокоиться и забыть о этой проблеме.
Что дальше?
Прошло несколько недель, зеленый iPhone 5C у меня так и валялся на столе под монитором. Но время от времени я вспоминал о нем, так как по привычке я не люблю чтобы вещи валялись без дела. Телефон итак был привязан к неизвестному оператору, да и еще с разбитым стеклом, толку от отвязки iCloud не было. Но мысли о том, что телефон в теории можно разблокировать, до сих пор неизвестным способом, меня не покидали.
doulCi
В общем начал гуглить, читать форумы. Нашел информацию о doulCi (название не странное, а это почти задом наперед iCloud). Это была команда энтузиастов что запустили сервер для обхода FMI для ранних прошивок iOS 7. Они запустили MITM и поменяли местами пакеты от разблокированного iPhone в заблокированный. В общем на то время Apple не делали проверок на соответствие пакетов к Serial/IMEI и doulCi успешно этим воспользовались. Их сервер проработал он не долго, но они успели разблокировать где-то 70 тыс. устройств. Те, кто успели подключиться к их серверу, получили рабочее устройство, в котором не работала SIM карта. Потом один из их команды слил исходники в интернет, и Apple успешно пропатчили такую дыру. На этом этапе их команда распалась, и все пошли разными путями. Больше их сервер не работал.
Конечно я об этом тогда не знал. Я заходил на их официальный сайт, и видел там таймеры, мол «ждите до 16:00 пятницу, тогда запустим сервера бесплатно разблокируем». И еще были всюду поля для ввода IMEI и регистрация. В общем я решил ждать этот час. Как только приходило время, я ставил будильник чтобы не пропустить, держал USB кабель наготове. Наступало время, я заходил на их сайт, а там
Proxy сервера
Позже начали появляться новости о прокси серверах, мол подключившись к ним можно зайти на веб страницу.
В странице, которую выдает Apple
![](https://habrastorage.org/web/23f/644/591/23f64459189a4de49342803924e8d54f.png)
Нажав на «Помощь в активации» пользователь попадал на страницу с текстом. Но разработчики Apple упустили маленькую деталь, ссылка вела не на HTTPS, а на HTTP адрес.
http://static.ips.apple.com/deviceservices/buddy/barney_activation_help_en_us.buddyml
Это позволяло перехватить и подменить трафик, так как он был не зашифрован.
Сервера постоянно падали, лучшим что я нашел был сервер niltpH. Но и он постоянно менял порты, то ли чтобы пользователи чаще заходили на его сайт, то ли сервер не выдерживал и так он снимал нагрузку.
Я постоянно задавался вопросом, зачем делать прокси если можно переадресовать DNS запросы?
Не будет большой нагрузки, и сервер всегда будет онлайн. Но были только proxy сервера.
Дальше началась волна мошенников, они начали массово делать прокси сервера.
Показывая страницы с оплатой несуществующего полного обхода много народу пострадало от таких фальшивых сервисов. Прокси сервера позволяли получить полный контроль над трафиком. Таким образом плохие дядьки крали пароли и кредитные карты, а пользователи верили, что это сработает так как любое изменение в их устройстве вызывало доверие.
Apple ничего не делали чтобы изменить ситуацию, но у меня получилось. В результате моих дальнейших действий больше никто не мог найти прокси сервера мошенников в поисковике.
Первый сервер iCloud DNS Bypass
Решено, я запущу свой сервер. Одним зимним вечером декабря я приступил к разработке. Для реализации моей задумки нужен был один HTTP и один DNS сервер. Я решил написать оба сервиса на С++ используя Visual Studio 2010. Работа с сокетами напрямую байт за байтом без сторонних библиотек.
DNS протокол не сложный, на один UDP запрос, один ответ, с одинаковой структурой каждый раз. За пару часов я написал простой DNS сервер, он отвечал статическим ІР адресом на static.ips.apple.com а остальные брал с DNS от Google.
Дальше я приступил к написанию HTTP сервера. Первый этап был просто выдавать HTML страницу. Она при запуске программы загружалась в память, и потом выдавалась готовым пакетам каждому кто пришлет запрос на 80 порт. Так что моя программа выдавала страницу всем, кто прислал запрос, не зависимо от указанного хоста. В браузере все работало, но прописав DNS в настройки Wi-Fi iOS, нажав на «Помощь в активации» я получал ошибку в телефоне.
Проанализировав трафик выяснилось, что Apple использует XML файлы, генерируя по них удаленный интерфейс.
Пример кода можно увидеть по ссылке помощи по активации:
static.ips.apple.com/deviceservices/buddy/barney_activation_help_en_us.buddyml
И вот ответ от сервера с запросом пароля на заблокированном устройстве:
<xmlui>
<script><![CDATA[function enableNextButton(){
var fieldPassword = xmlui.getFieldValue('password');
if (fieldPassword && fieldPassword.length >= 3)
return true;
return false;
}
function validateForm() {
var fieldLogin = xmlui.getFieldValue('login');
var fieldPassword = xmlui.getFieldValue('password');
if (fieldLogin == 'test') {
xmlui.setFieldInvalid('login', false);
xmlui.alert("Test!");
} else {
xmlui.setFieldInvalid('login', true);
xmlui.alert("Value entered is not 'test'.");
}
}]]></script>
<page>
<navigationBar title="Activation Lock" loadingTitle="Activating..." hidesBackButton="false">
<linkBarItem position="right" label="Next" httpMethod="POST" url="/deviceservices/deviceActivation" style="blue" enabledFunction="enableNextButton"/>
</navigationBar>
<tableView>
<section footer="This iPhone is linked to an Apple ID. Enter the Apple ID and password that were used to set up this iPhone."/>
<section footer="Сообщение от владельца: This iPhone has been lost. Please call me. (123) 456-1234"/>
<section footer="Помощь в активации" footerLinkURL="http://static.ips.apple.com/deviceservices/buddy/barney_activation_help_ru_ru.buddyml">
<editableTextRow id="login" label="Apple ID" placeholder="example@icloud.com" disableAutocapitalization="true" disableAutocorrection="true" keyboardType="email"/>
<editableTextRow secure="true" id="password" label="Пароль" placeholder="Обязательно"/>
</section>
</tableView>
</page>
<serverInfo isAuthRequired="true" activation-info-base64="тут была закодирована полная информация о телефоне"/>
</xmlui>
Изучив исходник можно понять что в коде есть JavaScript, и работает он внутри тэгов <![CDATA[..]]>
И на тот момент существующие прокси сервера использовали единственную страницу с HTML кодом.
<xmlui>
<page>
<navigationBar title="Games" loadingTitle="Loading..." hidesBackButton="false">
<linkBarItem position="right" label="Next" httpMethod="POST" url="/deviceservices/deviceActivation" style="blue" enabledFunction="enableNextButton"/>
</navigationBar>
<htmlLabelRow>
<![CDATA[<html>
Тут код HTML страницы
</html>]]></htmlLabelRow>
</page>
</xmlui>
В телефоне можно было увидеть вместо текста по активации простенький сайт. Cookies работали. Но нажав на любую внешнюю ссылку, все стили сбивались и последующие переходы были невозможны. Именно так работали прокси сервера в то время.
Через пару часов у меня был рабочий DNS и HTTP сервер, что выдавал 1 страницу по любому запросу. XMLUI оказался разметкой с неизвестными параметрами, которые нельзя было нигде найти. Да и сейчас нигде нет документации. Apple использует его только внутри своих продуктов.
На самом деле стандартные элементы iOS, генерируются кодом XMLUI, даже те, которые работают оффлайн. Списки, кнопки, иконки, выбор даты и времени, подменю, все это лишь результат преобразования XML схожего скрипта в интерфейс налету.
Осознание того, что множество интерфейсов в iOS сделаны именно таким, корявым способом, меня слегка разочаровало. Это когда ожидаешь, что все уже сделано максимально оптимально, а выясняется там прослойка на прослойке.
Тут я сообразил, что в теории, если знать разметку интерфейса, можно сгенерировать вполне себе удобный родной iOS интерфейс со списком значков и ссылок. Такой как настройки в iOS. И заменить им диалог активации полностью.
Все что я понимал из уже сохраненного кода, это что есть некая таблица с возможностью добавления множества <section footer, которые могут ссылаться на другие XMLUI файлы. Вполне можно сделать свой XMLUI сервер с какой-то информацией. Но хотел я получить именно список с сайтами, и чтобы можно было зайти в Google, например.
Как сделать интерфейс по разметке не зная команд?
Первое что мне пришло в голову — раз iOS генерирует команды, следственно сравнивает строки XML параметров, значит они должны где-то храниться в прошивке. В идеале найти бы файл с списком команд, которые можно пробовать добавлять в XMLUI код, но нет, такого не случилось.
В то время iPhone 4 был уже взломан полностью. Там из-под бут-лоадера можно загрузиться и получить полный доступ к файловой системе, не важно есть ли пароль от iOS или нет.
Я нашел прошивку iOS 7 скаченную c iPhone 4 и начал ковыряться. Собрал список известных слов, из тех XMLUI файлов которые собрал и начал искать слово за словом по всем файлам прошивки. С первого взгляда бесполезное занятие, это сравнимо с поиском иглы в стоге сена, но почему-то я был уверен, что что-то найду. Прошел еще не один час, мне не удавалось ничего найти, но мое внимание привлек файл dyld_shared_cache_armv7. Он весил аж 300 Мб, при том что вся прошивка весила около 1 Гб.
Это оказался «пакет» динамических библиотек. Чтобы не нагружать файловую систему, Apple пакует все динамические библиотеки для всех системных программ в 1 файл. С помощью утилит разработчика от Apple я распаковал этот файл, получив большое количество файлов. Я начал опять искать в их данных слова из моего списка, пробовал их комбинировать и подбирать. Начал искать похожие по стилю написания — несколько слов, первое с маленькой буквы, остальные с заглавной, без пробелов и подчеркиваний.
После несчетного количества попыток, я смог найти слово htmlButtonRow. Если его воткнуть в код, то получал ошибку, значит оно как-то влияло и распознавалось. Следующим этапом был подбор места, куда же его воткнуть?
Наконец то код сработал, и я получил заветную строку меню:
<tableView>
<section>
<htmlButtonRow name="Первая найтивная кнопка">
</htmlButtonRow>
</section>
</tableView>
Просто отображалась строка, и текст, по нажатию ничего не происходило. Но само имя секции htmlButtonRow говорило о HTML, а значит скорее всего туда можно добавить код страницы.
Вставка HTML кода в кнопку используя <![CDATA сработала. Даже заработал переход с кнопки на сайт.
Я получил то, чего добивался, способ отобразить список разных сайтов, и переход на них. Дальше я приступил к разработке движка генерации XMLUI кода. Написал список нужных параметров для одной кнопки, засунул туда ссылку на картинку, текст и ссылку на сайт.
Получился текстовый файл конфигурации такого вида:
[Section]
Name=Facebook
Url=menu://https://m.facebook.com/
Img=https://iclouddnsbypass.com/Icons/B5w8iLX.png
В нем я создал список популярных сайтов.
Дальше я сделал шаблоны страниц, в которые добавлялись кнопки, все хранилось в памяти статически и выдавалось по требованию без обращения к диску.
Через пару дней я подправил все баги, и сервер был готов для постоянного запуска. Запуск первой версии iCloud DNS Bypass состоялся 25 декабря 2014 года. Я написал адрес DNS сервера на сайте 4pda в ветке о обходе iCloud, мне в тот же день написали модераторы сайта и предложили создать отдельную ветку. Кому интересно, вот ссылка на ветку форума 4pda.
В результате все выглядело так:
![](https://habrastorage.org/web/498/569/73e/49856973ee45455d868ba2c0101c7800.jpg)
Но из-за ограничений самого интерфейса можно было только перейти по ссылке, а последующий переход на сторонние сайты был невозможен. В итоге все могли пользоваться только списком сайтов, которые я добавлял в сервер.
Решение проблем в iCloud DNS Bypass
Спустя пару дней после запуска, мой друг Dybik запустил сайт с информацией о сервере. Я создал группу в VK и общался с пользователями сервера. Оказалось, что на новой прошивке iOS уже не работает HTML переход по ссылкам.
На тот момент уже подключились где-то 500 уникальных пользователей, и все отзывы мне помогали верить, что я делаю полезное. А я всегда мечтал запустить большой проект. Эти мысли давали мне силу не сдаваться. Я приступил опять искать названия значений XMLUI, я был уверен, что есть еще много полезных команд.
Потратив еще 3-4 часа усердных поисков и подборов, я наконец то нашел полезный тэг
<linkRow и параметр к нему accessory=«disclosure», делающий кнопку подпапкой. Это было как раз то что нужно, список заработал на всех iOS и принял более найтивный вид, так как уже не было никакого HTML.
Конечный код кнопки был таким:
<linkRow accessory="disclosure" label="Текст кнопки" image="https://иконка" shouldScaleHTMLPageToFit="true" url="http://ссылка на файл .buddyml" httpMethod="GET"/>
Мне начали присылать полезные ссылки, которые я добавлял в меню, и формировал большой список. Присылали и баги-вылеты, которые я добавлял в меню, и все могли их пробовать.
Так же я сделал языковый движок, с заменой текстов, в зависимости от языка пользователя. Пригласил всех переводить, и со временем мне присылали переводы с разных стран. Сейчас интерфейс сервера переведен уже на 50 языков, благодаря волонтерам. Так же я сделал ограничения списка сайтов для языка, допустим для русских отображаются русские сайты, китайцам китайские. Добавил чат на основе tlk.io, но позже сделал свой движок из-за спамеров.
![image](https://habrastorage.org/getpro/geektimes/post_images/5cc/054/6df/5cc0546df247f681e52a1369c820f818.png)
![image](https://habrastorage.org/getpro/geektimes/post_images/4c0/be4/647/4c0be4647de0edbfcd5c3eb934c1b89f.png)
![image](https://habrastorage.org/getpro/geektimes/post_images/eb1/36a/f10/eb136af1009fceebbe36b81d06213f2f.png)
Дальше я так же нашел параметр shouldScaleHTMLPageToFit=«true» который привел вид браузера в мобильный там где это нужно. И попутно я нашел еще один самый важный параметр isModalHTMLView=«true». С его помощью мне удалось развернуть веб страницу на весь экран, там работал поворот экрана и все переходы по ссылках без багов и ограничений. Так же работали Cookies и после перезагрузки, так что я их использовал для подсчета количества пользователей. Впервые в мире стало возможным использовать полноценный браузер без вкладок на заблокированном iOS устройстве.
Так же через кнопку HTML загрузки фото все могли пользоваться камерой, и таким же образом включать фонарик. Я добавил список избранного, и можно было его добавлять в интерфейсе. В меню были радиостанции, можно было открывать музыку, дальше открывать еще одну вкладку спец кнопкой, пока предыдущая работала, и получалась многозадачность.
Потом выяснилось что некоторые пользователи не могут подключиться к серверу. Причиной тому были либо роутеры, либо провайдеры которые заменяли все DNS запросы на свои. И подменить домен моим сервером не удавалось. Тогда я разработал маленькую программу под Windows, которая запускает встроенный DNS сервер, помогающий подключиться в локальной сети.
Вот видео из YouTube каннала EverythingApplePro о iCloud DNS Bypass, где вы можете наблюдать как выглядел интерфейс в то время.
Спустя два месяца к серверу уже подключились более 200 тыс. устройств.
![](https://habrastorage.org/web/fa8/be3/da4/fa8be3da44254b719b7ba344de6d92a5.png)
Вот видео, в реальном времени видно запросы на сервере, которые были в то время
Но, чтобы Apple заметили, что у них в разметке недочет, понадобилось подключить еще 300 тыс. устройств.
Еще одна волна мошенников
Два месяца после запуска в интернете было невозможно найти что-то другое об обходе кроме моего сервера. Это положило конец мошенническим прокси, вымогающим деньги. Но началась волна объявлений на eBay начали продавать «обход iCloud» по 30-50 USD. Наивные и отчаянные владельцы заблокированных устройств легко поддаются манипуляциям, и мошенники этим пользовались.
Заплатив за «услугу разблокировки» мошенники давали покупателям инструкцию как подключиться к моему бесплатному серверу. Многие даже не подозревали что их обокрали. Меня это злило и хотелось что-то сделать чтобы их остановить.
Я написал на всех языках страницу с сообщением, чтобы, подключившись все понимали — сервер бесплатный. Такая надпись до сих пор в интерфейсе сервера осталась. А также жаловался на eBay на мошеннические товары, но эта война была бесконечной.
Мне приходило много писем, и скидывали все что находили о взломах, я публиковал на сервере, и все пробовали. Иногда получалось выйти на рабочий стол, а иногда все разблокировалось (работало только с стертыми через сайт устройствами, вылет интерфейса приводил его в рабочее состояние до перезагрузки).
С помощью информации, которую мне присылали, выяснилось что есть много источников предлагающих за деньги разблокировать устройства, которые действительно работали. Я пытался выснить как, чтобы поделиться со всем сообществом, дабы развеять заблуждения о платных услугах.
Пользователи получают заблокированное устройство по таким причинам:
- Забыли пароль от Apple ID и потеряли чек
- Купили устройство не зная что оно заблокировано
- Стали жертвой вымогателей и потеряли доступ к своему Apple ID
- Нашли устройство в режиме пропажи
Сейчас я с уверенностью могу сказать, что есть только два способа полной отвязки:
- Фишинг, кража паролей владельца и удаление устройства с его аккаунта
- Получив оригинальный чек, звонок в поддержку Apple отвязывает устройство, которое не в режиме пропажи
- Перепайка модема или метод резистора для iPad от Pasha4ur
В прошлом году фишинговые сервисы массово распространялись, и Apple в ответ даже убрали сообщение от владельца на экране заблокированного устройства. Но это не было причиной столь широкого распространения фишинговых атак. Есть источники, которые продают информацию из аккаунта Apple ID за деньги, которую использовали для атак. Переставали они работать только в праздники по китайскому календарю. Скорее всего это работники Apple в Китае, которые переписывают информацию с админки Apple Care. Я решил проверить полученную информацию и все оказалось правдой. Там была информация адресов, телефон, секретные вопросы, без паролей и без ответов. Тогда я попытался связаться с Apple чтобы выяснить что происходит, и мои письма были успешно проигнорированы. Так что берегите свои IMEI/UDID подальше от сторонних глаз, а в Apple ID лучше не записывать настоящую информацию.
Запасной план
Я подозревал что Apple когда-нибудь заметит недочет в HTTPS ссылке, и сервер iCloud DNS Bypass залпом перестанет работать для всех устройств. Исследование альтернативных возможностей привело меня к идее создать Captive Portal. Этот механизм используется в многих отелях, аэропортах, когда вам приходится ввести свой номер на сайте, перед подключением к интернету.
Информацию о Captive Portal так же было сложно найти. Никто никогда раньше не пытался запустить портал авторизации через DNS сервер. Спустя нескольких дней исследований мне успешно удалось запустить свой собственный Captive Portal. Все работало как в обычном браузере, переход по всех ссылках работал без ограничений. В общем я был готов к тому что Apple поправит недочет, но то, что Cookies стирались по закрытию портала меня смущало.
В то время XMLUI метод работал отлично, я отвечал на письма, мне было интересно общаться с людьми. В ютубе многие снимали видео о моем сервере, и все делились информацией о поисках по полному обходу.
Оффлайн режим, полноценный файловый менеджер без интернета
Прошло почти полгода с запуска сервера и Apple не думали исправлять страницу разметки. Не помню точно, когда, но мне было скучно и я начал пытаться прочитать файловую систему iOS через XMLUI. Мне это удалось, и я мог с файловой системы открывать файлы, заранее зная их путь.
У меня появилась идея, если закидывать все файлы через программу с компьютера в доступные для записи папки на устройстве, можно создать файловый менеджер. Тогда еще можно было получить доступ к файлам без подтверждения на заблокированном устройстве, сейчас на iOS 10 это больше не получится.
Я сделал поле ввода кода для разблокировки тестовых кнопок где был файловый менеджер и пригласил несколько добровольцев тестировать.
![](https://habrastorage.org/web/74d/037/1b2/74d0371b252b4e6ba90351265da04a29.jpg)
Можно было закидывать файлы любых форматов и открывать на устройстве. Так же я слил воедино все меню и подменю в один файл, что давало возможность их загрузить на устройство 1 раз, а дальше пользоваться без интернета. Хотелось как можно быстрее поделиться новыми функциями с пользователями сервера. Сперва надо было сделать программу, которая бы синхронизировала структуру файловой системы на сервер, и идентифицировать пользователя предоставив ему список файлов с его устройства.
Меня это очень вовлекло, и я приступил к разработке. Много часов утекло и уже был готов аудио плеер с плейлистом и возможностью выбирать трек. На следующее утро ко мне посыпались email-ы с сообщениями что сервер не работает. Я проверил все, сервер был запущен, было онлайн несколько сотен пользователей. Но это были лишь счастливчики, которые не выходили с сервера.
13 мая 2015 года Apple разработчики обратили внимание на недочет, и исправили текст ссылки с HTTP на HTTPS.
В одночасье все устройства перестали подключаться к серверу и превратились обратно в бесполезные железки с логотипом яблока. И в один момент вся разработка файлового менеджера стала бесполезной. Никто так и не узнал, что я собирался запустить этот режим. Теперь чтобы вернуть этот метод нужно установить самописный сертификат в устройство для домена albert.apple.com, пока что это не удалось. На момент исправления бага, из-за которого старый метод больше не работает, было подключено пол миллиона уникальных устройств.
![](https://habrastorage.org/web/3ca/13b/d68/3ca13bd688dd4968a29cbc8f348189c2.jpg)
Я сразу же приступил к запуску Captive Portal, и переносу всего меню в веб вариант. В основу интерфейса взят Framework7, я адаптировал его под старый конфигурационный файл меню. В тот же день сервер был запущен в новом облике, в котором он и находится до сих пор.
На фейсбуке у меня была страница iCloud DNS Bypass где я публиковал только новости и обновления сервера. Прошло больше года. Почему-то Apple это не понравились и в один (прекрасный) день я увидел следующее сообщение без каких-либо предупреждений:
![](https://habrastorage.org/web/5b3/c31/db0/5b3c31db04134ced819c9741a3819866.jpeg)
Позже CloudFlare прислали email с сообщением что кто-то из подразделения Apple запросил реальный IP адрес моего сайта, так как он нарушает их авторское право. Хотя я и не понимал в чем заключается нарушение, был рад что этим все и ограничилось. За все время Apple ни разу не попытались связаться напрямую и попросить удалить то, что им не нравится.
Такая вот ирония судьбы, если бы моя жена не уронила телефон, если бы я не отвлекся от основного проекта, чтобы отдохнуть и реализовать свою задумку, то сервер iCloud DNS Bypass сегодня бы не существовал.
Сейчас количество уникальных пользователей перешло границу 15 млн. В сутки подключаются 50-60 тыс. уникальных устройств.
Текущая версия сервера работает на всех iOS существующих на данный момент. И альтернатив iCloud DNS Bypass на основе Captive Portal тоже до сих пор не существует. Сервер работает круглосуточно со времени запуска а донейтов хватает на аренду оборудования. До сих пор все HTTP подключения обслуживает одна единственная программа написанная на С++.
Вот статистика стран, где больше всего заблокированных устройств Apple, которые подключились к iCloud DNS Bypass. Всего на текущий момент 15.3 миллионов.
![](https://habrastorage.org/web/a3a/cfc/9cd/a3acfc9cd1cd4fd4b3070572e29598e2.png)
И да, вы можете попробовать Captive Portal на своем не заблокированном устройстве проделав все как по инструкции на видео из этой статьи. А так же можете просто зайти через любой браузер на страницу ui.iclouddnsbypass.com
Послесловие
Надеюсь я вас не утомил своим рассказом, и он был вам интересен. В нашей вселенной нет правил, и проект, над которым работаешь пару лет, может накрыться медным тазом, а хобби на которое потратишь две недели может превратиться в сервис, обслуживающий много миллионов людей. Желаю вам не скучать на своей работе и чаще отвлекаться на то, что действительно нравится.