Подтвердить что ты не робот

Fiddler - расшифровать Android HttpsUrlConnection SSL-трафик

Я потратил бесчисленные часы, пытаясь расшифровать трафик Android SSL через Fiddler для HttpsUrlConnection с очень небольшим успехом. Как я могу надежно настроить Fiddler для дешифрования трафика SSL из приложения Android с помощью HttpsUrlConnection?

Вот мои шаги

  • Запустить Fiddler на ПК (с соответствующими настройками: захватить HTTPS Connect, дешифровать трафик HTTPS, разрешить удаленным компьютерам подключаться)
  • Настроить беспроводное соединение на Android-устройстве с помощью прокси-сервера через компьютер, запускающий скрипт
  • От браузера Android откройте браузер http://[ip из pc running fiddler]: 8888 и загрузите "сертификат FiddlerRoot". Назовите и установите его.
  • Откройте https://www.google.com в браузере android и просмотрите дешифрованный трафик в Fiddler на ПК.

Вышеупомянутые работы. Проблема в том, что не-браузерный Android-трафик появляется в Fiddler в качестве туннелей подключения. Мое первоначальное исследование показало, что проблема связана с тем, каким образом сертификаты были доверены через HttpsUrlConnection, поэтому я удостоверился, что доверяю всем сертификатам на основе этой статьи https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl-cert-validation.pdf

К сожалению, доверяя всем сертификатам, я не работал с HttpsUrlConnection, поэтому я прекратил расследование. Через несколько дней я решил попробовать еще раз и с удивлением обнаружил, что трафик для скриптинга расшифровывается для HttpsUrlConnection! К сожалению, я не делал никаких дальнейших изменений, чтобы исправить это, поэтому я не совсем уверен, почему он начал работать. Устройство, с которым он работает, - это LG-Optimus L9 для Android версии 4.0.4 и коренится.

Теперь я пытаюсь настроить это для Nexus 7 Android версии 4.2.2 (не укоренился), но, увы, все, что я вижу в скрипаче, это туннели подключения. Поскольку сертификат на обоих устройствах имеет один и тот же серийный номер, и приложение, которое я тестирую, идентично, я в тупике, почему я не могу настроить Fiddler с другим устройством Android.

Подводя итог

  • Fiddler может расшифровывать SSL-трафик от LG Optimus, но только показывает туннели подключения от Nexus 7
  • Оба устройства работают с тем же приложением, которое использует HttpsUrlConnection для сетевых запросов
  • Оба устройства имеют один и тот же фиддлер-сертификат, установленный (соответствие серий), и никакой другой сертификат пользователя не установлен.
  • Не думай об этом, но...
    • Усовершенствованное устройство (LG Optimus Android 4.0.4) использует прокси-дроид, чтобы указать на ПК, работающий с fiddler
    • Не внедренное устройство (Nexus 7 Android 4.2.2), используя встроенную "сеть изменений", чтобы указать на ПК, работающий с fiddler
4b9b3361

Ответ 1

В моих исследованиях показано, что в реализации HTP-протокола HttpsUrlConnection имеется ошибка.

Чтобы решить проблему, вам нужно выполнить следующие шаги в Fiddler:

  • В Fiddler нажмите "Правила- > Настроить правила";

  • В открывшемся script и найдите функцию OnBeforeResponse

  • В тело функции добавьте следующий код:

    if (oSession.oRequest["User-Agent"].indexOf("Dalvik") > -1 && oSession.HTTPMethodIs("CONNECT")) {  
       oSession.oResponse.headers["Connection"] = "Keep-Alive";     
    } 
    

4. Сохраните файл и перезапустите Fiddler

Ответ 2

Вот обходной путь.

Предполагая имя хоста, я отправляю свои запросы https на myHostName.com, добавьте следующее в Fiddler CustomRules.js

if (!oSession.isHTTPS && !oSession.HTTPMethodIs("CONNECT") && (oSession.HostnameIs("myHostName"))
{
  oSession.oRequest.headers.UriScheme = "https";
}

Затем в коде Android обновите URL-адрес, чтобы использовать http вместо https.

Теперь клиент свяжется с Fiddler без SSL, и весь трафик запроса/ответа будет виден.

Очевидным недостатком этого подхода является то, что URL-адреса должны быть изменены клиентом для использования http. Я не использовал этот подход достаточно долго, чтобы обнаружить любые дополнительные недостатки.

Ответ 3

Наличие корневого устройства - это ключ. По крайней мере, в моем сценарии.

Я отключил LG Optimus Android 4.0.4 и обновил его до 4.1.2. Я попробовал fiddler все те же шаги, но показывали только туннели подключения.

Я снова основал LG Optimus, и сразу я вижу все запросы/ответы через скрипач.

Я предполагаю, что укоренение N7 позволит ему работать.