Расшифровка HTTPS-запросов на мобильных устройствах iOS/Android: Charles, macOS, немного магии

Evgeniy Lazarev
3 min readFeb 24, 2020

Замечательная и бесплатная программа Charles перехватывает весь сетевой трафик вашего компьютера, в том числе HTTPS, расшифровывая его при помощи промежуточного сертификата. Но что если мы хотим перехватывать трафик из приложений, установленных на iOS/Android-устройстве?

iOS

Следуя простой инструкции, пропишите адрес своего компьютера в качестве прокси-сервера на своём устройстве, установите промежуточный сертификат, и в вашем Charles на компьютере начнёт перехватываться весь трафик с устройства, а HTTPS-трафик будет расшифрован. В конце инструкции есть пометка о том, что HTTPS-трафик из приложений будет расшифрован, только если разработчик добавил в plist-файл своего приложения специальный флаг NSAllowsArbitraryLoads. К сожалению, если этого нет, то со своей стороны сделать вы ничего не можете — Apple не позволяет изменять и загружать приложения никак, кроме как из App Store.

Android

Для Android-устройств все шаги по первичной настройке устройства идентичны, смотрите инструкцию. Однако, в отличие от iOS, мы можем сами добавить любому приложению необходимый флаг, чтобы перехватить и расшифровать его HTTPS-трафик, даже если разработчик этого не предусмотрел. Если вы никогда не занимались распаковкой, изменением и обратной запаковкой APK-приложений для Android, вот подробная инструкция:

  1. Получите APK-файл нужного вам приложения у разработчика или из Google Play при помощи специального сайта.
  2. Установите на macOS утилиту командной строки apktool.
  3. Скачайте утилиту zipalign.
    Она входит в состав Android Studio — официального инструментария от Google для разработки Android-приложений — но не распространяется отдельно.
    Я извлёк утилиту из официального пакета, ничего в ней не изменяя, чтобы вам не пришлось скачивать и устанавливать гигабайтное приложение от Google. Однако, если вы не доверяете файлу, вы можете самостоятельно скачать Android Studio с официального сайта Google, установить его, и найти утилиту в комплекте (для поиска вам пригодится команда find ~/Library/Android/sdk/build-tools -name "zipalign").
  4. Перенесите бинарный файл zipalign в папку /usr/local/bin, добавив ему права на исполнение. Для этого выполните в терминале следующие команды (предположим, что zipalign лежит в папке ~/Desktop):
    4.1 sudo cp ~/Desktop/zipalign /usr/local/bin
    4.2 sudo chmod +x /usr/local/bin/zipalign
  5. Распакуйте APK-файл при помощи утилиты apktool:
    apktool d ~/Desktop/YOUR_APPLICATION_NAME.apk. Удалите APK-файл, чтобы впоследствии не возник конфликт.
  6. Зайдите в полученную папку YOUR_APPLICATION_NAME, далее в папку xml, создайте там файл network_security_config.xml, откройте его в текстовом редакторе и добавьте туда необходимое содержимое.
  7. В папке YOUR_APPLICATION_NAME найдите файл AndroidManifest.xml, откройте его в текстовом редакторе, найдите в нём открывающий тег <application, сразу после добавьте следующий текст: android:networkSecurityConfig="@xml/network_security_config", чтобы получилось так: <application android:networkSecurityConfig="@xml/network_security_config", продолжение оставьте без изменений. Проверьте, что в теге уже нет такого параметра.
  8. В командной строке соберите папку обратно в APK-файл, указав аргументом название папки:
    apktool b ~/Desktop/YOUR_APPLICATION_NAME
    Собранное APK-приложение будет лежать в папке ~/Desktop/YOUR_APPLICATION_NAME/dist. Перенесите его на ~/Desktop.
  9. Сгенерируйте ключи и подпишите APK-приложение:
    9.1. keytool -genkey -v -keystore ~/Desktop/YOUR_APPLICATION_NAME.keystore -alias myApp -keyalg RSA -validity 10000
    9.2. jarsigner -verbose -keystore ~/Desktop/YOUR_APPLICATION_NAME.keystore ~/Desktop/YOUR_APPLICATION_NAME.apk myApp
    9.3. zipalign -f -v 4 ~/Desktop/YOUR_APPLICATION_NAME.apk ~/Desktop/YOUR_APPLICATION_NAME_signed.apk
  10. Всё готово! Вы можете переносить полученный файл YOUR_APPLICATION_NAME_signed.apk на своё устройство и устанавливать приложение. В процессе, возможно, система вас спросит, хотите ли вы установить приложение неустановленного разработчика и предоставить необходимые для этого разрешения.

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

--

--