Перехват трафика android studio

Перехват HTTPS-траффика между Android-устройством и внешним сервером


Иногда бывает любопытно подсмотреть, что пересылают туда-сюда разные Android-приложения по HTTP и HTTPS протоколам. Иногда даже при разработке собственного ПО удобно видеть весь трафик в реальном времени. Для реализации этих задач давно придумано много хороших программ, таких, к примеру, как Charles или Fiddler2. На самом деле их намного больше, вот только две вышеуказанные дают возможность нормально просматривать не только HTTP, но и HTTPS.

Трудности начинаются тогда, когда речь заходит о перехвате трафика между Андроид-устройством и внешним сервером. В случае незашифрованного (HTTP-протокол) трафика всё весьма тривиально (вот и инструкция есть) — разрешаем Fiddler2 внешние соединения, в Андроиде устанавливаем прокси сервером адрес нашей машины с Fiddler2 — и вуаля, всё работает. А вот на настройку перехвата HTTPS-трафика у меня ушло чуть больше времени.

Теория

Итак, в чём же сложность? В том, что при использовании протокола HTTPS клиент по-умолчанию проверяет, а действительно ли тот сервер, к которому он подключился, является нужным. Для этого используются сертификаты. И вот у настоящего сервера этот сертификат, понятное дело, тоже настоящий и соответствует открытому URL, а вот у нашего прокси — нет. Для решения этой проблемы в десктопных операционных системах в таких случаях есть возможность сгенирировать в Fiddler2 поддельный сертификат, импортировать его в доверенные — и теперь клиент всегда будет верить, что соединение с Fiddler2 вполне безопасно. К сожалению, с мобильным устройством такой легкий финт ушами не прошел.

Во-первых, возможности импортировать внешний сертификат в Андроиде версий младше 4.0 нет. Есть какие-то не внушающие доверия варианты с рутоваными девайсами — но это не наш путь.
Во-вторых, в Андроид даже версии 4.0 импортировать сертификат Fiddler2 не получается. Дело в том, что генерируемый по-умолчанию сертификат не соответствует каким-то там Андроидовским критериям безопасности и не устанавливается. Его нужно генерировать специальным образом.
В-третьих, совсем даже не факт, что все подряд программы сразу поверят поддельному сертификату. Есть нюансы.

Практика

  1. Берём устройство с Андроидом версии 4.0 или выше. Нет, девайс с 2.3 не подойдет. Да, эмулятор версии 4.0 подойдет.
  2. Устанавливаем на компьютер последнюю версию Fiddler2.
  3. Устанавливаем специальные библиотеки генерации Андроид-совместимого сертификата безопасности отсюда.
  4. Экспортируем из Fiddler2 сертификат безопасности («Tools->Fiddler Options->HTTPS->Export root certificate to Desktop»). Кладём на флешку, в корень (ну или на эмулятор, если вы используете его).
  5. На Андроиде добавляем сертификат безопасности в доверенные(«Settings > Security > Install from SD card»)

Запускаем Fiddler2, разрешаем в настройках внешние коннекты
.

