我正在尝试从已取得 root 权限的 Android 设备 (4.4.4) 捕获 HTTPS 流量,以分析应用程序的未记录协议。我已将 Fiddler 设置为代理并启用了 HTTPS 嗅探。我已在我的设备上安装了 Fiddler 生成的根证书。我已在 Android 设备上为 Wifi 设置了代理。
当我运行浏览器并导航到任何 HTTP 或 HTTPS 站点时,Fiddler 都可以成功捕获流量。
当我运行一些应用程序(例如我自己的应用程序,使用 Parse 作为后端)时,我可以看到所有到服务器的 HTTPS 流量已解密。到目前为止一切顺利。
当我尝试运行该特定应用程序时,我无法让 Fiddler 捕获其流量。这是我在 Fiddler 上得到的所有信息:
URL 是一些 IP 地址:SSL (:443)。
我也尝试过使用ProxyDroid。有趣的是,我能够捕获流量on一次,看到与该应用程序服务器的解密HTTPS连接,但此后,它再也没有捕获过。我知道该应用程序使用 HTTPS,而不是未知/其他协议。
如何成功捕获 HTTPS 流量,为什么 Fiddler 曾经为该应用程序工作,然后突然停止工作?
“默认情况下,面向 API 级别 24 及更高版本的应用程序不再信任用户或管理员添加的 CA 来实现安全连接”
如果您的目标 API >=24 或在 >= 24 的设备上运行,请使用以下内容创建 xml 资源:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
将其命名为“network_secutrity_config.xml”或类似名称,并使用 android:networkSecurityConfig 标记添加 id 作为对清单的引用。
您可以在这里阅读更多内容(这对我有帮助):
https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
它似乎特定于该应用程序。我成功地嗅探了所有其他应用程序。该特定应用程序可能使用 SSL 固定:它检查自身内部的证书,并且不允许伪造证书,即使它受到设备的信任。
对于遇到此问题的其他人...
Fiddler 停止在我的机器浏览器和设备上处理 https 流量。重新安装/重新信任 Fiddler 证书后,我的机器浏览器再次开始使用 https 工作,但设备仍然损坏。
为了让设备再次工作,我必须明确信任设备上的新证书,方法是使用设备的浏览器打开网站
http://<adapter IP>:8888/FiddlerRoot.cer
,然后信任该证书。
我在这里找到了这个答案。
Tunnel to
在 Fiddler 中显示,因为 SSL 固定SSL Pinning 是一种在 Android 手机上使用的技术,通过验证服务器证书来避免中间人攻击。
apk-mitm <path-to-apk>
有关如何安装的更多信息:https://github.com/shroudedcode/apk-mitm
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done! Patched APK: ./example-patched.apk
如果您想手动执行此操作,请按照此处的文章进行操作:https://medium.com/@vaishalinagori112/9- Different-ways-to-bypass-ssl-pinning-in-android-2d8c7f81b837