Android上基于透明代理对特定APP抓包技巧

前言 本文结合多篇已有文章,基于iptables + redsocks2 + charles,最终实现对安卓上特定app进行抓包,且app无感知
即app不能通过检查系统代理或者vpn来判断是不是有抓包行为
步骤 首先先保存开机后的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
这里直接使用编译好的即可,也可以考虑自己编译下,下载后解压压缩包
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;} 其中bind就是透明代理地址,relay就是charles的代理地址,更多详细用法请查阅redsocks2的readme
注意配置文件的每一对{}后面都应该有一个空行,否则会提示unclosed section
现在把redsocks.conf和redsocks2_arm64推送到/data/local/tmp
然后在root用户下运行redsocks2_arm64即可
adb push redsocks2_arm64 /data/local/tmp/redsocksadb shell chmod +x /data/local/tmp/redsocksadb shellsucd /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     2. 使用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
如果你发现了文章中的错误,请指出
效果


STM32F103系列芯片系统架构
称重传感器的原理_称重传感器的外形构造与测重形式
亚马逊将在欧洲启动空运业务,规模扩大70架飞机
代码的黑盒测试(下)| 库接口测试Library Interface Testing
基士得耶自诊功能表(通用代码)
Android上基于透明代理对特定APP抓包技巧
解读4G LTE带来的四大技术创新
美国有55%的人不想要宽带
什么是线性失真?什么是非线性失真?浅析无线通信的失真
高速电路PCB回流路径详解
耐德佳联手诠视科技推出了一款超大视场角6DOF MR头显解决方案
破1000亿!天猫双11比去年快7个多小时!
摩尔定律延续的希望来了!打开“超级芯片”大门,现有晶体管或被新材料取代
视频谈芝识|降低功耗,延长电池寿命!了解负载开关IC在电路中的作用
浅析PLC最基本的串口通讯
以创新差异化方案深耕四大领域,FPGA龙头赛灵思挖出150亿蓝海市场!
荣耀V9深度评测:2K屏幕+双摄,值不值3499元?
常用齿轮的类型和优缺点
干式变压器与油浸式变压器的区别差异
安科瑞ARTM-8变配电无线测温系统