安卓上基于透明代理对APP抓包
简述
使用iptables将手机的全部tcp流量转到指定的透明代理上;
再使用redsocks将流量转发到正向代理,如Charles的socks5代理
基于iptables + redsocks2 + Charles,最终实现对安卓APP进行抓包,且APP无感知
即APP不能通过检查系统代理或者VPN来判断是不是有抓包行为
准备
root过的安卓手机一部,电脑一台
redsocks2 下载地址:https://fh0.github.io/assets/android-redsocks2.tgz
步骤
创建配置文件,名为redsocks.conf,内容如下:
1 | base { |
其中bind就是透明代理地址,relay就是Charles的代理地址
打开终端adb shell 连接手机
- 保存现有的iptables规则
1
iptables-save > /data/local/tmp/iptables.rules
- 假如要恢复规则,需要重启手机或者输入
1
iptables-restore /data/local/tmp/iptables.rules
- 上传文件,开启透明代理
1
2
3
4
5
6
7adb 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
然后把命令换成
1 | 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/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zyb'Blog!