V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pheyer
V2EX  ›  问与答

iOS 透明抓包再探讨

  •  
  •   pheyer · 2018-02-02 11:17:31 +08:00 · 4450 次点击
    这是一个创建于 2268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前的讨论: 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 解密,又能截包改包?
    19 条回复    2018-02-02 18:56:45 +08:00
    ysc3839
        1
    ysc3839  
       2018-02-02 11:26:30 +08:00 via Android
    手机和电脑都在同一局域网的话可以直接用 ARP 欺骗。
    pheyer
        2
    pheyer  
    OP
       2018-02-02 11:28:00 +08:00
    对于 Android,在 Mac 是有线连接网络的情况下,可以共享 Wifi 给 Android 手机,这样 Android 手机的网络包也全部走 Mac,如果上面最后说的 iOS 透明抓包方式成立,对 Android 也应该是可行的
    pheyer
        3
    pheyer  
    OP
       2018-02-02 11:32:27 +08:00
    @ysc3839 嗯,arp 也可以,看到这里有文章介绍,https://www.jianshu.com/p/ad51a2a48a09,不过是 linux 上的,不知道 Mac 可不可以
    ysc3839
        4
    ysc3839  
       2018-02-02 11:46:14 +08:00 via Android
    @pheyer 理论上有 libpcap 就可以。
    pacino
        5
    pacino  
       2018-02-02 11:57:20 +08:00
    surge for Mac 不行?
    coolzilj
        6
    coolzilj  
       2018-02-02 12:19:24 +08:00 via Android
    一直使用 mitmproxy 透明代理,不管 iOS 还是 Android,因为总有一些 app 会绕过代理
    t123yh
        7
    t123yh  
       2018-02-02 12:23:22 +08:00 via Android
    在路由器上用 tcpdump 抓包
    newhua
        8
    newhua  
       2018-02-02 12:51:37 +08:00 via Android
    为什么没有想到一个更简单的:无线热点法
    pheyer
        9
    pheyer  
    OP
       2018-02-02 13:39:42 +08:00
    @newhua 连接有线网络的 Mac 本身就可以共享 WIFI 给手机用,这就是无线热点吧
    pheyer
        10
    pheyer  
    OP
       2018-02-02 13:41:30 +08:00
    @t123yh 并不是所有路由器都有这个条件,而且 tcpdump 抓的包不能实时看,什么 https,截包改包更无从说起吧
    pheyer
        11
    pheyer  
    OP
       2018-02-02 13:42:05 +08:00
    @pacino 自己 Mac 上的 surge 过期了,没法试
    pheyer
        12
    pheyer  
    OP
       2018-02-02 13:45:35 +08:00
    @coolzilj 发现我把透明代理想复杂了,刚试了成功了,其实就是设置 Mac 为 mitmproxy 透明代理,然后手机的网关设置为 Mac 的 IP 就可以了,只要在同一个局域网下,对吧?
    pheyer
        13
    pheyer  
    OP
       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
        14
    Applenice  
       2018-02-02 15:35:56 +08:00
    之前想用 Fiddler 试试 iPhone 上的 APPstore 都发出了什么请求,用无线热点+代理,Fiddler 的证书也安装了,但是网都上不了。。。一直提示:打不开该网页,因为无法与服务器建立安全的链接,不知道怎么弄了
    xray887
        15
    xray887  
       2018-02-02 15:49:00 +08:00
    @Applenice 我也遇到过,似乎是代理的问题,透明代理 or 匿名代理
    kera0a
        16
    kera0a  
       2018-02-02 16:01:43 +08:00
    @Applenice 一个可能的原因是 APP Store 指定请求证书,就算安装了 Fiddler 的证书也没办法了
    pheyer
        17
    pheyer  
    OP
       2018-02-02 16:12:51 +08:00   ❤️ 1
    @Applenice 今天用透明代理抓到过 icloud.com 的包,不知道这个请求你跟的 appstore 是不是都用了指定请求证书,appstore 没有试过
    今天试了 iPhone 无论是通过无线还是有线的方式走 Mac 的网络都可以用 mitmproxy 进行透明抓包,只是抓包前需要先指定端口,一般情况下 80 和 443 就可以满足要求,对于 websocket,如果之前不知道端口,可以先用 wireshark 抓 bridge100 的包获取 ws 消息端口,再在规则中添加端口转发就行了
    Applenice
        18
    Applenice  
       2018-02-02 17:10:39 +08:00
    @pheyer #17 谢谢~下周我再尝试一下~
    coolzilj
        19
    coolzilj  
       2018-02-02 18:56:45 +08:00 via Android
    @pheyer 必须要指定端口的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5312 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:55 · PVG 15:55 · LAX 00:55 · JFK 03:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.