安卓上基欧博于透明代理对特定APP抓包

文章正文
发布时间:2024-09-27 09:44

安卓上基于透明代理对特定APP抓包

2023-02-03 默认分类 18

这篇文章上次修改于 500 天前,欧博可能其部分内容已经发生变化,如有疑问可询问作者。 透明代理不能解决任何与证书相关的问题前言

本文结合多篇已有文章,基于iptables + redsocks2 + Charles,最终实现对安卓上特定APP进行抓包,且APP无感知

即APP不能通过检查系统代理或者VPN来判断是不是有抓包行为

前置知识

安卓上怎么看APP的uid?

先打开你的APP,然后ps -ef命令找到有你的应用包名那一行,第一列就是uid

通常你看到的是u0_a428这样的,那么后面的命令,uid相关的可以写成u0_a428,也可以写成10428

步骤

首先先保存开机后的iptables,如果已经修改过,请重启手机

iptables-save > /data/local/tmp/iptables.rules

要恢复iptables为之前的规则,则使用如下命令,或者重启手机

iptables-restore /data/local/tmp/iptables.rules

使用如下命令,作用是:将uid为10428所请求的在0-65535端口上的tcp流量,转发到127.0.0.1:16666,但是排除了来自127.0.0.1的请求

参考:iptables 在 Android 抓包中的妙用

iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666

要实现抓包,其中127.0.0.1:16666是一个透明代理的地址

然而根据已有文章可知,如果直接设置为Charles的透明代理地址,对于https将会出现invalid first line in request错误,只有http的请求数据会被正常解析

参考:利用 Redsocks 解决透明代理的远程抓包问题

根据文章可知,欧博娱乐借助redsocks进行转发即可

我这里使用的是redsocks2,编译参考:静态交叉编译 Android 的 redsocks2

这里直接使用编译好的即可,也可以考虑自己编译下,下载后解压压缩包

创建配置文件,名为redsocks.conf,内容如下:

base { log_debug = off; log_info = on; log = stderr; daemon = off; redirector = iptables; } redsocks { bind = "127.0.0.1:16666"; relay = "192.168.1.14:8889"; type = socks5; autoproxy = 0; timeout = 13; }

其中bind就是透明代理地址,relay就是Charles的代理地址,更多详细用法请查阅redsocks2的readme

注意配置文件的每一对{}后面都应该有一个空行,否则会提示unclosed section

现在把redsocks.conf和redsocks2_arm64推送到/data/local/tmp

然后在root用户下运行redsocks2_arm64即可

adb push redsocks2_arm64 /data/local/tmp/redsocks adb shell chmod +x /data/local/tmp/redsocks adb shell su cd /data/local/tmp ./redsocks

现在不出意外的话,Charles应该就能看到uid为10428所对应APP的全部tcp数据包了(除去来自127.0.0.1的请求)

如果是只想对特定端口抓包,那么应该使用-m multiport --dports 80,443这样来限定一个或者多个端口

iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:16666总结

使用iptables将来自特定uid的全部tcp流量转到指定的透明代理上

iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666

使用redsocks将流量转发到正向代理,如Charles的socks5代理

redsocks2_arm64下载地址如下

https://fh0.github.io/assets/android-redsocks2.tgz

redsocks.conf内容如下

base { log_debug = off; log_info = on; log = stderr; daemon = off; redirector = iptables; } redsocks { bind = "127.0.0.1:16666"; relay = "192.168.1.14:8889"; type = socks5; autoproxy = 0; timeout = 13; }

其他补充:

安装Charles证书到系统分区,Charles才能解密https

如果你发现了文章中的错误,请指出

效果

2023-02-03T07:28:10.png

2023-02-03T07:28:23.png

参考 抓包 已有 18 条评论

nnkk

nnkk 2023.03.01

师傅好,请教一下,redsocks报错
socks5_is_known_auth_method: Socks5 server reported unexpected auth methods reply version...,并且经过charles的数据包无法解密,请问您有遇到这种情况吗?

sfx

sfx 2023.03.01

你可能操作有问题。如果你抓到了数据,不能解密,你可能是没有安装证书。

nnkk

nnkk 2023.03.01

感谢师傅,我又重试了一下,确实是我的操作问题

trad

trad 2023.07.13

我也遇到了相同的问题,可以请教一下是怎么解决的吗

sw 2023.03.04

脸哥,假如uid是root,也能抓吗

sfx

sfx 2023.03.04

可以的,你把--uid-owner指定为root即可,但是要注意iptables要避免redsocks的造成回环之类的,不过我个人也不会这个操作,根据参考文章直接避免127的流量就好了。

つなやう 2023.03.04

这里使用 iptables-restore 与 iptables-save 恢复,可以替换为 -A 添加规则 -D 删除规则,举个例子,添加规则 iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666,删除规则 iptables -t nat -D OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666

sfx

sfx 2023.03.04

感谢你的建议,iptables-restore确实不是很好使。不过大部分小白执行命令也不知道有些选项该怎么设置,个人推荐设置的有问题的时候,直接重启手机(

求知 2023.04.16

安卓手机上用 iptables-save > /data/local/tmp/iptables.rules 保存iptables的配置,然后用 iptables-restore /data/local/tmp/iptables.rules 想恢复,结果报错为:iptables-restore v1.6.1: quota2: option "--name" cannot be inverted.Error occurred at line: 169
Try `iptables-restore -h' or 'iptables-restore --help' for more information.请问正确应该怎么写呢? --help查看它写的说明,感觉写的更让人看不懂————————————
Usage: iptables-restore [-c] [-v] [-t] [-h] [-n] [-w secs] [-W usecs] [-T table] [-M command] [ --counters ] [ --verbose ] [ --test ] [ --help ] [ --noflush ] [ --wait=<seconds> [ --wait-interval=<usecs> [ --table=<TABLE> ] [ --modprobe=<command> ]

sfx

sfx 2023.04.17

这个在安卓上确实有问题,我的建议是直接重启手机。不过我还是更推荐用clash那个方案来。

求知 2023.04.18

能透明抓包,不被检测出来,不是主要靠redsocks2实现的么?换clash的话,不会被检测出来么

求知 2023.04.19

大佬,我看了您第二个文章。但有点不明白。如果本身没有翻墙需要,只是为了抓包,用redsocks2好像支持的协议和小蓝猫是一样的吧。小蓝猫没有多支持什么吧?

sfx

sfx 2023.07.21

你多抓点数据对比一下就会发现redsocks的异常很多,clash core用户量很大,稳定性也更好

abner

abner 2023.08.23

我抓包提示,red_is_socket_connected_ok: Connection refused,charles上也没任何数据

nic

nic 10 个月前

脸哥好!
我已经使用你的这套方案完成了搭建,并实现了抓包。但是我现在有一个需求,我想在redsocks转发的时候,在header里面增加一些日志信息,但是redsocks好像不支持。
我想咨询一下,安卓端还有其他的正向代理可以实现透明代理,并且支持在流量转发的过程中,在header里面增加信息么?

sfx

sfx 9 个月前

建议配合抓包软件操作,比如把流量转发到mitmproxy

thouger 6 个月前

可不可以把--uid-owner去掉呢,我试了一下,iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
这样就抓不到包了,一定要限制uid吗?

sfx

sfx 5 个月前

可以看另外一篇clash版的写法

首页
评论
分享
Top