V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
thisismr2
V2EX  ›  分享创造

传输层[TCP 层]拦截和 TLS 解密, 使用 mitmproxy 分析 iOS 和 Android 的 HTTP(S)协议

  •  4
     
  •   thisismr2 · 2020-11-25 10:11:41 +08:00 · 3417 次点击
    这是一个创建于 546 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [继上一个帖子: https://v2ex.com/t/726090 可以分析所有 TCP&UDP 协议]

    这个只能分析 HTTP(S)协议, 也不用在众多协议中过滤了, 原理有异曲同工之处, 对只需要分析 HTTP(S)协议的同学可以关注下.

    传输层拦截和设置系统代理的方式有什么区别

    这里有位此 app 已购买者, 可以看这个帖子的 https://v2ex.com/t/727609 的 10 楼, 11 楼

    另外 ios 使用了 Network Extension(会出现 vpen 标识)并不意味着就是 TCP 层拦截. Network Extension 有网络层 API, 传输层 API, 应用层 API 比如可以只用 Network Extension 设置系统代理. 这就算是[应用层], 本质同设置系统代理一样. 另外如果接管所有流量, 就需要用[网络层 API]处理 IP 包, 再加工成[传输层]的 TCP/UDP 包, 最后再给[应用层] 两种方式,工作量完全不在一别,抓包类 app,良心好的开发者会在介绍了里说明是工作在哪一层

    视频

    同样在我的 youtube 频道录了一个视频

    https://www.youtube.com/watch?v=puES_ayJkEo

    注意

    可以加上--rawtcp 参数, 视频中没有加 $ mitmproxy -m socks5 --rawtcp

    也有一个 mitmweb 命令, 会启动图形界面

    下载地址

    iOS(>=14) https://apps.apple.com/us/app/id1528537342

    Android (>=8) https://play.google.com/store/apps/details?id=com.txthinking.mitmproxy

    兑换码

    兑换码发放: 每 10 楼, 按 1-10 的随机数抽一次奖, 比如 1-10 楼抽一次, 11-20 抽一次, 21-30 抽一次... 抽的结果会在帖子内截图. 用 google 随机数生成器抽. 被抽到的可以选择需要 iOS 或 Android 端其中的一个兑换码

    google 随机数生成器长这个样子 https://i.imgur.com/WLrgWLr.png https://i.loli.net/2020/11/17/OwyukCsVGrUx8Jq.png

    获得兑换码的 Google Play 同学, 烦请给个好评(不强制)

    与人方便, 自己方便

    mitmproxy 的根证书安装的时候是访问 http://mitm.it 这个链接, 而这个链接在他们国外服务器, 所以可能很慢很慢很慢很慢, 多刷下试试 网络是个复杂的东西, 所以针对我写的网络工具, 我都会录视频, 但使用者仍然可能忽略某个细节导致某个步骤遇到小问题, 这时候如果你是已购买者, 我很愿意在 slack 回答你的一些问题, 请不要一气之下就给个差评(你看 iOS 就有个 Leigingban 同学给差评了, 就一句话: 完全不能工作). 另外如果你对 HTTP, HTTPS, TCP, TLS, MITM, mitmproxy, ROOT CA 这些概念不太熟, 也建议三思后再决定下载与否

    https://docs.google.com/forms/d/e/1FAIpQLSdzMwPtDue3QoezXSKfhW88BXp57wkbDXnLaqokJqLeSWP9vQ/viewform

    为了群组的质量, 使用了 slack 和申请机制.

    谢谢大家

    第 1 条附言  ·  2020-11-25 11:49:16 +08:00

    重要!!!

    关于[如何信任根证书], 因为包含设备信息故视频里隐藏了几帧图像, 无论是iOS还是Android信任根证书都需要: 好几步好几步好几步, 点好几个地方点好几个地方点好几个地方. 繁琐的步骤不是我所能左右的 而且http://mitm.it这个是mitmproxy的根证书服务器, 这不是我所能左右的, 访问慢多刷几次多刷几次.

    视频只是一个简单的操作流程, 流程的每一步都可能有很多知识, 每一步操作有问题都会导致不顺畅, 建议对正文提到的任何概念不太了解的话, 还是建议大家花点时间搜索下补充下相关知识

    iOS 仍然是不支持中国大陆区AppStore, 苹果不让, 我发现大概我的软件 https://github.com/txthinking 但凡用到那个技术都不允许中国大陆区上架, 这也不是我所能左右的

    第 2 条附言  ·  2020-11-25 12:08:47 +08:00
    **重要**

    * 如果你是 iOS, 确保你的电脑网络能访问 google dns-over-tls DNS 8.8.8.8 TCP 853 端口 dns.google (怎么测试: https://github.com/ameshkov/dnslookup)
    * 下一版本会改成使用 8.8.8.8 的 UDP 53
    * 如果你是 Android, 确保你的电脑网络能访问 8.8.8.8 的 UDP 53 端口
    第 3 条附言  ·  2020-11-28 09:41:14 +08:00
    关于安装 mimtproxy 根证书时是否会慢的情况解释如下 感谢 @mrchi 同学提出

    两种情况:
    1. 如果手机端提前进行 mitm.it 的 DNS 解析, 然后将 IP 给 mimtproxy, 那么安装证书时会发起远端请求, 因为它在读取数据前是不知道这个 IP 是干嘛的
    2. 如果手机端不进行 DNS 解析, 直接将 mitm.it 给 mimtproxy, 那么安装时就不会发起远端请求
    第 4 条附言  ·  2020-11-28 09:45:06 +08:00
    #136 有个 windows 上使用的经验
    149 条回复    2020-12-03 10:59:04 +08:00
    1  2  
    cwyalpha
        1
    cwyalpha  
       2020-11-25 10:18:41 +08:00 via iPhone
    谢谢楼主,另外想问问有没有什么能解决 ssl pin 的方案
    cwyalpha
        2
    cwyalpha  
       2020-11-25 10:29:50 +08:00 via iPhone
    另外问一下,这个和 ios 的 stream 有什么区别?不考虑 ssl pin 的话,会存在 stream 抓不到,这个能抓到的情况吗
    thisismr2
        3
    thisismr2  
    OP
       2020-11-25 10:33:18 +08:00
    @cwyalpha #1 Android 的话我会配合 xposed
    thisismr2
        4
    thisismr2  
    OP
       2020-11-25 10:42:20 +08:00
    @cwyalpha #2
    我不了解 stream, 如果它是工作在应用层的话. 那么的确会有抓不到的情况.
    而这里是工作在传输层(TCP 层), 所以自然都能抓到, 然后就是如果是 HTTPS, 会尝试 TLS 解密 (对于 TLS 的相关原理我就不打字了, 太多内容, 感兴趣的话大家可以搜下)
    thisismr2
        5
    thisismr2  
    OP
       2020-11-25 11:02:48 +08:00
    @cwyalpha 我简单写个数据包流向

    [物理层] -> [网络层(就是 IPv4 或 IPv6 包)] -> [传输层(就是 TCP/UDP 包)] -> [应用层(HTTP 协议等)]

    目前大部分抓包软件都工作在[应用层](上图中的最后一个环节), 比如通过让你手动设置系统代理 或 通过 iOS 的 NetworkExtension 和 Android 的 Builder 自动设置系统代理, 两种设置系统代理本质一样. 系统代理是一个尊重但不强制的东西. 所以自然就很多应用不尊重那么就抓不到了

    而这个 app 是工作在[网络层](上图中的第二个环节), 什么意思呢, 即会接管所有的 IP 包(0.0.0.0/0), 然后加工成 TCP/UDP 包到传输层, 然后再将 TCP 包加工后给 mitmproxy, 同时将 UDP 包丢弃(因为 mitmproxy 不能分析 UDP)
    MrWhite
        6
    MrWhite  
       2020-11-25 11:05:24 +08:00
    上次没中,这次中个奖看看?
    crab
        7
    crab  
       2020-11-25 11:09:20 +08:00
    iOS 上用 stream app 可以正常抓包。现在不知道什么原因用 Wireshark Helper 弄出来的代理直接导致 iOS 网络连不上了。
    thisismr2
        8
    thisismr2  
    OP
       2020-11-25 11:12:26 +08:00   ❤️ 1
    @crab 不要混着用啊, 各家的 app 设计原理都不一样的
    crab
        9
    crab  
       2020-11-25 11:18:50 +08:00
    @thisismr2 没同时用。设置按你视频操作操作,iOS 上 vpn 图标也有,虽然 Wireshark 那边可以看到有 iOS 数据进来,但 iOS 上的网络请求没办法得到响应。
    thisismr2
        10
    thisismr2  
    OP
       2020-11-25 11:24:44 +08:00   ❤️ 1
    @crab 估计根证书没信任彻底吧
    thisismr2
        11
    thisismr2  
    OP
       2020-11-25 11:27:37 +08:00   ❤️ 1
    还有“但 iOS 上的网络请求没办法得到响应“ 可以展开, 比如访问 https://www.baidu.com 提示页面会出现错误, 错误描述是:xxx
    gogo88
        12
    gogo88  
       2020-11-25 11:28:11 +08:00 via iPhone
    可以弃用其它抓包 App 了,厉害👍
    qq2511296
        13
    qq2511296  
       2020-11-25 11:28:32 +08:00
    试试 看看能中不
    ben0629
        14
    ben0629  
       2020-11-25 11:31:58 +08:00
    上次没中,这次再来试试
    NFC
        15
    NFC  
       2020-11-25 11:37:17 +08:00 via iPhone
    感觉你这个更强大啊。
    adminii
        16
    adminii  
       2020-11-25 11:44:25 +08:00 via iPhone
    难道是抓包工具?拉低中奖率
    VHacker1989
        17
    VHacker1989  
       2020-11-25 11:52:29 +08:00
    拿开源的项目来卖钱真的好吗
    VHacker1989
        18
    VHacker1989  
       2020-11-25 11:53:39 +08:00
    稍微有点动手能力,整合一下开源工具都不会用这玩意
    xiaocsl
        19
    xiaocsl  
       2020-11-25 11:58:58 +08:00
    抽一个...
    thisismr2
        20
    thisismr2  
    OP
       2020-11-25 12:01:28 +08:00   ❤️ 2
    @crab 还有, 你看下那个帖子最后一个 append 的内容
    thisismr2
        21
    thisismr2  
    OP
       2020-11-25 12:15:53 +08:00
    @VHacker1989 您这逻辑.
    xionger
        22
    xionger  
       2020-11-25 12:28:53 +08:00   ❤️ 1
    @thisismr2 支持楼主 不用搭理那脑回路的人 看他加入时间 V2EX 第 511086 号会员 加入于 2020-10-04 10:28:07 +08:00

    楼主为开源做的贡献还少吗 再说楼主算是写了个 app 解决了一个痛点 又没卖别人的代码 你行你也弄个试试啊

    同时求楼主支持 iOS13 好多同事不想升级 iOS14 啊
    thisismr2
        23
    thisismr2  
    OP
       2020-11-25 12:31:36 +08:00
    ❤️ 1-10 楼 中奖者: #8 @MrWhite 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS
    thisismr2
        24
    thisismr2  
    OP
       2020-11-25 12:33:54 +08:00
    ❤️ 11-20 楼 中奖者: #14 @ben0629 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS
    superrichman
        25
    superrichman  
       2020-11-25 12:35:32 +08:00 via iPhone
    分母
    thisismr2
        26
    thisismr2  
    OP
       2020-11-25 12:51:44 +08:00   ❤️ 1
    @xionger 我的升了 iOS14, 下一版会支持 iOS13, 还需要一些工作, 回头买个二手的 iOS13 手机测试下,
    ben0629
        27
    ben0629  
       2020-11-25 12:55:18 +08:00
    @thisismr2 MzQ4Njg0MjAyQHFxLmNvbQ== 设备是 ios,感谢!
    cwyalpha
        28
    cwyalpha  
       2020-11-25 13:00:07 +08:00 via iPhone
    继续分母
    Codelike
        29
    Codelike  
       2020-11-25 13:06:56 +08:00
    有意思 分母+1
    crab
        30
    crab  
       2020-11-25 13:08:43 +08:00
    @thisismr2 证书安装信任的了,dns.google 也支持。 不能访问页面提示的是 无法访问此网站,响应时间过长。
    thisismr2
        31
    thisismr2  
    OP
       2020-11-25 13:13:19 +08:00   ❤️ 1
    @crab 我建了个临时 http server, 你试试能按视频操作后能访问这个吗 http://18.141.203.15
    SingeeKing
        32
    SingeeKing  
       2020-11-25 13:16:55 +08:00
    回复总是要回复的,万一中讲了呢
    crab
        33
    crab  
       2020-11-25 13:18:38 +08:00
    @thisismr2 这个可以访问到。
    crab
        34
    crab  
       2020-11-25 13:21:43 +08:00
    @thisismr2 这样看还是 dns 出问题了?
    liguoqinjim
        35
    liguoqinjim  
       2020-11-25 13:21:54 +08:00
    抓包需要! 当个分母
    cwyalpha
        36
    cwyalpha  
       2020-11-25 13:28:16 +08:00 via iPhone
    分母+1
    thisismr2
        37
    thisismr2  
    OP
       2020-11-25 13:29:40 +08:00   ❤️ 2
    @crab 如果 IP 可以访问到. 说明 DNS 问题. 而目前 iOS 的 DNS 是使用的[域名 TLS: dns.google, IP: 8.8.8.8, 端口: TCP853],
    在你电脑命令行里用 dnslookup 确认你电脑网络访问这个 google 的 tls 的 dns 没有问题的话(千万确认)那么:
    既然是 TLS, 所以会走 TLS 解密, 所以会需要用到根证书信任, 推测原因是: 你安装信任根证书那一步有问题. 建议检查: [设置->General->Profiles] 和 [设置] ->General->About->Certificate Trust Settings] 这两个地方.
    3dxfv
        38
    3dxfv  
       2020-11-25 13:34:05 +08:00 via Android
    试一下哈
    crab
        39
    crab  
       2020-11-25 13:37:29 +08:00   ❤️ 2
    @thisismr2 不好意思啊。[设置] ->General->About->Certificate Trust Settings] 这个地方没信任上。
    thisismr2
        40
    thisismr2  
    OP
       2020-11-25 13:38:32 +08:00
    @crab #37

    Suclogger
        41
    Suclogger  
       2020-11-25 13:39:28 +08:00
    分母+1
    thisismr2
        42
    thisismr2  
    OP
       2020-11-25 13:40:38 +08:00   ❤️ 2
    @crab 估计给差评的那哥们亦如是也 :) 烦请使用者多多研究
    googlehub
        43
    googlehub  
       2020-11-25 13:41:36 +08:00
    分母+1
    troyl
        44
    troyl  
       2020-11-25 13:41:39 +08:00 via iPhone
    平时工作都是用 Charles 抓包,看到这个有点想试试了。
    honk
        45
    honk  
       2020-11-25 13:42:26 +08:00
    牛逼!想試試
    liusir
        46
    liusir  
       2020-11-25 14:09:40 +08:00
    上次没中,再试试
    blakejia
        47
    blakejia  
       2020-11-25 14:10:28 +08:00
    分母一下
    thisismr2
        48
    thisismr2  
    OP
       2020-11-25 14:26:26 +08:00
    @MrWhite TODO
    @ben0629 已发

    💛 21-30 楼 中 #28 @cwyalpha
    💛 31-40 楼 中 #32 @SingeeKing

    请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS
    xionger
        49
    xionger  
       2020-11-25 14:30:02 +08:00
    @thisismr2 #26 感谢楼主, 持续关注, 等支持 iOS13 的了我让同事试试
    SingeeKing
        50
    SingeeKing  
       2020-11-25 14:39:31 +08:00
    这辈子第一次从 v2 中奖……

    感谢,iOS,邮箱:c2luZ2Vla2luZ0BnbWFpbC5jb20=
    thisismr2
        51
    thisismr2  
    OP
       2020-11-25 14:51:52 +08:00
    @SingeeKing 已发
    HFX3389
        52
    HFX3389  
       2020-11-25 14:54:01 +08:00
    我咋印象中这个帖子发过一次....
    xiaolang
        53
    xiaolang  
       2020-11-25 15:00:34 +08:00
    分母+1
    longyujin9
        54
    longyujin9  
       2020-11-25 15:01:00 +08:00
    分母+1
    thisismr2
        55
    thisismr2  
    OP
       2020-11-25 15:07:51 +08:00
    💛 41-50 楼 #41 @Suclogger 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    ik
        56
    ik  
       2020-11-25 15:11:38 +08:00 via iPhone
    这帖再抽一次
    Cawrr
        57
    Cawrr  
       2020-11-25 15:12:30 +08:00
    分母+1
    pirates
        58
    pirates  
       2020-11-25 15:32:51 +08:00
    来试试
    yushiro
        59
    yushiro  
       2020-11-25 15:35:12 +08:00 via iPhone
    咦,lz 又来了啊,上次给人推荐过你的 app 。
    thisismr2
        60
    thisismr2  
    OP
       2020-11-25 15:40:27 +08:00
    @yushiro 谢谢
    byte10
        61
    byte10  
       2020-11-25 15:41:07 +08:00
    @VHacker1989 哈哈,牛
    Suclogger
        62
    Suclogger  
       2020-11-25 15:42:18 +08:00
    @thisismr2 非常感谢,需要 iOS 版本,邮箱:echo Y2FpcnVucWlhbmdAZ21haWwuY29t | base64 --decode
    rikka
        63
    rikka  
       2020-11-25 15:43:15 +08:00
    分母+1
    thisismr2
        64
    thisismr2  
    OP
       2020-11-25 15:46:07 +08:00
    💛 51-60 楼 #56 @ik 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    thisismr2
        65
    thisismr2  
    OP
       2020-11-25 15:51:59 +08:00
    @Suclogger 哎呀 太贴心了😊, 我直接复制粘贴回车就可以了. 已发
    MengiNo
        66
    MengiNo  
       2020-11-25 16:02:13 +08:00
    分母+1
    ik
        67
    ik  
       2020-11-25 16:04:01 +08:00 via iPhone
    @thisismr2 #64 dnZkd2FuZ0BpY2xvdWQuY29tCg== 终于中了,多谢老铁 iphone/ios
    thisismr2
        68
    thisismr2  
    OP
       2020-11-25 16:10:17 +08:00   ❤️ 1
    @ik 已发
    peacewalker
        69
    peacewalker  
       2020-11-25 16:27:41 +08:00
    分母+1
    sankemao
        70
    sankemao  
       2020-11-25 16:43:46 +08:00
    分母来了
    q8515620
        71
    q8515620  
       2020-11-25 16:49:24 +08:00 via Android
    支持一下,万一中了呢?
    thisismr2
        72
    thisismr2  
    OP
       2020-11-25 16:53:23 +08:00
    💛 61-70: #70 @sankemao 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    sdandroid
        73
    sdandroid  
       2020-11-25 17:22:39 +08:00
    分母+1
    zhangchioulin
        74
    zhangchioulin  
       2020-11-25 17:52:58 +08:00
    @cwyalpha #1 iOS Frida 配合脚本 Hook "libboringssl.dylib" 在回调的地方可以获得 keylog,然后 wireshark 可以看原文;解决的话 Hook "Security" 的 "SecTrustEvaluate" 能解决,再或者自己写一个 MitM
    qinxi
        75
    qinxi  
       2020-11-25 18:05:04 +08:00
    stream 有..不过也不知道他工作在第几层.
    来当个分子试试这个
    xiaopenyou
        76
    xiaopenyou  
       2020-11-25 20:14:03 +08:00
    分母,今天刚有个人跟我聊准备从 mitmweb 换到 mitmdump,没想到转身来 v 站就遇到这帖了
    AmItheRobot
        77
    AmItheRobot  
       2020-11-25 20:14:43 +08:00
    分母+1
    axo
        78
    axo  
       2020-11-25 20:15:02 +08:00
    分母+1
    lada05
        79
    lada05  
       2020-11-25 20:28:44 +08:00
    试试运气
    brotherlegend
        80
    brotherlegend  
       2020-11-25 20:38:55 +08:00 via Android
    来啦,我也参加一下。
    o0OoO0o
        81
    o0OoO0o  
       2020-11-25 20:54:50 +08:00
    感谢
    Maskeney
        82
    Maskeney  
       2020-11-25 21:11:19 +08:00
    试试
    FaiChou
        83
    FaiChou  
       2020-11-25 21:18:05 +08:00
    ```swift
    let sessionConfig = URLSessionConfiguration.default
    sessionConfig.connectionProxyDictionary = [AnyHashable : Any]() // 主要是这一行
    let session = URLSession.init(configuration: sessionConfig, delegate: nil, delegateQueue: OperationQueue.current)
    // 网络请求
    ```

    楼主提到的「一行代码」可以 bypass 系统代理, 是上面这几行吗?
    1314258
        84
    1314258  
       2020-11-25 21:33:41 +08:00 via iPhone
    关键在于 vpn 。
    sankemao
        85
    sankemao  
       2020-11-25 22:10:29 +08:00
    @thisismr2 #72 竟然中了,感谢 MjEwOTgwMDU5QHFxLmNvbQ== iOS 设备
    enjolife
        86
    enjolife  
       2020-11-25 22:18:39 +08:00
    分母+1
    MrMario
        87
    MrMario  
       2020-11-25 22:24:01 +08:00 via iPhone
    mrchi
        88
    mrchi  
       2020-11-25 22:48:00 +08:00
    mitmproxy 的根证书安装的时候是访问 http://mitm.it 这个链接, 而这个链接在他们国外服务器, 所以可能很慢很慢很慢很慢, 多刷下试试
    -----
    这个不对吧,http://mitm.it 是 mitmproxy 代理直接拦截返回响应的
    test008u7
        89
    test008u7  
       2020-11-25 23:53:36 +08:00 via iPhone
    分子
    cwyalpha
        90
    cwyalpha  
       2020-11-26 06:55:41 +08:00 via iPhone
    @thisismr2 Y3d5YWxwaGFAZm94bWFpbC5jb20= ios 版 谢谢楼主
    cat9life
        91
    cat9life  
       2020-11-26 07:06:46 +08:00
    双向绑定证书的能用吗 一直没有好的方案
    zhygkx
        92
    zhygkx  
       2020-11-26 07:59:22 +08:00 via Android
    看看运气
    eluotao
        93
    eluotao  
       2020-11-26 08:30:50 +08:00 via iPhone
    用迅雷 sdk 如何抓到下载地址
    dzdh
        94
    dzdh  
       2020-11-26 08:59:32 +08:00
    ssl pinning 是怎么搞的
    dudukee
        95
    dudukee  
       2020-11-26 09:12:57 +08:00
    请问对于 android 不信任用户 CA 证书的情况,可以抓到吗?
    dudukee
        96
    dudukee  
       2020-11-26 09:16:45 +08:00
    #95 仔细看了下介绍,需要 root 后安装到 system CA store 。
    sangmong
        97
    sangmong  
       2020-11-26 09:26:35 +08:00
    分母
    latteczy
        98
    latteczy  
       2020-11-26 09:50:37 +08:00
    分母一下
    sapphires
        99
    sapphires  
       2020-11-26 10:03:18 +08:00
    分母+1
    free9fw
        100
    free9fw  
       2020-11-26 10:09:54 +08:00
    +1
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4095 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:14 · PVG 17:14 · LAX 02:14 · JFK 05:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.