Руководство

Перехват трафика Android-приложения без Wi-Fi-прокси

Приложение Busymate DevTools для Android запускает VPN-движок перехвата прямо на телефоне. Никакого настольного прокси, общего Wi-Fi и настройки прокси — и честный рассказ о том, какие приложения на самом деле расшифровываются на телефоне без root.

На Android классический путь к HTTPS приложения — прокси на ноутбуке плюс ручная запись прокси в настройках Wi-Fi телефона. Это работает, пока вы не покинете ту сеть. Busymate DevTools убирает прокси из картины: приложение регистрируется как VPN телефона, видит каждое соединение, расшифровывает выбранные вами хосты сертификатом, созданным на устройстве, и передаёт результат в тот же дашборд, которым пользуются приложение для iOS и настольный прокси.

Есть один факт о платформе, который это руководство не станет скрывать. Начиная с Android 7.0 приложение игнорирует установленные пользователем сертификаты, если явно не разрешит их. Значит, телефон может перехватывать трафик любого приложения, но расшифровать только те, что доверяют пользовательскому хранилищу сертификатов — на практике ваши собственные отладочные сборки, а также системные браузеры и похожие клиенты. Шаг пять показывает изменение в одном файле, которое делает ваше приложение одним из них, а руководство о pinning охватывает остальное.

Перед началом

Что вам понадобится

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

  • Телефон с Android 7.0 или новее. Для перехвата не нужны ни root, ни компьютер.

  • Аккаунт Busymate. Войдите через Google или по почте и паролю; вход связывает телефон с вашим дашбордом.

  • Имена хостов API, который вы хотите читать, — для списка SSL proxy. Расшифровываются только хосты из списка.

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

Шаг за шагом

Делайте по порядку

Шесть шагов. Пошаговая настройка в приложении проводит через системные запросы экран за экраном; единственная работа вне приложения — изменение отладочной сборки на шаге пять.

  1. 01

    Установите приложение и примите согласие на перехват

    Установите Busymate DevTools из Google Play или установите подписанный релизный APK со страницы для Android, если карточка ещё не видна в вашем регионе. При первом запуске приложение просит явного согласия на перехват сетевого трафика. Перехват включается только по вашему решению и остаётся выключенным, пока вы его не включите — в фоне ничего не работает, пока вы не скажете.

    Экран согласия на перехват сетевого трафика в Busymate DevTools для Android
  2. 02

    Войдите — телефон спаривается сам

    Войдите через Google или по почте и паролю. Как и на iOS, вход — это спаривание: приложение обменивает сессию на долгоживущие учётные данные устройства, хранящиеся в зашифрованном хранилище приложения, и через мгновение телефон появляется как Online на вкладке Devices дашборда. Главный экран показывает имя устройства, значок аккаунта, карточку с переключателем перехвата и карточку готовности с шестерёнкой для настроек.

    Главный экран Busymate DevTools на Android с переключателем перехвата и карточкой готовности
  3. 03

    Добавьте домены, которые нужно расшифровывать

    Откройте настройки через шестерёнку и перейдите в SSL Proxying. Перечислите хосты, чьи HTTPS-тела вы хотите читать; всё остальное остаётся зашифрованным end-to-end и показывается как имя хоста со счётчиком запросов. Звёздочка с точкой в начале охватывает домен и все его поддомены. В том же разделе находятся элементы управления расшифровкой и список Ignore Hosts для фонового шума, который вам никогда не нужен в ленте.

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

  4. 04

    Пройдите пошаговую настройку

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

    Этот сертификат принадлежит только вашему устройству — он создаётся на телефоне и никогда не загружается с общего сервера — и именно он позволяет приложению предъявлять доверенный сертификат для каждого хоста, который вы решили расшифровывать.

    Пошаговая настройка перехвата в Busymate DevTools для Android
  5. 05

    Заставьте своё приложение доверять пользовательскому хранилищу сертификатов

    Этот шаг не может пропустить ни один инструмент перехвата на Android. Начиная с Android 7.0 приложение, нацеленное на этот уровень или выше, по умолчанию доверяет только системному хранилищу сертификатов, так что ваше приложение закроет соединение, как только телефон предъявит созданный сертификат. Решение — небольшая конфигурация сетевой безопасности, ограниченная отладочными сборками, которая добавляет пользовательское хранилище рядом с системным. Android полностью вырезает блок отладочных переопределений из релизных сборок, поэтому он не может попасть в продакшен.

    Создайте приведённый ниже файл в приложении, оставьте системный якорь рядом с пользовательским, чтобы обычный HTTPS продолжал работать, сошлитесь на него из тега application в манифесте, затем пересоберите и установите отладочную сборку. Переустановка старого бинарника ничего не даст — доверие живёт в только что собранном приложении.

    Конфигурация сетевой безопасности только для отладки, затем ссылка в манифесте
    xml
    <!-- app/src/main/res/xml/network_security_config.xml -->
    <network-security-config>
      <debug-overrides>
        <trust-anchors>
          <certificates src="user" />
          <certificates src="system" />
        </trust-anchors>
      </debug-overrides>
    </network-security-config>
    
    <!-- AndroidManifest.xml -->
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ... >
  6. 06

    Включите перехват и изучайте

    Включите переключатель перехвата. Android покажет значок ключа VPN в строке состояния, и каждый запрос телефона начнёт попадать в ленту дашборда и на экран Network в приложении — строка состояния, счётчики статистики, чипы категорий и список, сгруппированный по хостам, с поиском внизу. Коснитесь хоста, затем запроса, чтобы увидеть полные детали: вкладки General, Header, Summary, Timing и Body как для запроса, так и для ответа.

    Откройте своё приложение и вызовите запрос. Его HTTPS-записи теперь показывают читаемые заголовки и расшифрованное тело вместо непрозрачного туннеля. Когда закончите, выключите перехват — VPN отключится, а сертификат и приложение можно удалить как любые другие.

    Лента Network в реальном времени в Busymate DevTools для Android

