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
Ответы
Ответ 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 позволит ему работать.