实战|安卓上基于透明代理对特定APP抓包技巧
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
前言 本文结合多篇已有文章,基于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 如果你发现了文章中的错误,请指出 效果 参考 iptables 在 Android 抓包中的妙用 -https://mp.weixin.qq.com/s/P0ESUUXBmq2aQnrqDHsDaw 利用 Redsocks 解决透明代理的远程抓包问题 -https://blog.mythsman.com/post/62791fb4b5467000017d5c6e/ 静态交叉编译 Android 的 redsocks2 -https://fh0.github.io/%E7%BC%96%E8%AF%91/2019/12/07/android-redsocks2.html redsocks2 -https://github.com/semigodking/redsocks 默认配置文件报错 -https://github.com/semigodking/redsocks/issues/131 redsocks搭配iptables实现真全局代理 -https://anuoua.github.io/2020/05/28/redsocks%E6%90%AD%E9%85%8Diptables%E5%AE%9E%E7%8E%B0%E7%9C%9F%E5%85%A8%E5%B1%80%E4%BB%A3%E7%90%86/ 作者:SeeFlowerX 来源:https://blog.seeflower.dev/archives/207/ 黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担! 如侵权请私聊我们删文 END