在使用为目标 API 级别 24 (Android 7) 或更高级别开发的应用的现代 Android 设备上,嗅探流量不再那么简单了。应用的目标 API 级别定义为 AndroidManifest.xml 文件中的条目 <uses-sdk android:targetSdkVersion="??"/>。
主要问题是,如果您在 Android 中安装 Fiddler 根 CA 证书,它会被标记为 user certificate(而不是 system certificate)。除非在应用程序中明确配置那些user certificates are not trusted.
尊重用户 CA 证书的少数应用之一是 Chrome。因此,使用 Chrome 测试代理和安装的根 CA 证书是否有效是个坏主意,因为它可能仅适用于 Chrome,但不适用于应用程序。
请注意,某些应用会进一步使用证书固定(叶或根 CA 固定)。因此,即使 Fiddler 根 CA 证书作为系统证书安装,应用程序也不会信任此证书,因为它在证书固定时失败。
证书固定也是网站的一项功能,因此一些网站会在网络浏览器缓存中保存证书哈希,将网站固定到某个证书。在这种情况下,清除浏览器缓存通常会删除那些固定数据。
根设备
如果您的设备已植根,您可以尝试将 Fiddler 根 CA 证书安装为系统证书。 Mitmproxy 文档包含manually installing the mitmproxy certificate 的操作方法。
如果您使用 Magisk 对手机进行了 root,则有一个 Magisk 模块似乎能够自动安装用户证书作为系统证书:https://github.com/NVISO-BE/MagiskTrustUserCerts
您也可以安装 Magisk + Edxposed + TrustMeAlready Xposed module。这允许在系统范围内禁用证书检查 - 警告:这消除了 SSL/TLS 对手机上所有应用程序的主动攻击的安全性。因此,只能在仅用于黑客攻击的设备上执行此操作!
还可以在设备上安装和运行Frida-Server,并连接到您感兴趣的应用程序,以便在运行时修改 SSL/TLS 证书检查。 AFAIK 基于 Frida 的框架 Objection 有一些脚本可以这样做。
非根设备
在非 root 设备上,只有在将应用程序安装到设备之前修改应用程序的选项。请注意,某些应用会检测到它们已被修改并拒绝运行。
要让应用信任用户证书,您必须修改应用中包含的network_security_config.xml(参见例如here)。您可以使用apktool 反编译/重新编译应用程序。不要忘记重新签署重新编译/重新打包的应用程序,例如使用 Android SDK 中的apksigner。
有一些工具可以自动进行反编译、修改和签名,例如apk-mitm。
还可以通过将 Android 版 Frida 小工具包含到应用中来修改应用。这将允许在非 root 设备上将此特定应用程序使用 Frida。