Android APP Packet Capturing Solutions
Created October 25, 2023
本文内容仅用于个人存档和技术交流学习,禁止使用文中内容进行未授权或恶意的攻击行为。
1. 背景
在移动安全研究中,如果要对一个APP进行逆向分析、进而了解其交互行为,流量分析是非常重要的一个手段。
而Android APP流量分析虽然是一个老生常谈的话题,但其中仍有许多坑点。同时,对于以下这些特殊情况,常见的抓包手段可能并不适用,比如:
- 没有安卓真机的苹果用户;
- 需要进行长期自动化流量分析的研究人员;
- 对国际APP(需要额外配置科学上网代理才能正常使用的APP)有分析需求的研究人员。
针对不同需求场景和硬件条件,本文介绍了两种安卓手机APP流量抓取方案,能够达到较为稳定的抓包效果。
2. 技术路线
2.1 Redroid云手机 + LAMDA框架
LAMDA框架是一个用于安卓逆向及自动化的辅助框架,集成了多种功能。LAMDA的服务端需要在待控制的目标安卓设备上安装,客户端则可以是任一个能运行python环境并安装了lamda模块(pip3 install -U lamda
)的终端。
注意:LAMDA提供了一种客户端远程操作Android设备的方法,但LAMDA框架本身并不提供Android模拟器方案,需要用户自行准备真机或模拟器环境。
Redroid是一个安卓云手机解决方案,可以帮助研究人员在一台Linux服务器上轻松地启动多个云手机实例(比如每一个Redroid云手机实例对应一个Docker容器),其同时支持arm64和amd64架构。
在Redroid云手机模拟器中安装LAMDA服务端程序,用户即可通过Chrome浏览器访问该设备LAMDA服务的指定端口,实现基于浏览器Web页面的云手机控制,远程控制效果如下图所示。
LAMDA框架中集成了mitmproxy组件,mitmproxy是一种常用的Man-in-the-Middle(MITM)代理工具,广泛应用于网络流量的拦截、截取、查看和修改。
在本地PC上运行python lamda/tools/startmitm.py
命令,即可启动mitmproxy中间人代理,LAMDA框架会自动化完成相关配置,进而把云手机的流量转发到本地PC上的代理程序,供进一步分析。mitmproxy程序还提供了Web页面,可以方便地查看所监听到的流量数据包,相关界面如下图所示。
对于需要科学上网的国际APP,此时会遇到一个问题:APP既需要设置用于科学上网的翻墙代理A,又需要设置用于抓包的中间人代理B,二者可能会相互冲突。
为了抓取国际APP的流量,可以在中间人设备中设置上游代理(upstream proxy)进一步转发流量,即在LAMDA的中间人代理程序启动时,我们通过指定upstream proxy为本地PC上的V2Ray软件(比如下图中的"10.10.192.147:10809"),来实现流量翻墙的效果。在实际操作中,也可根据需要采取其他方案,例如设置全局代理。
小结一下,Redroid云手机基于Docker容器运行,支持x86/ARM手机镜像,因此本方案能够部署在任意x86/ARM架构的服务器端,配置也相对简单,不需要进行额外的Root操作,对于没有安卓真机或有自动化操作需求的研究人员来说是一个不错的选择。事实上,一些安全公司的Android沙箱方案就是基于这套技术路线,以实现批量化部署和管理。
2.2 Android真机 + Burpsuite
在有Android真机的条件下,也可通过直接在真机中设置网络代理节点的方法来抓取流量。Burpsuite是用于Web 应用程序分析和攻击渗透的集成平台,包含了许多功能,这里我们主要使用其网络代理和抓包功能,以本地PC的Burpsuite客户端作为中间人代理来监听手机APP流量。具体步骤如下:
- 将手机连接到本地PC的热点,即把两者置于同一局域网下;
- 将手机的网络代理设置为本地PC的IP、端口设置Burpsuite中所设置的代理端口,例如8080;
- 通过手机访问http://burp,下载Burpsuite的CA证书并安装,该步骤的目的是基于CA证书对HTTPS流量进行解密;
- 最后打开Burpsuite的Proxy->Intercept功能,即可实现对手机流量的监听。相关流量的记录可以在HTTP history选项中查看。
为了抓取国际APP的流量,与云手机方案类似,我们可在本方案中设置Burpsuite的upstream proxy为本地PC上的V2Ray软件,以实现流量翻墙的效果。也可以基于自身情况,采用其他翻墙方案。
综上,本方案只需要准备一台Root后的Android手机和一台用于流量代理的PC机,其优势在于提供了真实的运行环境,能够保证目标App的运行稳定;并且该方案的网络流量抓包方法也比较成熟,相关参考资料较多。
2.3 SSL Pinning防护
在实际场景中,许多应用会采取一些防护手段来对抗第三方的流量分析。证书锁定(SSL/TLS Pinning)就是一种常见的安全防护手段。该方案将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置证书和服务器端证书的内容,以确定这个连接的合法性。采用这种技术的App会影响对HTTPS流量的抓取。
但针对SSL Pinning也存在一些绕过手段,比如使用LSPosed框架的如下模块可以hook相关系统函数,绕过证书检查。

但上述方案适用于采用了Android系统统一的SSL Pinning方案的App。如果APP自己实现了定制化的SSL/TLS证书检查方法,上面的通用绕过方法就行不通了。需要对各个App分别进行针对性的处理,例如定制化地修改APK的配置并进行重打包,其中还可能涉及APK签名校验不通过的问题,难度和工作量都较大。
3. Line APP抓包示例
以Line为例,演示采用“Android真机+Burpsuite”方案抓取OCR流量的过程。
首先按照上面的方案打开Burpsuite,配置好代理抓包环境,监听手机流量。然后打开Line应用的聊天界面,选择一个会话,发送一张图片:

接着点击含有唐诗内容的图片,再点击右上角的文字识别按钮(OCR功能),可以看到图片中的文字内容被成功识别:

查看Burpsuite中抓取到的数据包情况,选择最近的一个POST报文,可以看到其发送了一串编码过的数据,response报文中含有解析出来的静夜思诗句。
由此可见,该报文就是Line APP在执行OCR功能时的请求数据包,成功抓取到该流量。
参考
[1] https://github.com/rev1si0n/lamda
[2] https://github.com/remote-android/redroid-doc