Перехват трафика Android-приложения
Приложение 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. Расшифровываются только хосты из списка.
Для вашего собственного приложения: возможность пересобрать его отладочную сборку с конфигурацией сетевой безопасности из одного файла, чтобы оно доверяло сертификату, созданному телефоном.
Делайте
Шесть шагов. Пошаговая настройка в приложении проводит через системные запросы экран за экраном; единственная работа вне приложения — изменение отладочной сборки на шаге пять.
- 01
Установите приложение и примите согласие на перехват
Установите Busymate DevTools из Google Play или установите подписанный релизный APK со страницы для Android, если карточка ещё не видна в вашем регионе. При первом запуске приложение просит явного согласия на перехват сетевого трафика. Перехват включается только по вашему решению и остаётся выключенным, пока вы его не включите — в фоне ничего не работает, пока вы не скажете.


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


- 03
Добавьте домены, которые нужно расшифровывать
Откройте настройки через шестерёнку и перейдите в SSL Proxying. Перечислите хосты, чьи HTTPS-тела вы хотите читать; всё остальное остаётся зашифрованным end-to-end и показывается как имя хоста со счётчиком запросов. Звёздочка с точкой в начале охватывает домен и все его поддомены. В том же разделе находятся элементы управления расшифровкой и список Ignore Hosts для фонового шума, который вам никогда не нужен в ленте.
Делать это на телефоне не обязательно. Дашборд редактирует тот же список для устройства, и изменение там сразу уходит на телефон, так что коллега может добавить хост, пока вы продолжаете тестировать.
- 04
Пройдите пошаговую настройку
Коснитесь карточки готовности. Пошаговая настройка проводит через три системных запроса экран за экраном: разрешить уведомление о перехвате, установить сертификат, созданный приложением специально для вас, в пользовательское хранилище сертификатов телефона и одобрить собственный запрос Android на VPN-подключение. Каждый шаг отмечается выполненным по мере прохождения, а карточка становится готовой, когда пройдены все три.
Этот сертификат принадлежит только вашему устройству — он создаётся на телефоне и никогда не загружается с общего сервера — и именно он позволяет приложению предъявлять доверенный сертификат для каждого хоста, который вы решили расшифровывать.


- 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" ... > - 06
Включите перехват и изучайте
Включите переключатель перехвата. Android покажет значок ключа VPN в строке состояния, и каждый запрос телефона начнёт попадать в ленту дашборда и на экран Network в приложении — строка состояния, счётчики статистики, чипы категорий и список, сгруппированный по хостам, с поиском внизу. Коснитесь хоста, затем запроса, чтобы увидеть полные детали: вкладки General, Header, Summary, Timing и Body как для запроса, так и для ответа.
Откройте своё приложение и вызовите запрос. Его HTTPS-записи теперь показывают читаемые заголовки и расшифрованное тело вместо непрозрачного туннеля. Когда закончите, выключите перехват — VPN отключится, а сертификат и приложение можно удалить как любые другие.


Что может
Большинство проблем на Android — это строгость платформы к сертификатам, и лента подскажет, на какую из них вы наткнулись.
Трафик вашего собственного приложения всё ещё показан зашифрованным
Конфигурация сетевой безопасности не применилась. Убедитесь, что после её добавления вы пересобрали и установили отладочную сборку, что манифест указывает на файл и что сертификат лежит в пользовательском хранилище. Если конфигурация живёт в отладочном наборе исходников, атрибут манифеста тоже должен быть в отладочном манифесте.
Приложение из магазина, которое вы не собирали, остаётся непрозрачным
Ожидаемо на телефоне без root: это приложение никогда не разрешало пользовательские сертификаты, поэтому телефон записывает соединение только как метаданные. Для расшифровки нужно рутованное устройство, где сертификат можно положить в системное хранилище — уровень, на котором работает ферма телефонов, — и даже это не откроет приложение, закрепляющее собственный сертификат.
Запрос Android на VPN появляется снова и снова
Активно другое VPN-приложение, или предыдущее разрешение отозвано в системных настройках VPN. Одновременно может работать только один VPN; отключите другой и снова одобрите запрос из пошаговой настройки.
Уведомление о перехвате так и не появилось
Разрешение на уведомления было отклонено при первом запросе. Включите его для Busymate DevTools в системных настройках приложений; пошаговая настройка перепроверит его и отметит шаг выполненным.
Хост в списке, но правило по пути не срабатывает
Правилам, сопоставляющим путь, нужен расшифрованный хост; у хоста, проходящего зашифрованным, видно только имя. Сначала добавьте хост в список SSL proxy, затем перепроверьте правило.
Частые
Нужен ли root?
Не для перехвата и не для расшифровки ваших собственных отладочных сборок или клиентов, доверяющих пользовательскому хранилищу. Root нужен только чтобы перенести сертификат в системное хранилище, чтобы ему доверяли приложения, которые вы не собирали.
Это под капотом прокси?
Нет. Приложение зарегистрировано как VPN телефона, поэтому видит трафик каждого приложения по Wi-Fi и мобильным данным, не трогая никаких настроек прокси. Для браузеров и бэкендов существует отдельный настольный прокси, но это руководство его не использует.
Что происходит с приложениями не из моего списка?
Они продолжают работать ровно как раньше. Их соединения записываются только как хост и тайминги и никогда не расшифровываются, а Ignore Hosts может полностью убрать самые шумные из ленты.
Трафик вашего приложения,
Установите приложение, пройдите пошаговую настройку, добавьте отладочную конфигурацию из одного файла и смотрите, как запросы вашего приложения приходят расшифрованными.