На Андроиде в настройках сети прописываем в качестве прокси адрес нашей десктопной машины с Fiddler2.

  • На Андроиде открываем браузер, вводим google.com — и видим запрос с ответом в окне Fiddler2.
  • Итак, с браузером получилось. К сожалению, не все программы столь доверчивы, как браузер. К примеру, в моей собственной софтине, где я использую Apache HTTP Client, способ не прокатил — плевал апачевский клиент на доверенные сертификаты операционки. В этом случае мне пришлось отключить эту проверку вручную, таким вот образом:

    где EasySSLProtocolSocketFactory взят отсюда и разрешает доверие к любым сертификатам.
    Не безопасно, только для отладки!

    После этого трафик моей программы стал также успешно отображаться в Fiddler2.

    Источник

    Анализ трафика Android-приложений: обход certificate pinning без реверс-инжиниринга

    Иногда нужно исследовать работу бэкенда мобильного приложения. Хорошо, если создатели приложения не заморачивались и все запросы уходят по «голому» HTTP. А что, если приложение для запросов использует HTTPS, и отказывается принимать сертификат вашего корневого удостоверяющего центра, который вы заботливо внедрили в хранилище операционной системы? Конечно, можно поискать запросы в декомпилированом приложении или с помощью реверс-инжиниринга вообще отключить применение шифрования, но хотелось бы способ попроще.

    Что такое certificate pinning?

    Даже при использовании HTTPS пользователь не защищен от атак «Человек посередине», потому что при инициализации соединения злоумышленник может подменить сертификат сервера на свой. Трафик при этом будет доступен злоумышленнику.

    Справиться с такой атакой поможет certificate pinning. Эта защитная мера заключается в том, что разработчик «зашивает» в приложение доверенный сертификат. При установке защищенного соединения приложение проверяет, что сертификат, посылаемый сервером, совпадает с (или подписан) сертификатом из хранилища приложения.

    Обход certificate pinning

    В качестве подопытного выберем приложение Uber. Для анализа HTTP-трафика будем использовать Burp Suite. Также нам понадобится JDK и Android SDK (я использую все последней версии). Из Android SDK нам понадобится только утилита zipalign, так что при желании можно не скачивать весь SDK, а найти ее на просторах интернета.
    Заранее облегчим себе жизнь, добавив следующие пути к нужным утилитам в переменную окружения PATH:

    Открываем Burp, заходим в Proxy – Options – Add и добавляем Proxy Listener на интерфейсе, который будет доступен подопытному Android-устройству (или эмулятору). На устройстве в свою очередь настраиваем используемую Wi-Fi сеть на использование только что включенного прокси.

    Скачаем apk-файл через apkpure.com, установим приложение на устройство и попытаемся войти в свой аккаунт – приложение зависнет на этапе аутентификации.

    В логах Burp Suite (вкладка Alerts) при этом мы увидим множественные отчеты о неудачных SSL-рукопожатиях. Обратите внимание на первую строчку – именно через сервер cn-geo1.uber.com в моем случае осуществляется аутентификация, поэтому и не удается войти в приложение.

    Дело в том, что Burp Suite при перехвате HTTPS-соединений (а мы помним, что все соединения устройства проксируются через него) подменяет сертификат веб-сервера на свой, который, естественно, не входит в список доверенных. Чтобы устройство доверяло сертификату, выполняем следующие действия. В Burp заходим в Proxy – Options и нажимаем Import/export CA certificate. Далее в диалоге выбираем Export Certificate. Копируем сертификат на устройство, переходим в Настройки – Безопасность – Установить сертификаты и устанавливаем наш сертификат в качестве сертификата для VPN и приложений.

    Опять пытаемся войти в свой аккаунт. Сейчас приложение Uber сообщит нам только о неудачной попытке аутентификации – значит прогресс есть, осталось только обойти certificate pinning.

    Откроем приложение в вашем любимом архиваторе как zip-архив. В папке res/raw можно заметить файл с говорящим названием ssl_pinning_certs_bk146.bks.

    По его расширению можно понять, что Uber использует хранилище ключей в формате BouncyCastle (BKS). Из-за этого нельзя просто заменить сертификат в приложении. Сначала нужно сгенерировать BKS-хранилище. Для этого качаем jar для работы с BKS.

    Теперь генерируем BKS-хранилище, которое будет содержать наш сертификат:

    На вопрос о доверии сертификату отвечаем «yes». Опять открываем apk в архиваторе и заменяем оригинальное хранилище на наше (сохраняем при этом оригинальное название).

    Но на этом все не заканчивается. Каждый apk должен быть подписан сертификатом разработчика. К счастью, это делается не для обеспечения безопасности, а для идентификации приложений, поэтому для наших исследовательских целей мы вполне можем использовать и недоверенный сертификат.

    Удаляем из apk папку META-INF со старой подписью приложения и приступаем к генерации новой.
    Создаем хранилище ключей и генерируем в нем ключ для подписи apk:

    Подписываем только что сгенерированным ключом наш APK:

    Теперь осталось выровнять данные в архиве по четырехбайтной границе:

    Источник

    Туториал: HTTPs запросы с iOS и Android девайсов не расшифровываются в Fiddler

    При работе с Fiddler часто возникают проблемы, которые решаются перезапуском сниффера, перезагрузкой компьютера или девайса, с которого сниффится трафик. Но бывает и такое, что перезапуском проблема не решилась и даже полной переустановкой фиддлера. Это статья не о чем-то новом и неизведанном, а скорее туториал, который поможет вам, когда вы всё сделали правильно, но «ничего не работает».

    Для начала стоит проверить (даже, если уже проверяли) настройки Fiddler и девайса, с которого вы хотите сниффить трафик.

    Настройка Fiddler на Windows для сниффинга трафика с iOS и Android девайсов

    Перейти Tools -> Options

    Во вкладке Connections установить галочку Allow remote computers to connect

    Вкладка Connections

    Перезагрузить Fiddler, чтобы изменения вступили в силу

    Во вкладке HTTPS:

    1) установить галочку на Capture HTTPS CONNECTs

    2) установить галочку на Decrypt HTTPS traffic

    3) в появившемся окне “Trust the Fiddler Root certificate” кликнуть Yes

    4) в окне Security Warning кликнуть Yes

    5) в окне Add certificate to the Machine Root List? Нажать Yes

    6) в появившемся окне “Do you want to allow this app to make changes to your device?” выбрать Yes

    7) установить галочку Ignore server certificate errors (unsafe)

    Вкладка HTTPs

    В остальных вкладках оставить всё по дефолту, нажать ОК

    В верхнем тулбаре активировать Stream и Decode

    Настройка iOS девайса для работы с Fiddler

    Тапнуть пункт Wi-Fi

    Тапнуть иконку i у сети, у которой подключен девайс

    Проскроллить вниз и перейти в пункт Configure Proxy

    В поле Server ввести свой IP адрес

    В поле Port ввести свой Порт, тапнуть Save

    Открыть браузер и ввести в адресную строку http://ipv4.fiddler:. Например, если порт 8888, то ссылка будет выглядеть так http://ipv4.fiddler:8888 ИЛИ ввести в адресную строку :, например, 192.168.162.202:8888

    Тапнуть на ссылку “FiddlerRoot certificate” и загрузить сертификат

    Перейти в Settings -> General -> Profile и установить скачанный сертификат

    Перейти в Settings -> General -> About -> Certificate Trust Settings и поставить чекбокс у нашего сертификата

    Настройка Android девайса для работы с Fiddler

    Тапнуть и удерживать сеть Wi-Fi, к которой подключен девайс

    Выбрать Modify Network

    Выбрать “Show advanced options”

    Тапнуть Proxy и выбрать Manual

    В поле Server ввести свой IP адрес

    В поле Port ввести свой Порт, тапнуть Save

    Открыть браузер и ввести в адресную строку http://ipv4.fiddler:. Например, если порт 8888, то ссылка будет выглядеть так http://ipv4.fiddler:8888 ИЛИ ввести в адресную строку :, например, 192.168.162.202:8888

    Тапнуть на ссылку “FiddlerRoot certificate”, сертификат загрузится на девайс

    Установка должна произойти автоматически, если сертификат не установился, то свайпнуть вниз и тапнуть иконку Settings

    Перейти Personal -> Security

    Перейти в Credential Storage и тапнуть “Install from storage”

    Тапнуть файл FiddlerRoot.cer

    (Опционально) Ввести имя сертификата, например, FiddlerRoot

    Проверить эту конфигурацию можно Trusted credentials -> User, там должен отобразится установленный сертификат

    Запросы HTTPs остаются зашифрованными

    Нужно здесь скачать плагин генерации сертификатов “CertMaker for iOS and Android”

    Перейти в Fiddler в Tools -> Options -> HTTPS и в Certificates generated by выбрать CertMarker

    На девайс повторно скачать сертификат с http://ipv4.fiddler:, т.к. он будет генерироваться заново

    Выполнить установку сертификата на девайсе

    После всех вышеописанных манипуляций Fiddler будет послушно декодировать необходимые HTTPs запросы с девайса.

    Источник

    Перехват HTTPS трафика андроид приложения, запущенного на эмуляторе

    Перехват http/https трафика
    Как можно перехватить http/https в виде post&get запросов?

    Перехват трафика, перенаправляющий прокси и https
    Здравствуйте уважаемые форумчане, помогите пожалуйста разобраться. у меня есть socks5 И http/https.

    Перехват макроса запущенного офисного приложения
    Открываем стандартно, к примеру, Любой.XLS Нужно, чтобы вместо него: — запустился свой макрос.

    Перехват вывода приложения запущенного с правами администратора
    Добрый день, собственно сабж. Запускаю приложение с повышенными правами доступа получаю так .

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

    теоретически это возможно. практически — не видел ни разу. сам не смог. 🙂

    пробовал когда-то по этой инструкции:
    http://habrahabr.ru/company/infopulse/blog/156711/
    не помню чем закончилось.

    есть еще вариант декомпильнуть приложение и посмотреть что в нем происходит. в сети есть статьи как декомпильнуть, подхачить под свои нужды (вставить логи в нужных местах и т.п.) и собрать обратно. если найдете все места отсылки данных — сможете их проллогировать.

    Перехват вывода консольного окна, запущенного другой программой
    Привет всем барсикам 🙂 и заглянувшим в тему ! Есть программа, которая создает консольное окно.

    Контроль трафика приложения, получение текущего трафика в переменную
    Доброго времени суток! Вообще не могу придумать, с какой стороны подобраться к задаче. На.

    Фильтрация https-трафика
    В сети необходимо фильтровать https-трафик, т.е. сделать запрет на соц. сети и многие другие сайты.

    Перехват трафика
    Здравствуйте, уважаемые форумчане. Есть сервер на Ubuntu с установленным squid http прокси. Нужно.

    Источник

    Читайте также:  Как удалить тотал коммандер андроид
    Оцените статью