摘要

为了解决非root情况下,拦截安卓app加载指定请求的问题,使用blokada进行拦截。

需求

安卓机上安装了某app,由于有使用需求,不得不用。但是每次打开,都会下载几段mp4广告,还有几个巨大的html广告文件,以及其他我用不到的功能更新。虽说有流量,但是也不应该这样浪费。主要是我觉得一个特定功能的app,搞那么多广告、社交功能干啥。初步想法是抓包对应请求之后,自己进行发送。

抓包分析

使用burp抓包,操作对应功能之后,对数据包重放,发现无法实现对应功能。
查看adb log之后,可以看到点击功能之前,有其他相关log。所以前面抓的数据包并不对,但是也没有抓到其他数据包。反编译apk,关键词查找。同时在测试设备上使用tcpdump进行抓包。结合反编译,发现app使用了非标准端口,并且对应功能使用的是websocket进行通信的。不过由于其使用的是ws而不是wss,所以tcpdump可以抓到通信内容。将通信内容进行重放,返回请求未报错。但是最终实际测试时,发现无法完成对应功能。(这里有个风险,由于其使用ws通信,如果网络上存在抓包,那么是可以解出来敏感信息的。)通过数据使用了rsa进行的加密,实现逻辑放到了so文件中。由于测试时,账号被封了一段时间,所以没有继续做抓包分析。

拦截请求

既然提取功能进行实现存在问题,考虑使用拦截的方法,将广告等请求进行拦截。
搜索安卓防火墙,发现只有两种实现。

  1. root 之后,使用iptables进行拦截
  2. 使用VpnService进行操作

由于非测试机没有root,第一种方法暂时不可行。只能尝试第二种方法。
尝试NetGuard,发现可以抓到的请求比较多,但是拦截功能需要付费。最终使用blokada对请求进行拦截。由于操作比较简单,遂不多说。

其他

为了安全和隐私,厂商和系统限制了功能和api,或者没有提供api,虽说可能会存在滥用的风险,但是限制的同时,也限制了自己的防御能力。

引用

  1. https://developer.android.com/reference/android/net/VpnService
  2. https://github.com/M66B/NetGuard/
  3. https://github.com/blokadaorg/blokada
  4. https://sspai.com/post/61573