T4b1b1t0 发表于 2022-7-26 08:48

WSA中抓取SSL/TLS加密数据包

本文是原创文章,转自个人专栏,仅记录笔者初次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,需要通过运行以下的脚本开启。

```bash
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安装。

![](https://s2.loli.net/2022/07/18/ChlQ6jv2nVWN4Ra.png)

![](https://i0.hdslb.com/bfs/article/7602bec1fea4b70974602ed218fc8bbc76f4eed7.png@942w_650h_progressive.webp)

![](https://i0.hdslb.com/bfs/article/eeff62a74b7c47883b267e6bb2e0b0f2269f8f5a.png@942w_692h_progressive.webp)

配置好WSA环境后,我们就可以指定WSA的虚拟网卡进行捕包分析了。在对某App请求的特定接口进行数据包分析时,可以看到在该过程中客户端与服务器端使用了加密的TLS协议进行通信。

![](https://s2.loli.net/2022/07/18/p8OCmGExb7Y3P12.png)

![](https://s2.loli.net/2022/07/18/MDpl8Hosvjq5NUP.png)

因此我们需要对加密的TLS数据包进行解密。由于 Wireshark 的解密似乎较为麻烦(笔者尚未成功实现qaq),下面将采用 Windows 中的 Fiddler 以及 Android 中的 HttpCanary 进行解密。

鉴于上述的两种方法都需要 Root 权限以安装根证书,我们不再采用原生的WSA,转而使用

集成了Magisk等模块的WSA。

![](https://s2.loli.net/2022/07/18/lNgnrvGmJ6cpWKT.png)

跟随该项目README的指引,我们fork出自己的项目,进行Github Action的构建,自定义需要的build。

![](https://s2.loli.net/2022/07/18/xZCpjIPfEGoWtDX.png)

构建完成后我们下载对应的build并解压,以管理员模式运行文件夹下的 Install.ps1 脚本,安装成功后 Magisk/Play store 会自动启动。

![](https://s2.loli.net/2022/07/18/kv9ibUO2DCcNZKX.png)

![](https://s2.loli.net/2022/07/18/NFbzTucmyksYrhj.png)

![](https://s2.loli.net/2022/07/18/yG9XA8sJo4SMDwm.png)

为了在WSA上安装系统根证书,我们需要再安装 LSPosed 和 MagiskTrustUserCerts 模块,这个 Magisk 模块会在系统每次启动时将用户证书移动到系统证书里。为了解决不少App存在的 SSL Pinning 问题(只信任自己设置的根证书),可能还需要安装 JustTrustMe模块。

![](https://s2.loli.net/2022/07/18/FckYjCHiyuEIgnr.png)

到此为止,我们已经配置好抓包所需要的Android环境。下面我们正式使用 Fiddler 和 HttpCanary 两种工具进行某App的抓包分析。

## Fiddler

首先点击菜单栏的 Tools/Options 打开设置页面。

在 HTTPS 页面勾选 Decrypt HTTPS traffic 以启用 Fiddler 的 HTTPS 协议的解析功能。

![](https://s2.loli.net/2022/07/18/ld5RQbtwWm7iILX.png)

在 Connections 页面勾选 Allow remote computers to connect 以允许远程连接,并配置Fiddler监听的端口,使用默认的8888即可。

![](https://s2.loli.net/2022/07/18/Ino45cUsZKaWVLD.png)

接下来我们打开 WSA TOOLBOX进行网络代理的配置。

![](https://s2.loli.net/2022/07/18/Iok8jpcDFXER7dA.png)

将代理的IP地址指定为WSA的网关地址,端口设置为Fiddler监听的8888。

![](https://s2.loli.net/2022/07/18/VkiINmcUvP9duME.png)

接下来我们在 Windows 的浏览器中访问 http://127.0.0.1:8888 下载 Fiddler 的根证书,通过 ADB TOOLBOX 或 adb指令将它传送到WSA中。然后在 Android 设置 / 安全 / 加密与凭据 / 从SD卡安装 进行 Fiddler根证书的安装。最后不要忘了重启WSA以使 MagiskTrustUserCert 模块生效,在每次启动时将 Fiddler证书移动到系统根证书。(并注意一下重启后代理貌似会失效,请重新配置一下QAQ)

![](https://s2.loli.net/2022/07/18/I5JOrLdx6QhfnoR.png)

最后打开需要抓包的App,开始我们的快乐捕包。好耶ヾ(≧▽≦*)o

![](https://s2.loli.net/2022/07/18/2Br9mAOuMEUe6sd.png)

## HttpCanary

由于高版本的Android收紧了App安装CA证书的权限,只能用户手动安装。而 HttpCanary 已有较长时间未更新,导致高版本Android无法正常安装证书抓包,该工具使用的困难也主要在证书的安装上。

下文将只介绍具体安装过程,实现所需要的逆向分析思路在参考资料中给出。

首先我们需要获取HttpCanary的证书,由于较新版本的未安装证书无法导出,所以需要到 /data/data/com.guoshi.httpcanary/cache 复制出 HttpCanary.pem 和 HttpCanary.p12到一个便于访问的位置(比如Downloads)。

![](https://s2.loli.net/2022/07/18/P4fRVtarSByujUv.png)

然后选择 HttpCanary.pem 安装为CA证书,选择 HttpCanary.p12 输入密码 'HttpCanary' 安装为 VPN和应用用户证书。

为了让应用识别到证书,需要到 /data/data/com.guoshi.httpcanary.premium/cache 创建一个空文件并命名为 HttpCanary.jks。再创建一个 HttpCanary.pem 复制并重命名为 87bc3517.0。

最后就可以开始我们的~~ntr~~抓包了(*/ω\*)。

注:如果使用Fiddler开启了代理,在使用HttpCanary记得关闭。

![](https://i0.hdslb.com/bfs/article/e323be8ad6ac6b39fa32c6ec9417004800968dbe.png@720w_1244h_progressive.webp)

# 参考资料

1. [使用Fiddler在WSA-Windows安卓子系统-上抓包](https://uint128.com/2021/11/03/%E4%BD%BF%E7%94%A8Fiddler%E5%9C%A8WSA-Windows%E5%AE%89%E5%8D%93%E5%AD%90%E7%B3%BB%E7%BB%9F-%E4%B8%8A%E6%8A%93%E5%8C%85/)

2. (https://www.cnblogs.com/ercilan/p/14386362.html)

xixicoco 发表于 2022-7-26 19:16

有意思,很速度的

riboly 发表于 2022-7-26 19:23

学习了,感谢分享

yixuxi 发表于 2022-7-27 09:39

不知道能不能用于小程序的抓包{:1_904:}

hjw01 发表于 2022-7-27 12:39

mark了谢谢

nullable 发表于 2022-7-27 13:51

一位不愿透露姓名的米系root并且安装httpcanary成功的用户默默路过。

taiyang188 发表于 2022-7-27 14:00

谢谢分享

你就是我的阳光 发表于 2022-7-27 15:49


谢谢分享

yanecc 发表于 2022-7-27 17:32

学习了,感谢分享

joylau123 发表于 2022-7-27 19:54

感谢分享.向大佬学习
页: [1] 2 3
查看完整版本: WSA中抓取SSL/TLS加密数据包