本文是原创文章,转自个人专栏,仅记录笔者初次Android抓包的过程记录,内容为初级知识,高手请随意 Ctrl + W 。
前言
出于某种个人需求,需要抓取某App的网络数据包。而大多数应用都会使用SSL/TLS协议传递加密数据包,这就为Android抓包增加了一定难度。比较常见的一些抓包应用(如Fiddler、Charles等)是利用创建代理服务器充当中间人的角色从而截取App的加密数据包。但是进行协议数据包的解密需要安装根证书,在Android 7以下的版本可以直接在设置里安装,而Android 7及以上版本证书被分为系统证书和用户证书,并且App默认不会信任用户安装证书。因此往往需要手动将证书安装到系统证书,而这在大多数情况需要 Root 权限。可是在Android手机日趋封闭的趋势下,在实体机上获取 Root 权限是比较困难的。
其中的一种解决思路是在虚拟机上进行抓包分析,但是常见的虚拟机 Android 版本比较低且某些App只提供了 ARM ABI,这就造成了一些应用的兼容性问题。而WSA(Windows Subsystem for Android)利用的 Intel Bridge 技术可以在基于 x86 的处理器上模拟ARM应用程序,并且支持较高的安卓版本(笔者安装时已默认为Android 12),这就为逆向分析提供了很大便利。
本文将记录笔者初次进行安卓抓包的过程,包括WSA、Magisk等模块、根证书的安装,最终实现了SSL/TLS数据包的解密。
过程
首先我们需要一个用于测试捕包的Android环境,一开始我是选用了Microsoft提供的原生WSA环境。其中,在安装前需要进行BIOS的虚拟化、Windows可选功能中的Hyper-V和虚拟机平台等配置。由于笔者使用的是Windows 11 家庭版,默认不支持Hyper-V,需要通过运行以下的脚本开启。
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
在配置好前置环境后,我们就可以前往 Microsoft Store 进行WSA的一键安装,也可以通过下载Microsoft提供的 WSA 和 Microsoft UI Xaml文件进行手动安装。
安装好后我们可以进行开发者模式等设置的配置,并安装 WSA TOOLBOX、WSA PacMan等工具便于我们进一步进行系统设置和apk安装。
配置好WSA环境后,我们就可以指定WSA的虚拟网卡进行捕包分析了。在对某App请求的特定接口进行数据包分析时,可以看到在该过程中客户端与服务器端使用了加密的TLS协议进行通信。
因此我们需要对加密的TLS数据包进行解密。由于 Wireshark 的解密似乎较为麻烦(笔者尚未成功实现qaq),下面将采用 Windows 中的 Fiddler 以及 Android 中的 HttpCanary 进行解密。
鉴于上述的两种方法都需要 Root 权限以安装根证书,我们不再采用原生的WSA,转而使用
集成了Magisk等模块的WSA。
跟随该项目README的指引,我们fork出自己的项目,进行Github Action的构建,自定义需要的build。
构建完成后我们下载对应的build并解压,以管理员模式运行文件夹下的 Install.ps1 脚本,安装成功后 Magisk/Play store 会自动启动。
为了在WSA上安装系统根证书,我们需要再安装 LSPosed 和 MagiskTrustUserCerts 模块,这个 Magisk 模块会在系统每次启动时将用户证书移动到系统证书里。为了解决不少App存在的 SSL Pinning 问题(只信任自己设置的根证书),可能还需要安装 JustTrustMe模块。
到此为止,我们已经配置好抓包所需要的Android环境。下面我们正式使用 Fiddler 和 HttpCanary 两种工具进行某App的抓包分析。
Fiddler
首先点击菜单栏的 Tools/Options 打开设置页面。
在 HTTPS 页面勾选 Decrypt HTTPS traffic 以启用 Fiddler 的 HTTPS 协议的解析功能。
在 Connections 页面勾选 Allow remote computers to connect 以允许远程连接,并配置Fiddler监听的端口,使用默认的8888即可。
接下来我们打开 WSA TOOLBOX进行网络代理的配置。
将代理的IP地址指定为WSA的网关地址,端口设置为Fiddler监听的8888。
接下来我们在 Windows 的浏览器中访问 http://127.0.0.1:8888 下载 Fiddler 的根证书,通过 ADB TOOLBOX 或 adb指令将它传送到WSA中。然后在 Android 设置 / 安全 / 加密与凭据 / 从SD卡安装 进行 Fiddler根证书的安装。最后不要忘了重启WSA以使 MagiskTrustUserCert 模块生效,在每次启动时将 Fiddler证书移动到系统根证书。(并注意一下重启后代理貌似会失效,请重新配置一下QAQ)
最后打开需要抓包的App,开始我们的快乐捕包。好耶ヾ(≧▽≦*)o
HttpCanary
由于高版本的Android收紧了App安装CA证书的权限,只能用户手动安装。而 HttpCanary 已有较长时间未更新,导致高版本Android无法正常安装证书抓包,该工具使用的困难也主要在证书的安装上。
下文将只介绍具体安装过程,实现所需要的逆向分析思路在参考资料中给出。
首先我们需要获取HttpCanary的证书,由于较新版本的未安装证书无法导出,所以需要到 /data/data/com.guoshi.httpcanary/cache 复制出 HttpCanary.pem 和 HttpCanary.p12到一个便于访问的位置(比如Downloads)。
然后选择 HttpCanary.pem 安装为CA证书,选择 HttpCanary.p12 输入密码 'HttpCanary' 安装为 VPN和应用用户证书。
为了让应用识别到证书,需要到 /data/data/com.guoshi.httpcanary.premium/cache 创建一个空文件并命名为 HttpCanary.jks。再创建一个 HttpCanary.pem 复制并重命名为 87bc3517.0。
最后就可以开始我们的ntr抓包了(/ω\)。
注:如果使用Fiddler开启了代理,在使用HttpCanary记得关闭。
参考资料
-
使用Fiddler在WSA-Windows安卓子系统-上抓包
-
HttpCanary 在 Android 11 上的使用 - 简单逆向分析