简述
   
    使用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/
   
 
