Перехват HTTP(S) трафика Android приложения
Android Studio предоставляет вам возможность проверять сетевой трафик вашего собственного приложения. Могут возникнуть ситуации, когда вы захотите увидеть, какие API вызовы выполняются в других приложениях. Например, при парсинге какого-нибудь сайта, на API точке может стоять защита от парсинга. Бывает, что в мобильной версии сайта (мобильном приложении) используются другие API вызовы, у которых может не быть защиты.
В таких случаях может быть удобно иметь специально подготовленное виртуальное устройство Android (AVD), готовое посмотреть, какими HTTP(S) запросами обменивается устройство и сервер.
В этом руководстве объясняется, как настроить специально подготовленный AVD, который можно использовать для мониторинга сетевого трафика Android приложения, установленного в эмуляторе, даже если оно обменивается данными через защищенное соединение (HTTPS).
Установка mitmproxy
Для просмотра сетевого трафика мы будем использовать mitmproxy (в этом руководстве будет использоваться веб-интерфейс mitmweb, который позволяет просматривать трафик в интерфейсе браузера). MITMproxy позволяет просматривать сетевой трафик, добавляя себя в качестве прокси-сервера между приложением и сервером (API).
В зависимости от вашей ОС вы должны следовать этому руководству по установке: https://docs.mitmproxy.org/stable/overview-installation/
Для установки на Linux, необходимо скачать архив, затем распаковать его в удобную папку.
Установка Android Studio
Для создания и запуска виртуального устройства Android будет использоваться Android Studio.
В зависимости от вашей ОС вы должны следовать этому руководству по установке: https://developer.android.com/studio/install
После установки, необходимо добавить в переменную окружения PATH пути к эмулятору и используемым далее инструментам. На Linux можно в конец файла ~/.bashrc
добавить строчки:
export PATH=$PATH:$HOME/Android/Sdk/platform-tools export PATH=$PATH:$HOME/Android/Sdk/emulator
После установки и настройки, запускайте Android Studio, выполнив скрипт studio.sh
в android-studio/bin/
директории.
Создание AVD
1. В окне Android Studio нажмите More Actions -> Virtual Device Manager.
2. В окне менеджера устройств нажмите Create Device.
4. Выберите образ системы. По опыту, API уровня 28 и ABI x86 (Android 9.0) работают лучше всего. Более новые уровни API могут помешать вам загрузить пользовательские (CA) сертификаты.
5. После выбора образа жмите Finish.
У вас появилось новое устройство, но пока не запускайте его. Закройте Android Studio.
Подготовка AVD
2. Предполагая, что вы добавили пути Android Studio инструментов в $PATH, если нет, вернитесь на шаг установки Android Studio.
3. Выведите список доступных виртуальных устройств командой и скопируйте название созданного нами устройства:
emulator -list-avds
4. По умолчанию (при запуске из AVD Manager) мы не сможем записывать никакие файлы в системные папки. Чтобы запустить эмулятор с доступными для записи системными папками, используйте эту команду:
emulator -avd Pixel_3_API_28 -writable-system
5. Подождите, когда загрузится устройство.
Настройка mitmproxy
1. Перейдите в папку с mitmproxy и запустите mitmweb. В домашней директории у вас появится папка .mitmproxy
. Переходите в неё.
cd ~/.mitmproxy/
hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0
У вас в папке должен появиться файл с расширением .0
, например такой c8750f0d.0
. В дальнейших шагах подставляйте своё название файла из папки. Дополнительную информацию можно найти здесь: https://docs.mitmproxy.org/stable/howto-install-system-trusted-ca-android/
3. Выполните последовательность команд в терминале и подождите перезагрузку AVD:
adb root adb remount adb shell 'mount -o rw,remount /' adb push c8750f0d.0 /system/etc/security/cacerts adb shell 'chmod 664 /system/etc/security/cacerts/c8750f0d.0' adb reboot
Настройка прокси на AVD
1. Нажмите на дополнительные настройки:
2. В открывшемся окне выберите Settings → Proxy → Manual proxy configuration. В Host name впишите 0.0.0.0, в Port number 8080. Нажмите Apply.
Перехват трафика браузера
1. Запустите mitmweb и перейдите в браузере по адресу http://localhost:8081/
2. Откройте на AVD браузер и перейдите по адресу mitm.it, в mitmweb у вас должна открыться вкладка Flow, в которой отображается информация о выполненных запросах AVD.
Установка Android приложения
Для примера перехватим трафик приложения Ozon, вы можете попробовать необходимое вам приложение.
- Скачайте apk файл. Apk файл Ozon. И откройте терминал в директории с файлом.
- Выполните команду установки:
adb install <название apk файла>
Перехват трафика приложения
- Запустите mitmweb и перейдите в браузере по адресу http://localhost:8081/
- Запустите приложение, которое хотите проинспектировать.
Как видим, mitmproxy перехватывает все API вызовы. За счёт CA сертификатов, мы можем наблюдать HTTPS трафик.
Источники
- Inspecting (HTTPS) Network Traffic of any Android App
- Install System CA Certificate on Android Emulator
- How to Install Android Apps via ADB