Устранение неполадок

Что может пойти не так

Большинство проблем на Android — это строгость платформы к сертификатам, и лента подскажет, на какую из них вы наткнулись.

  • Трафик вашего собственного приложения всё ещё показан зашифрованным

    Конфигурация сетевой безопасности не применилась. Убедитесь, что после её добавления вы пересобрали и установили отладочную сборку, что манифест указывает на файл и что сертификат лежит в пользовательском хранилище. Если конфигурация живёт в отладочном наборе исходников, атрибут манифеста тоже должен быть в отладочном манифесте.

  • Приложение из магазина, которое вы не собирали, остаётся непрозрачным

    Ожидаемо на телефоне без root: это приложение никогда не разрешало пользовательские сертификаты, поэтому телефон записывает соединение только как метаданные. Для расшифровки нужно рутованное устройство, где сертификат можно положить в системное хранилище — уровень, на котором работает ферма телефонов, — и даже это не откроет приложение, закрепляющее собственный сертификат.

  • Запрос Android на VPN появляется снова и снова

    Активно другое VPN-приложение, или предыдущее разрешение отозвано в системных настройках VPN. Одновременно может работать только один VPN; отключите другой и снова одобрите запрос из пошаговой настройки.

  • Уведомление о перехвате так и не появилось

    Разрешение на уведомления было отклонено при первом запросе. Включите его для Busymate DevTools в системных настройках приложений; пошаговая настройка перепроверит его и отметит шаг выполненным.

  • Хост в списке, но правило по пути не срабатывает

    Правилам, сопоставляющим путь, нужен расшифрованный хост; у хоста, проходящего зашифрованным, видно только имя. Сначала добавьте хост в список SSL proxy, затем перепроверьте правило.

ЧаВО

Частые вопросы

Нужен ли root?

Не для перехвата и не для расшифровки ваших собственных отладочных сборок или клиентов, доверяющих пользовательскому хранилищу. Root нужен только чтобы перенести сертификат в системное хранилище, чтобы ему доверяли приложения, которые вы не собирали.

Это под капотом прокси?

Нет. Приложение зарегистрировано как VPN телефона, поэтому видит трафик каждого приложения по Wi-Fi и мобильным данным, не трогая никаких настроек прокси. Для браузеров и бэкендов существует отдельный настольный прокси, но это руководство его не использует.

Что происходит с приложениями не из моего списка?

Они продолжают работать ровно как раньше. Их соединения записываются только как хост и тайминги и никогда не расшифровываются, а Ignore Hosts может полностью убрать самые шумные из ленты.

Трафик вашего приложения, прочитанный на телефоне

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

Ask your mate