bigwolftime / gitmentCommentsPlugin

0 stars 0 forks source link

Android https 请求抓包(透明代理) #50

Open bigwolftime opened 11 months ago

bigwolftime commented 11 months ago

https://bigwolftime.github.io/Android-SSL-packet-another/

有些 app 会对 Wi-Fi 代理的进行检测, 如果命中, 则任何请求都会执行失败, 抓包软件也看不到任何请求. 即然如此, 有什么办法可能绕过 app 的检测呢? 此处引入就需要引入透明代理.

顾名思义, 透明代理即让 app 感觉不到自己正在被代理(此种方式仍然需要设备拥有 root 权限).

有兴趣可以阅读之前的基础文章: 2020-03-06-Android-SSL-packet.md

阅读了 frida-skeleton 项目的源码, 受到启发, 即通过 iptables 配置将端口的流量转发 到代理节点, 上网搜索发现已经有许多技术大佬做了实现, 此处做下记录.

一. 配置 Magisk 插件

需要两个 Xposed/LSPosed 插件: JustMePlush 看雪论坛大神杰作 和 TrustMeAlready, 下载完成后将要抓包的 app 打上勾.

SSLUnpinning 也使用过, 但是抓包没有效果, 不知是不是使用姿势不对. :dog:

二. 配置 Android 设备流量转发

关键操作是操作 Android 设备, 将所有经过 80, 443 端口的流量都走到代理节点:

进入 Android 设备 shell

adb shell

获取超级权限

su

配置端口流量转发

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 代理ip:80 iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to 代理ip:443

执行完成后, 可以通过命令查看下是否符合预期:

iptables -t nat -L | grep -E '443|80'

预期的输出:

target prot opt source destination

DNAT tcp -- anywhere anywhere tcp dpt:https to:192.168.25.157:443 DNAT tcp -- anywhere anywhere tcp dpt:http to:192.168.25.157:80

三. 代理节点设置

此处需要引入 BurpSuite, 配置监听 443 和 80 端口的所有流量.

首先创建 443 端口的监听策略:

然后创建 80 端口的监听策略:

最终创建好的监听策略如图:

四. 实践

以某影视 app 为例, 可以看到请求详情:

抓包完成后需要将 iptables 配置还原, 否则断开 Wi-Fi 连接或者关闭代理节点后, Android 设备无法访问网络, 删除的命令:

iptables -t nat -D OUTPUT -p tcp --dport 80 -j DNAT --to 代理ip:80 iptables -t nat -D OUTPUT -p tcp --dport 443 -j DNAT --to 代理ip:443

此时若执行下面的 shell 应该返回空的结果:

iptables -t nat -L | grep -E '443|80'

五. 参考

frida-skeleton 浅析APP代理检测对抗 (原创)自识别类名 自动化Hook JustTrustMe 升级版 TrustMeAlready