Источник: Nuances of Programming
Иногда возникает необходимость протестировать мобильное приложение и просмотреть все связанные с ним сетевые запросы. В среде интернета эта задача решается довольно просто: нажимаете Ctrl + Shift + I, чтобы открыть инструменты разработчика. Оттуда можно перейти на вкладку “Сеть” и просмотреть все HTTP-запросы, связанные с веб-страницей, следующим образом:
Однако в области мобильной разработки этот процесс не так прост. В отличие от среды интернета, здесь нет встроенного механизма, позволяющего легко проверять HTTP-запросы, открывая инструменты разработчика.
Поэтому рекомендуем исследовать увлекательный мир перехвата сетевых запросов с помощью прокси-серверов. Ознакомьтесь с пошаговым процессом установки и настройки прокси-сервера, который будет выступать в качестве посредника между вашим устройством и сетью.
Использование прокси-сервера позволяет перехватывать, проверять и анализировать все входящие сетевые запросы. Это открывает широкие возможности для отладки, оптимизации производительности и анализа безопасности приложений.
Для удобства изложения разделим данное руководство на пять шагов:
- Установка эмулятора Android
- Установка прокси-сервера
- Подготовка сертификата
- Развертывание сертификата
- Настройка прокси на эмуляторе Android
Рассмотрим подробно каждый шаг.
1. Установка эмулятора Android
- Для начала необходимо установить программу Android Studio. Скачать ее можно на загрузочной странице Android Studio.
- После успешной установки запустите Android Studio. На панели инструментов в верхней части окна найдите меню Tools и кликните на него. Затем в выпадающем меню выберите Device Manager:
- После клика на Device Manager появится новая панель:
- Кликните Create Device (Создать устройство):
Теперь необходимо выбрать из списка устройство, на котором отсутствует логотип Play Store:
На следующем этапе, после выбора устройства без логотипа Play Store, необходимо выбрать уровень API, соответствующий требованиям тестирования. Уровень API представляет собой версию платформы Android, которую будет имитировать устройство или эмулятор:
При переходе к следующему этапу появляется возможность настроить параметры AVD (Android Virtual Device), включая имя устройства, распределение оперативной памяти и объем хранилища.
После завершения настройки параметров AVD можно приступать к запуску устройства. Кликните “Run”, чтобы запустить эмулятор и виртуальное устройство:
Если хотите применить командную строку для запуска эмулятора, можно воспользоваться альтернативным способом. Откройте командную строку или терминал на своем компьютере и выполните несколько команд.
Для начала воспользуйтесь командой emulator -list-avds, чтобы вывести на экран список всех установленных в системе эмуляторов. Эта команда предоставит вам названия доступных устройств. В списке укажите название устройства, которое вы хотите запустить.
После определения необходимого устройства можно воспользоваться командой emulator -avd deviceName. Замените в команде deviceName реальным названием необходимого устройства. Эта команда запустит эмулятор с указанным устройством.
Для корректной работы команд эмулятора важно убедиться в том, что заданы все необходимые переменные среды. Это обеспечит успешную идентификацию и выполнение команд.
После установки эмулятора Android можно загрузить и установить APK-файл желаемого приложения с APKMirror. APKMirror — это авторитетный сайт, предлагающий широкий спектр APK-файлов для различных приложений Android. После загрузки APK-файла приступайте к его установке на эмулятор Android. Можно либо перетащить загруженный APK-файл в окно эмулятора, либо использовать механизм передачи файлов эмулятора для импорта APK-файла.
2. Установка прокси-сервера
Прежде чем приступать к установке прокси, необходимо убедиться, что OpenSSL и Android Debug Bridge (ADB) правильно настроены. Ниже приведены шаги, которые необходимо выполнить.
- Начните с установки OpenSSL в системе, если это еще не было сделано. Процесс установки см. в документации по конкретной операционной системе. Затем можно проверить правильность установки, выполнив команду openssl version в терминале или командной строке. Если вы все сделали правильно, будет показана версия OpenSSL.
- Теперь необходимо убедиться в наличии доступа к ADB из терминала или командной строки. Для проверки доступности и правильности настройки ADB используйте команду adb version. Если команда возвращает версию ADB, настройка выполнена правильно.
После успешной настройки OpenSSL и подтверждения доступа к ADB можно приступать к установке прокси-сервера. В этом руководстве мы будем загружать и использовать Proxyman в качестве примера. Однако те же принципы можно применить и к другим подобным инструментам, таким как Charles Proxy и mitmProxy.
3. Подготовка сертификата
Для расшифровки запросов приложения Proxyman генерирует собственный SSL-сертификат. Чтобы получить этот сертификат и настроить его для использования в ОС Android, выполните следующие действия.
- Откройте веб-браузер и перейдите по следующей ссылке, чтобы загрузить SSL-сертификат Proxyman. После загрузки сертификата найдите папку, в которой он был сохранен:
Чтобы файл сертификата имел формат, поддерживаемый ОС Android, необходимо переименовать его. Откройте командную строку и перейдите в папку, в которой находится сертификат. После этого выполните данную команду:
hashed_name=`openssl x509 -inform PEM -subject_hash_old -in proxyman-ca.pem | head -1` && cp proxyman-ca.pem $hashed_name.0
This command uses OpenSSL to generate a hashed name for the certificate and then renames the file accordingly. By following these steps, you obtain the custom SSL certificate from Proxyman and rename it to the format expected by Android OS. This certificate is essential for decrypting app requests and enabling Proxyman to intercept and analyze the network traffic.
Эта команда не будет работать в Windows Powershell, поэтому я выполнил ее в терминале Git Bash:
Команда выполнилась успешно. Она сгенерировала файл с расширением .0 в той же папке:
4. Развертывание сертификата
Файл .0, который был сгенерирован на предыдущем этапе, является сертификатом, который нужно добавить в эмулятор Android. Чтобы сделать это, начните с открытия терминала со списком доступных AVD:
emulator -list-avds
Запустите нужный из доступных AVD с помощью следующей команды:
emulator -avd <avd_name_here> -writable-system
Обратите внимание на использование флага -writable-system для запуска AVD с перезаписываемыми системными разрешениями, что позволяет вносить изменения. После этого нужно открыть другой терминал и выполнить следующую команду:
adb root
Эта команда перезапускает демон (системную службу) ADB с правами root. Затем запустите эту команду, чтобы отключить подтверждение безопасной загрузки на устройстве:
adb shell avbctl disable-verification
Теперь перезагрузите устройство с помощью команды:
adb reboot
Как только устройство перезагрузится, запустите следующую команду, чтобы снова перезапустить ADB как root:
adb root
Выполните перемонтирование разделов как read/write с помощью следующей команды:
adb remount
Если ADB предложит вам перезагрузить устройство, снова запустите adb reboot, затем adb root и adb remount. Теперь можно отправить переименованный файл SSL-сертификата — файл .0, сгенерированный ранее, — на устройство, используя следующую команду, заменив <path_to_certificate> на фактический путь к файлу сертификата:
adb push <path_to_certificate> /system/etc/security/cacerts
Эта команда копирует файл сертификата в соответствующий каталог на устройстве. Теперь нужно установить правильные разрешения для файла сертификата, выполнив следующую команду:
adb shell chmod 664 /system/etc/security/cacerts/<name_of_pushed_certificate>
Перезагрузите устройство в последний раз, используя следующую команду:
adb reboot
Устройство перезагрузится, и SSL-сертификат будет развернут. Вы успешно внедрили SSL-сертификат в эмулятор Android. Это позволит эмулятору распознавать сертификат и доверять ему, позволяя Proxyman перехватывать и анализировать сетевой трафик с устройства.
Теперь, чтобы проверить наличие сертификата на своем устройстве Android, перейдите в раздел Trusted Credentials в настройках Encryption & Credentials и найдите сертификат Proxyman LLC на вкладке System. Так вы удостоверитесь в том, что сертификат был успешно установлен и распознан устройством:
5. Настройка прокси-сервера на эмуляторе Android
Заключительный шаг предполагает настройку эмулятора Android для использования настроенного прокси-сервера Proxyman. Для этого запустите Proxyman на компьютере. В Proxyman перейдите в меню Certificate. Выберите Install Certificate on Android из выпадающего списка. Выберите Physical Devices в подменю. Обратите внимание на то, что вам не нужно изучать инструкции Physical Devices, поскольку мы не будем им следовать. Нам понадобятся лишь несколько важных деталей из этого меню:
В Android setup guide обязательно скопируйте как IP-адрес, так и номер порта. Эти детали понадобятся для последующих этапов:
Далее нужно зайти в эмулятор Android и кликнуть на иконку с многоточием, как показано на скриншоте:
Кликните на опцию Settings, указанную на боковой панели. После этого можете перейти на вкладку Proxy:
На вкладке Proxy установите флажок Manual proxy configuration. Затем вставьте IP-адрес и номер порта, скопированные на этапе Android setup guide, и нажмите кнопку apply:
Вы успешно выполнили все необходимые шаги по настройке для перехвата HTTP-запросов с Android-устройства. Теперь вы можете использовать Proxyman и запускать приложения на своем эмуляторе Android. По мере использования приложений Proxyman будет собирать и отображать все соответствующие детали и данные, связанные с сетевыми запросами, предоставляя вам ценную информацию и визуализацию взаимодействия.
Читайте также:
Перевод статьи Rabi Siddique: Intercepting Network Requests from a Mobile App