Компьютерные сети
August 6, 2023

Перехват 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.

3. Я выберу Pixel 3.

4. Выберите образ системы. По опыту, API уровня 28 и ABI x86 (Android 9.0) работают лучше всего. Более новые уровни API могут помешать вам загрузить пользовательские (CA) сертификаты.

5. После выбора образа жмите Finish.

У вас появилось новое устройство, но пока не запускайте его. Закройте Android Studio.

Подготовка AVD

1. Откройте свой терминал.

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/

2. Сгенерируйте сертификат:

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. В открывшемся окне выберите SettingsProxyManual 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, вы можете попробовать необходимое вам приложение.

  1. Скачайте apk файл. Apk файл Ozon. И откройте терминал в директории с файлом.
  2. Выполните команду установки:
adb install <название apk файла>

Перехват трафика приложения

  1. Запустите mitmweb и перейдите в браузере по адресу http://localhost:8081/
  2. Запустите приложение, которое хотите проинспектировать.

Как видим, mitmproxy перехватывает все API вызовы. За счёт CA сертификатов, мы можем наблюдать HTTPS трафик.

Источники

  1. Inspecting (HTTPS) Network Traffic of any Android App
  2. Install System CA Certificate on Android Emulator
  3. How to Install Android Apps via ADB

Подробнее о том как работает mimtproxy:

Selectel: Анализ HTTP-трафика с mitmproxy