简介

常用工具:

  • Yakit:和 burpsuite 差不多的抓包方式。
  • Reqable:支持standalone、VPN模式,可绕过系统代理拦截 Flutter。
  • OkHttp:OkHttp 是Android 最流行的网络库,抓包工具通过 hook 接口来抓包。
  • r0Capture:hook 抓包通杀脚本。
  • eCapture:内核级 hook 抓包,无需证书捕获 TLS 明文。

为了能够拦截 TLS/SSL 通信,我们需要我们的代理工具的证书才能被设备信任。通过 android 设置,我们可以轻松地将证书安装到“用户”CA 存储中。

只有在以下情况下,应用才信任用户证书:

  1. 该应用以 Android 6(API 级别 23)或更低版本为目标平台
  2. 或者网络安全配置专门包括“用户”证书

Example which trusts “user” certificates:xml/network_security_config.xml

<base-config cleartextTrafficPermitted="false"> 
	<trust-anchors> 
		<certificates src="system" /> 
		<certificates src="user" /> 
	</trust-anchors> 
</base-config>

当应用程序发送明文流量时,我们可以认为这是一个安全问题。但是,只能通过证书拦截的加密流量并不是安全问题。通过安装 CA,我们故意削弱设备的安全性,以允许我们解密流量。

安装证书:

由于默认的网络安全配置规则,大多数应用仅新人系统证书。面向 Android 9 及更高版本的应用默认配置如下:

<base-config cleartextTrafficPermitted="false"> 
	<trust-anchors> 
		<certificates src="system" /> 
	</trust-anchors> 
</base-config>

Yakit抓包

研究一下最近很火的 Yakit 怎么抓真机 App 的包。

这里电脑和真机处于同一无线网络下。

配置

点击 Wifi 网络的右上角的编辑。然后在代理中设置手动代理,设置为电脑的无线网卡地址。

安装 Yakit 证书,进入高级配置然后选择证书下载。

将证书导入到手机中,比如直接通过 USB 共享文件复制过去。

进入手机设置->安全和隐私->更多安全设置->加密与凭据->安装证书。

然后选择我们导入到手机的证书文件,点击然后选择证书安装程序。

验证

手机打开浏览器,进入百度随便一个网址。

可以看到 Yakit 已经抓到了数据包。

Reqable抓包

Reqable 使用经典的中间人(MITM)技术分析 HTTPS 流量,当客户端与 Reqable 的代理服务器(下文简称中间人)进行通信时,中间人需要重签远程服务器的 SSL 证书。为了保证客户端与中间人成功进行 SSL 握手通信,需要将中间人的根证书(简称CA根证书)安装到客户端的证书管理中心。

Reqable 可以自动绕过对于代理的检测以及对于 VPN 的检测。

由于 Flutter 网络通信通常绕过系统代理,很多传统抓包工具无法抓取其通信,需要 Reqable VPN 模式。

桌面端配置

在桌面端启动 Reqable,选择证书->安装根证书到本机

安装成功

手机端配置

手机端同样也要安装证书,选择证书->安装根证书到Android设备,然后在左下角点击导出证书。其余安装流程和 Yakit 差不多,这里就不过多赘述了。

手机端进入协同模式

扫描桌面端的二维码。

点击 ip 旁的手机图标,唤出二维码,然后扫描。

点击右下角的按钮开始抓包。

允许。

抓包

然后就可以对目标 APP 进行抓包,我们可以选择特定 APP 进行筛选。

Hook抓包

Hook 抓包是一种截取应用程序数据包的方法,通过 Hook 应用或系统函数来获取数据流。在应用层 Hook 时,通过查找触发请求的函数来抓包,优点是不受防抓包手段影响,缺点是抓包数据不便于我们分析和筛选。

可以绕过诸如代理检测、VPN检测、明文解密、可以抓 OkHttp、可以抓 Flutter。

OkHttp

常见安卓网络开发框架:

框架名称描述
Volley由 Google 开源的轻量级网络库,支持网络请求处理、小图片的异步加载和缓存等功能
Android-async-http基于 Apache HttpClient 的一个异步网络请求处理库
xUtils类似于 Afinal,但被认为是 Afinal 的一个升级版,提供了 HTTP 请求的支持
OkHttp一个高性能的网络框架,已经被 Google 官方认可,在 Android 6.0 中底层源码已经使用了 OkHttp 来替代 HttpURLConnection
Retrofit提供了一种类型安全的 HTTP 客户端接口,简化了 HTTP 请求的编写,通常与 OkHttp 配合使用

拦截器是 OkHttp 提供的对 Http 请求和响应进行统一处理的强大机制,它可以实现网络监听、请求以及响应重写、请求失败充实等功能。
OkHttp 中的 Interceptor 就是典型的责任链的实现,它可以设置任意数量的 Intercepter 来对网络请求及其响应做任何中间处理,比如设置缓存,Https证书认证,统一对请求加密/防篡改社会,打印log,过滤请求等等。 OkHttp 中的拦截器分为 Application Interceptor(应用拦截器) 和 NetWork Interceptor(网络拦截器)两种。

