安卓上基于透明代理抓包

前言

在安卓上基于透明代理对特定APP抓包中使用的是redsocks2,本文演示如何使用clash实现同样的效果

你以为是Clash For Android,错,这里使用的是Core版本

就原理上来说,和前一篇文章并无区别,Clash的优势在于其支持多种类型的代理,拥有更细粒度的配置能力

这样在不开VPN的情况下挂海外代理也很方便,APP也检查不到(好像有一些不好的用途,不过我真的只是抓包...

文件准备

从下面获取需要的文件

  • clash透明代理抓包配置文件
  • Country.mmdb
  • clash-linux-arm64

    • 记得解压

或者用这个懒人包,下载后解压

  • 安卓clash透明代理抓包.zip

md5: 9B765C7E759F3FC0C8DD103C2E20B9CD

步骤

文件准备好后,按以下几步操作即可(均在root下执行):

  1. 修改config.yaml中的代理配置,改成你的抓包软件的代理
  2. 连接手机,完成adb配对,然后运行push.bat即可;或者选择自己手动写脚本把文件推送到/data/local/tmp
  3. 启动clash,第一次运行会下载Country.mmdb,压缩包里已经准备好了

    /data/local/tmp/clash-linux-arm64 -d /data/local/tmp
  4. 设置iptables规则

    /data/local/tmp/clean.sh && /data/local/tmp/iptables.sh
  5. 转发9090端口,这个在config.yaml配置的,也可以考虑配置为0.0.0.0:9090,就不用adb forward

    adb forward tcp:9090 tcp:9090
  6. 访问web版clash控制台,这里随便谷歌到的一个: Clash

    这个网站需要代理才能访问,访问之后关掉代理即可,另外为了避免浏览器插件带来的影响,建议隐身模式下访问

    或者试试这个(【也可以手机上直接访问这个】):yacd

    这里选择好要使用的代理即可,这个操作只需要做一次,后面启动clash就会默认这个代理了

    安卓上基于透明代理抓包_第1张图片

    如果前面config.yaml配置的是0.0.0.0,那么弹出下图时可以填手机ip

    安卓上基于透明代理抓包_第2张图片

  7. 现在抓包软件应该就能看到数据包了

    安卓上基于透明代理抓包_第3张图片

  8. 结束抓包,记得清理iptables,或者重启手机

    /data/local/tmp/clean.sh

在完成首次配置之后,后续只需要两个步骤即可,即运行clash和启用iptables,记得分两个shell操作

/data/local/tmp/clash-linux-arm64 -d /data/local/tmp
/data/local/tmp/clean.sh && /data/local/tmp/iptables.sh

补充:

Q: 怎么按uid/用户过滤
A: iptables.sh添加这样的内容即可,即-m owner --uid-owner u0_a428,也可以写成10428这样

  • iptables -t mangle -A OUTPUT -j clash_local

变更为

  • iptables -t mangle -A OUTPUT -m owner --uid-owner u0_a428 -j clash_local

iptables.sh修改后重新push一次,然后clean后再次执行即可

需要注意的是isolatedProcess的uid可能不一样,比如是u0_i9008,那么增加一条上面的规则即可

Q: 如何给clash增加多个代理
A: 当前config.yaml配置已有示例,只是要注意重新push配置文件后,要重新运行clash

udp抓包

上面的配置完成后,对于tcp包应当都是可以抓到的,ipv6暂时不管了...

那么能不能抓到udp包呢?

经过测试,发现使用Charles的话似乎是不行的,应该是本身没有提供支持

但是mitmproxy说是支持的,有一个rawudp是设定,默认是开着的

mitmproxy代理类型设置为socks5,然后可以正常抓包,不过没有udp

经过观察,发现udp包是有转发给mitmproxy的,只是提示nsupported SOCKS5 request

可以定位到对应的代码位置

  • https://github.com/mitmproxy/mitmproxy/blob/0b89aede3817831394e6473d82eb04ce572ef621/mitmproxy/proxy/layers/modes.py#L243

安卓上基于透明代理抓包_第4张图片

可以看到异常的时候,对应的前四个字节都是05030001,而根据socks5协议的说明,这里应该就是代表udp

安卓上基于透明代理抓包_第5张图片

这里应该是mitmproxy对这种情况缺乏支持完善,改改也许能适配?这样一来抓包数据就能相当完整了

你可能感兴趣的:(网络)