具有 root 访问权限的 Android 设备的 Charles TLS 代理

逆向工程 安卓 动态分析 https协议 代理人
2021-06-21 20:14:26

我正在尝试使用 Charles 代理设置 TLS 代理,以作为 Android 应用程序的中间人。我希望能够查看 HTTPS 流量的内容。这不是我构建的应用程序,而是我试图对我获得的 apk 进行逆向工程。我已经对 apk 执行了我通常的静态分析,但我还想动态分析 HTTPS 流量。我正在运行带有 API 23 (Marshmallow) 的模拟 Pixel 2 设备。

我已经阅读了我能找到的所有关于如何使用 Charles 代理作为 Android 的 TLS 代理的文档。但是,大部分文档都是针对我可以控制 AndroidManifest.xml 的应用程序设置 TLS 代理的,因此可以将网络安全配置设置为信任用户 CA——设置 Charles 的默认/记录程序TLS 代理涉及将 Charles CA 证书下载到 Android 设备并将其安装为用户 CA。

我假设如果我可以将 charles CA 证书强制放入系统证书文件夹(而不是用户证书),那么 TLS 代理将“正常工作”。但是,即使我将 Charles CA 证书复制到“/system/etc/security/cacerts”目录中,我仍然无法为应用程序 MiTM HTTPS 流量。此外,当我尝试 MiTM 网络浏览器流量时,浏览器仍然声称 TLS 连接存在问题(即使认为 Charles 证书位于 cacerts 文件夹中,现在应该受信任)。我确认 Charles 证书列在“系统”CA 证书列表中(尽管如果我尝试查看证书元数据信息,设置应用程序确实会崩溃——因为该证书没有,只有编码证书)。

为什么即使我将其强制放入系统 CA 证书文件夹中,Charles CA 证书也不可信?除了 Charles 之外,还有更好的工具可以使用吗?任何帮助将不胜感激,因为我快要结束我的智慧了。

1个回答

我会回答我自己的问题,因为我弄清楚出了什么问题。

由于多种原因使分析受挫,该应用程序无法正常运行。一方面,应用程序在启动时会联系许多广告域。应用程序通过 TLS 建立这些连接,如果不信任代理根 CA 证书,连接将不会成功。

我通过使用 Burp Suite 解决了这个问题。此工具将自动识别因代理而失败的 TLS 请求,并将停止代理这些域。使用 burp suite,我能够看到所有失败的 TLS 连接都是我不关心的广告域。

实际上,除了第三方广告商,该应用实际上仅使用 HTTP 和 TCP 与各种服务器进行通信。因此,我能够从纯文本 HTTP 请求和我使用 Wireshark 监控的一些其他 TCP 连接中获取我需要的所有信息。


更新:如评论中所述,出于某种原因,某些域(应用程序制造商拥有的域)没有任何 TLS 连接问题,要么是因为它们接受了 Burp 根 CA,要么是因为这些连接忽略了证书的 TLS 问题(我不确定是哪个)。该应用程序建立的大多数连接都是 HTTP,但我也能够看到对应用程序域的 HTTPS 请求,如上所述。我无法查看与广告相关的 TLS 流量,可能是由于公钥固定,但我不确定。