这篇文章上次修改于 354 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
透明代理不能解决任何与证书相关的问题
前言
在安卓上基于透明代理对特定APP抓包中使用的是redsocks2
,本文演示如何使用clash实现同样的效果
你以为是Clash For Android,错,这里使用的是Core版本
就原理上来说,和前一篇文章并无区别,Clash的优势在于其支持多种类型的代理,拥有更细粒度的配置能力
这样在不开VPN的情况下挂海外代理也很方便,APP也检查不到(好像有一些不好的用途,不过我真的只是抓包...
20231204补充
如果在中途切换了网络,请重新清理原iptables然后重新执行一次iptables.sh
即需要确保先有网,再执行转发规则,当然如果你是在网关设备做转发那就执行一次即可
20230802补充
脚本中没有对ipv6处理,所以有部分ipv6的请求可能抓不到,所以有个简单的方案就是把ipv6干掉,所以请把下面的脚本加入iptables.sh
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
另外把clash中ipv6的配置注释掉即可
感谢Abbbbbi的反馈
文件准备
从下面获取需要的文件
或者用这个懒人包,下载后解压
md5: 9B765C7E759F3FC0C8DD103C2E20B9CD
步骤
文件准备好后,按以下几步操作即可(均在root下执行):
- 修改
config.yaml
中的代理配置,改成你的抓包软件的代理 - 连接手机,完成adb配对,然后运行
push.bat
即可;或者选择自己手动写脚本把文件推送到/data/local/tmp
启动
clash
,第一次运行会下载Country.mmdb
,压缩包里已经准备好了/data/local/tmp/clash-linux-arm64 -d /data/local/tmp
设置
iptables
规则/data/local/tmp/clean.sh && /data/local/tmp/iptables.sh
转发9090端口,这个在
config.yaml
配置的,也可以考虑配置为0.0.0.0:9090
,就不用adb forward
了adb forward tcp:9090 tcp:9090
- 访问web版clash控制台,这里随便谷歌到的一个: http://clash.razord.top/
这个网站需要代理才能访问,访问之后关掉代理即可,另外为了避免浏览器插件带来的影响,建议隐身模式下访问
如果链接不了controller,请尝试将http换成https
或者试试这个(【也可以手机上直接访问这个】):http://yacd.haishan.me/
这里选择好要使用的代理即可,这个操作只需要做一次,后面启动clash就会默认这个代理了
如果前面config.yaml
配置的是0.0.0.0
,那么弹出下图时可以填手机ip
- 现在抓包软件应该就能看到数据包了
结束抓包,记得清理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
可以定位到对应的代码位置
可以看到异常的时候,对应的前四个字节都是05030001
,而根据socks5协议的说明,这里应该就是代表udp
这里应该是mitmproxy
对这种情况缺乏支持完善,改改也许能适配?这样一来抓包数据就能相当完整了
已有 13 条评论
能和burp一起使用吗?抓到https呢?
@admin clash的上游代理设置成burp的就行了,你到底有没有认真看文章啊
你这写的看球不懂
访问 web 版 clash 控制台这里有一个坑,使用隐私模式会无法链接到手机的9090端口,链接可以选择 http://clash.razord.top 或 https://clash.razord.top 进行尝试
@つなやう 无法访问有可能是开了全局代理,或者电脑到手机本身网络不通。如果使用adb forward肯定好使,还有个方案是直接在手机上先打开访问这个控制台。
@sfx 倒是没开全局也进行过 forward,不过后面使用正常模式就能进入,手机上两个网址都尝试过无法进入,不确定是不是google浏览器的毛病
exe离线版clash控制台
https://www.52pojie.cn/thread-1755320-1-1.html
说实在话 看不懂
这种抓包可以无视客户端证书吗
@watchmen 不可以,该方案不能解决任何与证书相关的问题。
@sfx 好吧,试了一下确实是不能。不过这种透明代理确实很强,只不过有点麻烦。现在有什么好的方案可以应对证书吗?
能解决SSL Pinning问题吗?
非常感谢,我受益颇深