iOS 透明抓包再探讨

2018-02-02 11:17:31 +08:00
 pheyer
以前的讨论: https://www.v2ex.com/t/302886

之前用 Charles/mitmproxy 抓包时发现 websocket 包不一定走代理,所以走代理的方式行不通,还是得用透明抓包,不需要用代理

以前看到的透明抓包方法是在网关或者说是路由器抓才行的,需要路由器支持才行的。另外也有一个 rvi 方法,就是手机 4g 上网,需要 usb 连接 mac,在 Mac 上敲命令创建一个远程虚拟接口 Remote Virtual Interface ( RVI )来进行抓包

或者用 iPhone 上的 app surge 来实现抓包,这个是底层的,不需要代理,可以解密 https,但终究是手机上的,操作不方便

最近发现 iPhone 可以通过数据线连接 Mac 进行上网,即在 Mac 的共享设置里打开互联网共享,共享方式为 iPhone USB,这样就可以实现 iPhone 的流量全部走 Mac WIFI 了,实际上在 Mac 上面多了一个虚拟桥接网卡 bridge100

iPhone 的网络包全部从 Mac 上经过,用 Wireshark 抓这个 bridge100 网卡的包就能抓到 iPhone 全部的包,甚至抓 WIFI en1 的包也能抓到 iPhone 的网络包,但是这个 Wireshark 并没有 Charles 友好,https 解密、截包改包也不如 Charles/mitmproxy

Mac 上的 surge 似乎也需要代理,新出的一个 Specht ( https://www.v2ex.com/t/298865 )不是很了解。

另外我注意到 mitmproxy 有一个透明代理功能,也就是不需要用代理的,用这个透明代理功能似乎需要部署在网关 /路由器上的,但搜了一下发现也可以部署到 Linux/Mac 上,对应的需要用到 iptables/pf,不过资料并不多

现在已知,iPhone 的网络包可以全部走 Mac 不用代理,而 Mac 上的 mitmproxy 又支持透明代理,我想这样是不是就可
以省去网关 /路由器部署,两者结合是不是实现 iOS 最强透明抓包:既能 https 解密,又能截包改包?
4745 次点击
所在节点    问与答
19 条回复
ysc3839
2018-02-02 11:26:30 +08:00
手机和电脑都在同一局域网的话可以直接用 ARP 欺骗。
pheyer
2018-02-02 11:28:00 +08:00
对于 Android,在 Mac 是有线连接网络的情况下,可以共享 Wifi 给 Android 手机,这样 Android 手机的网络包也全部走 Mac,如果上面最后说的 iOS 透明抓包方式成立,对 Android 也应该是可行的
pheyer
2018-02-02 11:32:27 +08:00
@ysc3839 嗯,arp 也可以,看到这里有文章介绍,https://www.jianshu.com/p/ad51a2a48a09,不过是 linux 上的,不知道 Mac 可不可以
ysc3839
2018-02-02 11:46:14 +08:00
@pheyer 理论上有 libpcap 就可以。
pacino
2018-02-02 11:57:20 +08:00
surge for Mac 不行?
coolzilj
2018-02-02 12:19:24 +08:00
一直使用 mitmproxy 透明代理,不管 iOS 还是 Android,因为总有一些 app 会绕过代理
t123yh
2018-02-02 12:23:22 +08:00
在路由器上用 tcpdump 抓包
newhua
2018-02-02 12:51:37 +08:00
为什么没有想到一个更简单的:无线热点法
pheyer
2018-02-02 13:39:42 +08:00
@newhua 连接有线网络的 Mac 本身就可以共享 WIFI 给手机用,这就是无线热点吧
pheyer
2018-02-02 13:41:30 +08:00
@t123yh 并不是所有路由器都有这个条件,而且 tcpdump 抓的包不能实时看,什么 https,截包改包更无从说起吧
pheyer
2018-02-02 13:42:05 +08:00
@pacino 自己 Mac 上的 surge 过期了,没法试
pheyer
2018-02-02 13:45:35 +08:00
@coolzilj 发现我把透明代理想复杂了,刚试了成功了,其实就是设置 Mac 为 mitmproxy 透明代理,然后手机的网关设置为 Mac 的 IP 就可以了,只要在同一个局域网下,对吧?
pheyer
2018-02-02 15:20:13 +08:00
@coolzilj 我在 Mac 上用 mitmproxy 透明代理抓包,发现必须对指定端口转发到 mitmproxy 端口才行,需要下面的规则指定:
rdr on en2 inet proto tcp to any port 80 -> 127.0.0.1 port 8080
rdr on en2 inet proto tcp to any port 443 -> 127.0.0.1 port 8080
请教一下有没有不指定端口而进行任意端口透明抓包的方法呢?
Applenice
2018-02-02 15:35:56 +08:00
之前想用 Fiddler 试试 iPhone 上的 APPstore 都发出了什么请求,用无线热点+代理,Fiddler 的证书也安装了,但是网都上不了。。。一直提示:打不开该网页,因为无法与服务器建立安全的链接,不知道怎么弄了
xray887
2018-02-02 15:49:00 +08:00
@Applenice 我也遇到过,似乎是代理的问题,透明代理 or 匿名代理
kera0a
2018-02-02 16:01:43 +08:00
@Applenice 一个可能的原因是 APP Store 指定请求证书,就算安装了 Fiddler 的证书也没办法了
pheyer
2018-02-02 16:12:51 +08:00
@Applenice 今天用透明代理抓到过 icloud.com 的包,不知道这个请求你跟的 appstore 是不是都用了指定请求证书,appstore 没有试过
今天试了 iPhone 无论是通过无线还是有线的方式走 Mac 的网络都可以用 mitmproxy 进行透明抓包,只是抓包前需要先指定端口,一般情况下 80 和 443 就可以满足要求,对于 websocket,如果之前不知道端口,可以先用 wireshark 抓 bridge100 的包获取 ws 消息端口,再在规则中添加端口转发就行了
Applenice
2018-02-02 17:10:39 +08:00
@pheyer #17 谢谢~下周我再尝试一下~
coolzilj
2018-02-02 18:56:45 +08:00
@pheyer 必须要指定端口的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX