Вы настраиваете прокси, подключаете устройство — и всё равно приложение не показывает трафик или падает с ошибкой. Скорее всего, проблема в SSL Pinning: защите, которую разработчики намеренно встраивают в приложение, чтобы заблокировать перехват HTTPS-запросов. Это головная боль для всех, кто анализирует поведение конкурентских приложений, тестирует рекламные интеграции или изучает API маркетплейсов.
В этом руководстве разберём, что такое SSL Pinning, почему он мешает работе с прокси, и как его обойти — пошагово, без лишней теории.
Что такое SSL Pinning и зачем его встраивают в приложения
SSL Pinning (или Certificate Pinning) — это механизм безопасности, при котором мобильное приложение заранее «прошивает» в себя конкретный SSL-сертификат или публичный ключ сервера. При каждом подключении приложение проверяет: совпадает ли сертификат сервера с тем, что зашито внутри? Если нет — соединение обрывается.
В обычной HTTPS-схеме браузер или приложение доверяют любому сертификату, подписанному доверенным центром сертификации (CA). Именно этим пользуются прокси-инструменты вроде Charles Proxy или mitmproxy: они подставляют свой сертификат, расшифровывают трафик, и пересылают его дальше. Пользователь видит весь обмен данными в открытом виде.
SSL Pinning ломает эту схему. Приложение видит сертификат прокси-инструмента, понимает, что он не совпадает с «родным» сертификатом сервера, и отказывается работать. Именно поэтому вы видите ошибки вроде SSL handshake failed, Certificate verification failed или просто пустой экран в приложении.
Разработчики внедряют SSL Pinning по нескольким причинам:
- Защита от атак типа Man-in-the-Middle (MITM)
- Предотвращение реверс-инжиниринга API
- Защита от ботов и автоматизированных запросов
- Скрытие внутренней логики монетизации и рекламных интеграций
Среди приложений, которые активно используют SSL Pinning: банковские приложения, маркетплейсы (Wildberries, Ozon), рекламные SDK (Facebook, TikTok), платёжные системы и крупные e-commerce платформы. Именно поэтому обход SSL Pinning так важен для маркетологов, арбитражников и специалистов по анализу конкурентов.
Почему прокси не работает, если в приложении есть SSL Pinning
Когда вы настраиваете прокси на телефоне (например, через настройки Wi-Fi), весь HTTP и HTTPS трафик проходит через прокси-сервер. Для HTTP это работает без проблем — трафик и так открытый. Но для HTTPS прокси-инструмент должен «представиться» сервером, подставив свой сертификат.
Вот где возникает конфликт. Обычные приложения принимают этот сертификат, если вы установили корневой сертификат прокси-инструмента в системное хранилище устройства. Но приложения с SSL Pinning игнорируют системное хранилище — они проверяют только свой «зашитый» сертификат.
Как это выглядит на практике:
Вы подключаете Charles Proxy, устанавливаете его корневой сертификат на iPhone, запускаете приложение маркетплейса — и видите ошибку или пустой экран. В логах Charles — пустота или записи с ошибкой SSL. Это классическая картина SSL Pinning в действии.
Важно понимать: проблема не в прокси-сервере (резидентном, мобильном или дата-центровом). Прокси здесь выступает как промежуточный узел для маршрутизации трафика. Проблема — в самом приложении, которое отказывается принимать подменённый сертификат. Поэтому решение нужно искать на уровне приложения или устройства, а не на уровне прокси-сервера.
Существует несколько типов SSL Pinning, и они отличаются по сложности обхода:
| Тип Pinning | Что проверяется | Сложность обхода |
|---|---|---|
| Certificate Pinning | Полный сертификат сервера | Средняя |
| Public Key Pinning | Публичный ключ из сертификата | Высокая |
| Hash Pinning | Хэш сертификата или ключа | Высокая |
| Network Security Config | Конфиг-файл Android (XML) | Низкая–средняя |
Инструменты для перехвата трафика: Charles, mitmproxy, Burp Suite
Прежде чем переходить к обходу SSL Pinning, нужно выбрать инструмент для перехвата трафика. Все они работают по одному принципу: поднимают локальный прокси-сервер, через который проходит трафик устройства. Разница — в удобстве, функциях и цене.
Charles Proxy
Самый популярный инструмент среди маркетологов и тестировщиков без глубокого технического бэкграунда. Имеет графический интерфейс, работает на Windows и macOS. Позволяет видеть все запросы и ответы в удобном дереве, фильтровать по домену, редактировать запросы на лету. Платный, но есть пробный период. Отлично подходит для анализа API маркетплейсов и рекламных SDK.
mitmproxy
Бесплатный инструмент с открытым исходным кодом. Работает через командную строку, но есть веб-интерфейс (mitmweb). Очень гибкий: поддерживает скрипты для автоматической модификации трафика. Хорошо подходит для тех, кто хочет автоматизировать анализ или интегрировать перехват в пайплайн тестирования. Чуть сложнее в настройке, чем Charles.
Burp Suite
Профессиональный инструмент для тестирования безопасности. Имеет бесплатную Community-версию с базовым функционалом. Особенно удобен для детального анализа запросов, работы с cookies и сессиями. Активно используется при анализе API конкурентов и исследовании рекламных интеграций. Интерфейс сложнее Charles, но возможности шире.
| Инструмент | Интерфейс | Цена | Для кого |
|---|---|---|---|
| Charles Proxy | GUI (удобный) | Платный (~$50) | Маркетологи, аналитики |
| mitmproxy | CLI + Web UI | Бесплатно | Технические специалисты |
| Burp Suite | GUI (сложный) | Free / Pro | Тестировщики безопасности |
Для большинства задач маркетолога или арбитражника — анализа рекламных запросов, изучения API маркетплейса, мониторинга трафика приложения — Charles Proxy будет оптимальным выбором. Если нужна автоматизация или работа без GUI — mitmproxy.
Методы обхода SSL Pinning: от простых к продвинутым
Существует несколько подходов к обходу SSL Pinning. Они различаются по сложности, требованиям к устройству и надёжности. Рассмотрим каждый — от самого простого к самому мощному.
Метод 1: Установка сертификата в системное хранилище (только Android)
Самый простой способ — но работает только для приложений, которые используют системное хранилище сертификатов. На Android до версии 7.0 пользовательские сертификаты принимались наравне с системными. Начиная с Android 7.0, приложения по умолчанию игнорируют пользовательские CA. Если приложение явно разрешает пользовательские сертификаты в network_security_config.xml — этот метод сработает. Для большинства современных приложений с SSL Pinning — не поможет.
Метод 2: Frida — динамическое патчинг приложения
Frida — это инструмент для динамической инструментации приложений. Он позволяет «на лету» перехватывать вызовы функций внутри приложения и подменять их поведение. Для обхода SSL Pinning существуют готовые скрипты, которые отключают проверку сертификата без модификации APK. Требует root на Android или jailbreak на iOS. Это наиболее надёжный и универсальный метод.
Метод 3: Патчинг APK (Android)
Декомпиляция APK-файла с помощью apktool, удаление или модификация кода SSL Pinning, повторная сборка и подпись приложения. Не требует root, но требует технических навыков работы с smali-кодом. Хорошо работает для приложений с простой реализацией Pinning через Network Security Config. Для приложений с нативным кодом (C/C++) — значительно сложнее.
Метод 4: Objection — обёртка над Frida для новичков
Objection — это инструмент на базе Frida с более простым интерфейсом командной строки. Содержит встроенные команды для обхода SSL Pinning одной командой: android sslpinning disable. Подходит тем, кто не хочет разбираться с написанием Frida-скриптов вручную. Требует root или jailbreak.
Метод 5: Использование эмулятора с root
Вместо физического устройства можно использовать Android-эмулятор (например, Genymotion или стандартный AVD из Android Studio) с включённым root-доступом. Это позволяет устанавливать системные сертификаты и запускать Frida без риска «окирпичить» реальный телефон. Удобный вариант для регулярного тестирования в рабочей среде.
Пошаговый обход SSL Pinning на Android
Разберём наиболее практичный сценарий: Android-устройство или эмулятор с root, инструмент Objection + Frida, прокси-инструмент Charles Proxy или mitmproxy.
Что понадобится:
- Android-устройство с root или эмулятор Genymotion
- Компьютер с установленным Python 3
- Frida-server для Android (скачать с GitHub)
- Objection (устанавливается через pip)
- Charles Proxy или mitmproxy на компьютере
- ADB (Android Debug Bridge)
Шаг 1: Настройте прокси-инструмент на компьютере
Запустите Charles Proxy или mitmproxy. По умолчанию они слушают порт 8888 (Charles) или 8080 (mitmproxy). Запомните IP-адрес вашего компьютера в локальной сети — он понадобится для настройки прокси на устройстве.
Шаг 2: Настройте прокси на Android-устройстве
Зайдите в настройки Wi-Fi → выберите вашу сеть → нажмите «Изменить» → «Дополнительные параметры» → Прокси: Вручную. Укажите IP компьютера и порт инструмента. Теперь весь трафик устройства идёт через ваш прокси.
Шаг 3: Установите сертификат прокси-инструмента
Откройте браузер на устройстве и перейдите на адрес chls.pro/ssl (для Charles) или mitm.it (для mitmproxy). Скачайте и установите сертификат. На Android с root дополнительно переместите сертификат в системное хранилище — это нужно для некоторых приложений.
Шаг 4: Запустите Frida-server на устройстве
Скачайте frida-server нужной версии с GitHub (версия должна совпадать с версией Frida на компьютере). Загрузите файл на устройство через ADB:
adb push frida-server /data/local/tmp/ adb shell "chmod 755 /data/local/tmp/frida-server" adb shell "su -c /data/local/tmp/frida-server &"
Шаг 5: Подключитесь через Objection и отключите SSL Pinning
На компьютере установите Objection через pip и запустите его, указав имя пакета приложения:
pip install objection objection -g com.example.app explore
После подключения в консоли Objection выполните команду отключения SSL Pinning:
android sslpinning disable
После этого откройте приложение и начните взаимодействовать с ним. Трафик появится в Charles или mitmproxy в расшифрованном виде.
Шаг 6: Для приложений с Network Security Config
Если приложение использует network_security_config.xml, можно декомпилировать APK через apktool, найти этот файл и добавить разрешение для пользовательских сертификатов, затем пересобрать и переподписать APK. Это работает без root, но требует отключения проверки подписи приложения.
Пошаговый обход SSL Pinning на iOS
На iOS ситуация сложнее: для большинства методов требуется jailbreak. Без него возможности ограничены. Рассмотрим оба варианта.
Вариант А: С jailbreak (iOS 14-16, checkra1n / palera1n)
Шаг 1: Настройте прокси
На iPhone зайдите в Настройки → Wi-Fi → ваша сеть → Настроить прокси → Вручную. Укажите IP компьютера и порт Charles/mitmproxy.
Шаг 2: Установите сертификат
Откройте Safari и перейдите на chls.pro/ssl. Установите профиль через Настройки → Общие → VPN и управление устройством. Затем активируйте его в Настройки → Основные → Доверие сертификатам.
Шаг 3: Установите SSL Kill Switch 2 через Cydia/Sileo
SSL Kill Switch 2 — это твик для jailbroken iOS, который отключает SSL Pinning глобально для всех приложений. Найдите его в Cydia или Sileo, установите, перезагрузите устройство. После этого большинство приложений перестанут проверять сертификаты, и трафик будет виден в Charles.
Шаг 4: Альтернатива — Frida + Objection на iOS
Аналогично Android: установите frida-server через Cydia, подключитесь через Objection на компьютере и выполните ios sslpinning disable. Этот метод более гибкий и работает для приложений, которые SSL Kill Switch 2 не покрывает.
Вариант Б: Без jailbreak (ограниченные возможности)
Без jailbreak обойти SSL Pinning на iOS значительно сложнее. Один из вариантов — использование инструмента Proxyman с его функцией SSL Proxying для iOS без jailbreak. Proxyman устанавливает специальный профиль на устройство и использует VPN-интерфейс для перехвата трафика. Работает для многих приложений, но не для всех с жёстким Pinning.
Другой вариант — использовать iOS-симулятор в Xcode. Симулятор не имеет SSL Pinning на уровне ОС, и многие приложения можно запустить в нём (если они поддерживают симулятор). Но это подходит только для тестирования, а не для анализа продакшн-приложений.
Какой тип прокси выбрать для тестирования мобильных приложений
После того как SSL Pinning обойдён, трафик приложения проходит через ваш прокси-инструмент (Charles, mitmproxy). Но для некоторых задач нужно ещё и направить трафик через внешний прокси-сервер — например, чтобы приложение «видело» другой регион или другой IP-адрес. Здесь важно правильно выбрать тип прокси.
Резидентные прокси
Резидентные прокси используют IP-адреса реальных домашних пользователей. Мобильные приложения, особенно рекламные SDK и маркетплейсы, доверяют таким IP значительно больше, чем адресам дата-центров. Если вы анализируете поведение приложения в зависимости от региона — резидентные прокси дадут наиболее «чистую» картину, приближённую к реальному пользователю.
Мобильные прокси
Мобильные прокси работают через реальные мобильные сети (3G/4G/5G). Это особенно актуально при тестировании мобильных приложений: IP из мобильной сети имеет наивысший уровень доверия у Facebook Ads SDK, TikTok и других рекламных платформ. Если ваша цель — анализировать рекламные запросы приложения или тестировать поведение SDK в мобильной среде, мобильные прокси — оптимальный выбор.
Прокси дата-центров
Прокси дата-центров подходят для задач, где важна скорость, а не «натуральность» IP: например, для массового парсинга открытых API или тестирования производительности. Для анализа рекламных SDK и защищённых приложений они менее предпочтительны, так как легко распознаются антифрод-системами.
| Тип прокси | Доверие приложений | Скорость | Лучший сценарий |
|---|---|---|---|
| Резидентные | Высокое | Средняя | Анализ по регионам, маркетплейсы |
| Мобильные | Максимальное | Средняя | Рекламные SDK, Facebook, TikTok |
| Дата-центры | Низкое | Высокая | Парсинг открытых API, нагрузочное тестирование |
Практические сценарии: арбитраж, e-commerce, маркетинг
Разберём конкретные задачи, ради которых маркетологи и арбитражники идут на обход SSL Pinning.
Сценарий 1: Анализ рекламного SDK Facebook и TikTok
Арбитражники, работающие с Facebook Ads и TikTok Ads, часто хотят понять, какие данные SDK передаёт на сервер: какие события фиксируются, как формируются запросы атрибуции, какие параметры влияют на оптимизацию кампаний. Без обхода SSL Pinning это невозможно — оба SDK используют Certificate Pinning.
После обхода через Frida/Objection можно увидеть в Charles все события SDK: установки, покупки, регистрации, — и убедиться, что трекинг настроен корректно. Это особенно важно при настройке CAPI (Conversions API) и проверке дедупликации событий.
Сценарий 2: Мониторинг цен на Wildberries и Ozon через приложение
Приложения Wildberries и Ozon используют SSL Pinning для защиты своих API. Селлеры, которые хотят мониторить цены конкурентов через мобильное приложение (а не веб-версию), сталкиваются с этой защитой. После обхода SSL Pinning можно изучить структуру API-запросов и понять, какие эндпоинты используются для получения данных о ценах, наличии и рейтинге товаров.
Важно: полученные данные можно использовать только для личного анализа. Автоматизированный парсинг через воспроизведение API-запросов нарушает условия использования платформ.
Сценарий 3: Тестирование рекламных креативов из разных регионов
Маркетологи, которые тестируют рекламу в Facebook Ads и TikTok Ads из разных регионов, хотят видеть, как приложение ведёт себя при подключении через IP из конкретной страны. Комбинация обхода SSL Pinning + резидентного прокси из нужного региона позволяет увидеть, какой контент и какие цены показываются пользователям из этого региона.
Сценарий 4: QA-тестирование собственного приложения
Если вы разрабатываете собственное мобильное приложение или работаете с командой разработки, перехват трафика с обходом SSL Pinning — стандартная практика QA. Это позволяет проверить корректность запросов, найти утечки данных, проверить работу аналитики и рекламных SDK в реальных условиях перед релизом.
Сценарий 5: Анализ конкурентов в нише мобильных игр и приложений
Маркетологи мобильных игр используют перехват трафика для анализа монетизации конкурентов: какие офферы показываются, как работает система внутриигровых покупок, какие рекламные сети используются. Это помогает строить более эффективные стратегии UA (User Acquisition) и монетизации.
Чек-лист: проверь настройку перед тестом
Перед тем как приступить к перехвату трафика, убедитесь, что всё настроено корректно. Вот полный чек-лист:
✅ Чек-лист настройки
- Прокси-инструмент (Charles/mitmproxy) запущен на компьютере и слушает нужный порт
- Компьютер и устройство находятся в одной Wi-Fi сети
- На устройстве в настройках Wi-Fi указан правильный IP компьютера и порт прокси
- Корневой сертификат прокси-инструмента установлен на устройстве
- На Android: сертификат перемещён в системное хранилище (если есть root)
- На iOS: сертификат активирован в разделе «Доверие сертификатам»
- Frida-server запущен на устройстве (если используете Frida/Objection)
- Версия Frida на компьютере совпадает с версией frida-server на устройстве
- Objection успешно подключился к процессу приложения
- Команда
android sslpinning disableвыполнена без ошибок - В Charles/mitmproxy появляются записи при работе с приложением
- HTTPS-запросы расшифровываются (не показывают ошибку SSL)
Частые проблемы и их решения
| Проблема | Причина | Решение |
|---|---|---|
| Трафик не появляется в Charles | Неверный IP/порт прокси | Проверьте IP компьютера и порт |
| SSL ошибка в Charles | Сертификат не установлен или не активирован | Переустановите и активируйте сертификат |
| Frida не подключается | Несовпадение версий frida/frida-server | Синхронизируйте версии |
| Objection не отключает Pinning | Нативный код (C/C++) с Pinning | Используйте кастомный Frida-скрипт |
| Приложение крашится после bypass | Приложение проверяет целостность | Отключите также root detection через Objection |
Заключение
SSL Pinning — серьёзная защита, но не непреодолимая. Для большинства практических задач маркетолога или арбитражника достаточно связки: Android-эмулятор с root + Frida/Objection + Charles Proxy. На iOS — SSL Kill Switch 2 при наличии jailbreak или Proxyman без него. Главное — правильно настроить цепочку: прокси-инструмент на компьютере → трафик через него → обход Pinning на устройстве.
Помните, что обход SSL Pinning в сторонних приложениях допустим только для личного анализа и исследования. Автоматизированный парсинг и воспроизведение API-запросов нарушает условия использования большинства платформ.
Если ваша задача — анализировать трафик мобильных приложений в разных регионах или тестировать поведение рекламных SDK из конкретных стран, вам понадобится не только обход SSL Pinning, но и качественный прокси-сервер. Для работы с рекламными платформами (Facebook Ads, TikTok Ads) и маркетплейсами рекомендуем использовать мобильные прокси — они имеют наивысший уровень доверия у антифрод-систем и позволяют корректно эмулировать реальное мобильное окружение.