安卓上基于透明代理对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,内容如下:

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 连接手机

  1. 保存现有的iptables规则
iptables-save > /data/local/tmp/iptables.rules
  1. 假如要恢复规则,需要重启手机或者输入
iptables-restore /data/local/tmp/iptables.rules
  1. 上传文件,开启透明代理
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
  1. Charles 设置Socks5代理端口7777

指定端口、App

上述步骤完成,就达到了抓包App无感知的目的
假如不想让全局的流量都走代理

  1. 指定端口
    其实上面已经写了,当前是指定的80,443端口,也可以指定0-65535,改为 --dports 0:65535即可
  2. 指定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/

你可能感兴趣的:(android,adb)