Как перехватывать HTTPS-трафик на Android без сертификатов и ручной настройки прокси

16 авг 2026

Репозиторий давно не обновлялся

Последнее обновление было 6 месяцев назад.

465
41
3
6 месяцев

Любой Android-разработчик хотя бы раз тратил половину рабочего дня на настройку сетевого отладчика. Сценарий всегда один и тот же: нужно посмотреть, что приложение отправляет на бэкенд, а в ответ прилетает SSLHandshakeException.

Дальше начинается ритуал. Сначала вы генерируете самоподписанный CA-сертификат. Затем пытаетесь установить его в хранилище доверенных сертификатов на тестовом телефоне. Начиная с Android 7.0 (API 24), система по умолчанию игнорирует пользовательские сертификаты, поэтому приходится править network_security_config.xml, прописывать trust-anchors для дебаг-сборок и пересобирать APK. Если же в проекте настроен SSL Pinning или вы тестируете на Android 14, где работу с системными сертификатами усложнили еще сильнее, простая проверка заголовка ответа превращается в отдельную инженерную задачу.

Библиотека atlantis-android от команды Proxyman решает эту головную боль радикально: она убирает необходимость настраивать прокси и трогать системные сертификаты устройства.

Capture HTTPS from Android app

В чем идея Atlantis

Традиционные инструменты вроде Charles, Fiddler или самого Proxyman обычно работают по схеме Man-in-the-Middle (MitM). Устройство перенаправляет весь трафик на IP-адрес компьютера, а десктопное приложение перехватывает запросы, расшифровывает их своим сертификатом и шлет дальше. Из-за этого и возникают сложности с доверием к сертификатам и настройкой Wi-Fi.

Реклама

Atlantis работает иначе. Это компактная библиотека на Kotlin, которая встраивается прямо в дебаг-сборку приложения в виде перехватчика для сетевого клиента. Перехватчик считывает параметры запросов и ответов в тот момент, когда приложение уже сформировало их или только что расшифровало. Затем библиотека сериализует эти данные, сжимает их через GZIP и по отдельному локальному сокету передает напрямую в приложение Proxyman на macOS.

В результате вы получаете детальный лог сетевой активности без вмешательства в настройки Android, без правок манифеста и без манипуляций с сертификатами.

Что умеет библиотека

Atlantis закрывает большинство повседневных задач сетевого дебага:

  • Перехват обычных HTTP и HTTPS запросов прямо из OkHttp.
  • Логирование событий WebSocket: открытие соединения, отправка сообщений, входящие пакеты и закрытие сессии.
  • Полная совместимость с популярными сетевыми клиентами, включая Retrofit 2.9+ и Apollo Kotlin 3.x/4.x.
  • Автоматический поиск запущенного Proxyman в локальной сети через Network Service Discovery (mDNS).

Если вы запускаете проект на официальном эмуляторе Android, библиотека умеет подключаться к хостовой машине напрямую, минуя сетевое обнаружение.

Как подключить к проекту

Для работы библиотеке нужен Android с API 26 (Android 8.0) или новее, OkHttp версии 4.x или 5.x, а также Kotlin версии не ниже 1.9.

Сначала добавьте репозиторий JitPack в файл settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://jitpack.io") }
    }
}

После этого подключите зависимость в build.gradle.kts вашего приложения. Подключать лучше строго через debugImplementation, чтобы отладочный код не попал в релизный билд:

dependencies {
    debugImplementation("com.github.ProxymanApp:atlantis-android:v1.0.0")
}

Также библиотека доступна и в Maven Central под артефактом com.proxyman:atlantis-android:1.0.0.

Быстрый старт

Интеграция занимает всего несколько строк кода. Сначала инициализируем Atlantis в классе приложения:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        
        if (BuildConfig.DEBUG) {
            Atlantis.start(this)
        }
    }
}

Затем добавляем интерцептор в конфигурацию OkHttpClient:

val okHttpClient = OkHttpClient.Builder()
    .addInterceptor(Atlantis.getInterceptor())
    .build()

Если вы используете Retrofit, передайте этот экземпляр okHttpClient в Retrofit.Builder(), и все запросы начнут автоматически отображаться в окне Proxyman.

Работа с WebSocket

Если в приложении есть вебсокеты, стандартного интерцептора OkHttp будет недостаточно, так как сообщения передаются в рамках уже открытого соединения. Для таких случаев в библиотеке есть специальная обертка для слушателя:

val originalListener = object : WebSocketListener() {
    override fun onOpen(webSocket: WebSocket, response: Response) {
        // обработка открытия
    }
    override fun onMessage(webSocket: WebSocket, text: String) {
        // входящее сообщение
    }
}

val wrappedListener = Atlantis.wrapWebSocketListener(originalListener)
okHttpClient.newWebSocket(request, wrappedListener)

Теперь в десктопном клиенте можно наблюдать за входящими и исходящими фреймами в реальном времени.

Что внутри

Исходный код библиотеки минималистичен и открыт под лицензией Apache 2.0. В репозитории почти нет сторонних тяжелых зависимостей.

Архитектура состоит из нескольких понятных модулей:

  • AtlantisInterceptor и AtlantisWebSocketListener перехватывают данные на уровне сетевого стека.
  • GzipCompression и Base64Utils упаковывают тела запросов и бинарные пейлоады, уменьшая нагрузку на канал связи между телефоном и компьютером.
  • NsdServiceDiscovery отвечает за поиск сервиса _proxyman._tcp в локальной сети через Android NSD API.
  • Transporter открывает TCP-соединение с десктопным приложением и пересылает структурированные пакеты.

Благодаря сжатию трафика отладка практически не влияет на скорость работы самого приложения.

Ограничения, о которых стоит знать

Перед тем как внедрять библиотеку, нужно учесть два момента.

Во-первых, Atlantis привязан к десктопному клиенту Proxyman. Если в вашей команде привыкли использовать исключительно Wireshark или Charles, передать туда данные через этот интерцептор не получится.

Во-вторых, библиотека перехватывает трафик только тех клиентов, куда вы явно добавили интерцептор. Если в приложении сторонний SDK делает сетевые вызовы через собственный HttpURLConnection или Cronet, эти запросы Atlantis не увидит. Для полного анализа сторонних бинарников по-прежнему придется использовать классический MitM-прокси.

Стоит ли пробовать

Если ваша основная рабочая машина работает на macOS и вы уже используете Proxyman для отладки iOS или бэкенда, atlantis-android экономит массу времени. Вы навсегда забываете о настройке Wi-Fi прокси на тестовых смартфонах, сбросе сертификатов и правках network_security_config. Достаточно собрать debug-сборку, открыть приложение на телефоне, и весь сетевой обмен сразу появляется на экране.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.