简述
使用iptables将手机的全部tcp流量转到指定的透明代理上;
再使用redsocks将流量转发到正向代理,如Charles的socks5代理
基于iptables + redsocks2 + Charles,最终实现对安卓APP进行抓包,
且APP无感知
即APP不能通过检查系统代理或者VPN来判断是不是有抓包行为
准备
root过的安卓手机一部,电脑一台
redsocks2 下载地址: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:8080";
relay = "192.168.0.132:7777";
type = socks5;
autoproxy = 0;
timeout = 10;
}
其中bind就是透明代理地址,relay就是Charles的代理地址
打开终端adb shell 连接手机
- 保存现有的iptables规则
iptables-save > /data/local/tmp/iptables.rules
- 假如要恢复规则,需要重启手机或者输入
iptables-restore /data/local/tmp/iptables.rules
- 上传文件,开启透明代理
adb push redsocks2_arm64 /data/local/tmp/redsocks
adb shell chmod +x /data/local/tmp/redsocks
adb shell
su
cd /data/local/tmp
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:8080
./redsocks
- Charles 设置Socks5代理端口7777
指定端口、App
上述步骤完成,就达到了抓包App无感知的目的
假如不想让全局的流量都走代理
-
指定端口
其实上面已经写了,当前是指定的80,443端口,也可以指定0-65535,改为 –dports 0:65535即可 -
指定App
首先要找到App的uid
先打开你的APP,然后ps -ef命令找到有你的应用包名那一行,第一列就是uid
通常你看到的是u0_a428这样的,那么后面的命令,uid相关的可以写成u0_a428,也可以写成10428
然后把命令换成
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dports 80,443 -j DNAT --to-destination 127.0.0.1:8080
参考
https://blog.seeflower.dev/archives/207/
https://mp.weixin.qq.com/s/P0ESUUXBmq2aQnrqDHsDaw
https://blog.mythsman.com/post/62791fb4b5467000017d5c6e/