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

admin 2022年7月28日01:22:56评论481 views字数 2902阅读9分40秒阅读模式

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

前言

出于某种个人需求,需要抓取某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%servicingPackages*Hyper-V*.mum >hyper-v.txtfor /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%servicingPackages%%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中抓取SSL/TLS加密数据包

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

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

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

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

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

集成了Magisk等模块的WSA。

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

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

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

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

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

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

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

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

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

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

Fiddler

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

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

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

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

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

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

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

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

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

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

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

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

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

HttpCanary

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

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

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

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

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

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

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

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

参考资料

  1. 使用Fiddler在WSA-Windows安卓子系统-上抓包

  2. HttpCanary 在 Android 11 上的使用 - 简单逆向分析

该内容转载自网络,更多内容请点击“阅读原文”

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

原文始发于微信公众号(web安全工具库):WSA中抓取SSL/TLS加密数据包

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月28日01:22:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WSA中抓取SSL/TLS加密数据包http://cn-sec.com/archives/1205661.html

发表评论

匿名网友 填写信息