这里我们学习如何通过 OkHttpLogger-Frida 项目对 OkHttp 框架进行抓包。

函数:

  • find():
  • hold():

将okhttpfind.dex文件复制到/data/local/tmp目录下,并设置可执行权限。

adb push ./okhttpfind.dex /data/local/tmp
adb shell
chmod 777 /data/local/tmp/okhttpfind.dex

官方使用示例:

基本使用:

frida -U woaipojie -l okhttp_poker.js 
hold()

可以看到成功抓到了数据包!

r0Capture

如果 APP 不是使用 OkHttp 框架开发的,或者说它的混淆非常强导致你无法定位到它的发包函数。那么可以使用 r0Capture 这个工具。

r0Capture 是一个基于 Firda 的 Android 抓包框架脚本,可以通杀 Android 上绝大多数应用层流量协议,并绕过各种证书校验、加固保护、网络层劫持检测,用于动态分析和安全测试。

  • 仅限安卓平台,测试安卓 7-14 可用;
  • 无视所有证书校验或绑定;
  • 通杀 TCP/IP 四层模型中的应用层中的全部协议;
  • 通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;
  • 通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;
  • 无视加固,不管是整体壳还是二代壳或VMP,不用考虑加固的事情;但是对于部分大厂的自定义的 SSL 框架则不支持。

用法:

  • Spawn 模式(启动 App 前 hook)
python3 r0capture.py -U -f com.coolapk.market -v
  • Attach 模式(运行中注入,抓包保存为 pcap)
python3 r0capture.py -U 酷安 -v -p iqiyi.pcap
  • -U:连接 USB 真机
  • -f:指定包名(旧版 Frida)
  • 酷安:新版 Frida 用 App 名(通过 frida-ps -U 查看)
  • -p:保存为 pcap 文件,便于后续 Wireshark 分析

我们可以将保存的 pcap 文件通过 Wireshark 进行详细分析。

r0Capture 虽然适配了大多数的环境,但是对于一些大厂自定义的框架仍然是没有支持的。

eCapture

eCapture 是一个基于内核机制的抓包工具,利用了 eBPF 和 Hook 技术实现内核层的网络抓包。eBPF 是一个运行在 Linux 内核里面的虚拟组件,它可以无需改变内核代码或者加载内核模块的情况下,安全而又高效地扩展内核的功能。

eCapture 的工作原理涉及到用户态和内核态。用户态就是运行应用程序的地方,比如各种 App。在这个区域中,eCapture 通过一个共享的模块获取应用程序的网络数据。然后,它将这些数据传递给内核态的 eBPF 程序进行分析和处理。在内核空间,eCapture 通过 eBPF 插件捕捉网络层的数据流,比如数据包是从哪里来的、发到了哪里去。这一过程不需要修改应用程序本身,所以对系统性能影响很小。

安卓设备的内核版本只有在 5.10 版本上才可以进行无任何修改的开箱抓包操作。

通过以下命令查看系统内核版本:

adb shell uname -r

使用 eCapture 可以在不配置 CA 证书的情况下也能捕获到 https/tls 的通讯明文。

  • 环境搭建
#下载文件
adb push ./ecapture /data/local/tmp
chmod +x ./ecapture
  • 基本使用

捕获 TLS 明文(text模式)

./ecapture tls -m text

捕获 TLS 握手密钥(keylog 模式)

./ecapture tls -m keylog --keylogfile=openssl_keylog.log

该文件可配合 Wireshark 设置 TLS 解密,路径在: Edit > Preferences > Protocols > TLS > (Pre)-Master-Secret log filename

保存为 pcap 文件(pcap 模式)

./ecapture tls -m pcapng -i eth0 --pcapfile=ecapture.pcapng

然后可用 Wireshark 打开 .pcapng 文件,看到明文数据包。

adb shell ps | findstr 应用包名(获取进程pid)
./ecapture tls -p pid -m text

通过 eCaptureQ 联合抓包:

./ecapture tls --ecaptureq ws://0.0.0.0:28257

设置手机的 ip 地址:

image-20251122195024038

然后重启下之后,在手机中打开要抓包的 APP 即可抓到包。

image-20251122195654110

参考

Android HTTPS认证的N种方式和对抗方法总结 吾爱破解安卓逆向入门教程《安卓逆向这档事》二十二课、一饭三吃(抓包版) httptoolkit/frida-interception-and-unpinning: Frida scripts to directly MitM all HTTPS traffic from a target mobile application gojue/ecapture:使用 eBPF 捕获没有 CA 证书的 SSL/TLS 明文。在 amd64/arm64 的 Linux/Android 内核上受支持。