传输层[TCP 层]拦截和 TLS 解密, 使用 mitmproxy 分析 iOS 和 Android 的 HTTP(S)协议 - V2EX
爱意满满的作品展示区。
thisismr2

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

  •  4
     
  •   thisismr2
    PRO
    txthinking Nov 25, 2020 8010 views
    This topic created in 1993 days ago, the information mentioned may be changed or developed.

    [继上一个帖子: 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 和申请机制.

    谢谢大家

    Supplement 1    Nov 25, 2020

    重要!!!

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

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

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

    Supplement 2    Nov 25, 2020
    **重要**

    * 如果你是 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 端口
    Supplement 3    Nov 28, 2020
    关于安装 mimtproxy 根证书时是否会慢的情况解释如下 感谢 @mrchi 同学提出

    两种情况:
    1. 如果手机端提前进行 mitm.it 的 DNS 解析, 然后将 IP 给 mimtproxy, 那么安装证书时会发起远端请求, 因为它在读取数据前是不知道这个 IP 是干嘛的
    2. 如果手机端不进行 DNS 解析, 直接将 mitm.it 给 mimtproxy, 那么安装时就不会发起远端请求
    Supplement 4    Nov 28, 2020
    #136 有个 windows 上使用的经验
    149 replies    2020-12-03 10:59:04 +08:00
    1  2  
    cwyalpha
        1
    cwyalpha  
       Nov 25, 2020 via iPhone
    谢谢楼主,另外想问问有没有什么能解决 ssl pin 的方案
    cwyalpha
        2
    cwyalpha  
       Nov 25, 2020 via iPhone
    另外问一下,这个和 ios 的 stream 有什么区别?不考虑 ssl pin 的话,会存在 stream 抓不到,这个能抓到的情况吗
    thisismr2
        3
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    @cwyalpha #1 Android 的话我会配合 xposed
    thisismr2
        4
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    @cwyalpha #2
    我不了解 stream, 如果它是工作在应用层的话. 那么的确会有抓不到的情况.
    而这里是工作在传输层(TCP 层), 所以自然都能抓到, 然后就是如果是 HTTPS, 会尝试 TLS 解密 (对于 TLS 的相关原理我就不打字了, 太多内容, 感兴趣的话大家可以搜下)
    thisismr2
        5
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    @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  
       Nov 25, 2020
    上次没中,这次中个奖看看?
    crab
        7
    crab  
       Nov 25, 2020
    iOS 上用 stream app 可以正常抓包。现在不知道什么原因用 Wireshark Helper 弄出来的代理直接导致 iOS 网络连不上了。
    thisismr2
        8
    thisismr2  
    OP
    PRO
       Nov 25, 2020   1
    @crab 不要混着用啊, 各家的 app 设计原理都不一样的
    crab
        9
    crab  
       Nov 25, 2020
    @thisismr2 没同时用。设置按你视频操作操作,iOS 上 vpn 图标也有,虽然 Wireshark 那边可以看到有 iOS 数据进来,但 iOS 上的网络请求没办法得到响应。
    thisismr2
        10
    thisismr2  
    OP
    PRO
       Nov 25, 2020   1
    @crab 估计根证书没信任彻底吧
    thisismr2
        11
    thisismr2  
    OP
    PRO
       Nov 25, 2020   1
    还有“但 iOS 上的网络请求没办法得到响应“ 可以展开, 比如访问 https://www.baidu.com 提示页面会出现错误, 错误描述是:xxx
    gogo88
        12
    gogo88  
       Nov 25, 2020 via iPhone
    可以弃用其它抓包 App 了,厉害
    qq2511296
        13
    qq2511296      Nov 25, 2020
    试试 看看能中不
    ben0629
        14
    ben0629  
       Nov 25, 2020
    上次没中,这次再来试试
    NFC
        15
    NFC  
       Nov 25, 2020 via iPhone
    感觉你这个更强大啊。
    adminii
        16
    adminii  
       Nov 25, 2020 via iPhone
    难道是抓包工具?拉低中奖率
    VHacker1989
        17
    VHacker1989  
       Nov 25, 2020
    拿开源的项目来卖钱真的好吗
    VHacker1989
        18
    VHacker1989  
       Nov 25, 2020
    稍微有点动手能力,整合一下开源工具都不会用这玩意
    xiaocsl
        19
    xiaocsl  
       Nov 25, 2020
    抽一个...
    thisismr2
        20
    thisismr2  
    OP
    PRO
       Nov 25, 2020   2
    @crab 还有, 你看下那个帖子最后一个 append 的内容
    thisismr2
        21
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    @VHacker1989 您这逻辑.
    xionger
        22
    xionger  
       Nov 25, 2020   1
    @thisismr2 支持楼主 不用搭理那脑回路的人 看他加入时间 V2EX 第 511086 号会员 加入于 2020-10-04 10:28:07 +08:00

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

    同时求楼主支持 iOS13 好多同事不想升级 iOS14 啊
    thisismr2
        23
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    1-10 楼 中奖者: #8 @MrWhite 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS
    thisismr2
        24
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    11-20 楼 中奖者: #14 @ben0629 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS
    superrichman
        25
    superrichman  
       Nov 25, 2020 via iPhone
    分母
    thisismr2
        26
    thisismr2  
    OP
    PRO
       Nov 25, 2020   1
    @xionger 我的升了 iOS14, 下一版会支持 iOS13, 还需要一些工作, 回头买个二手的 iOS13 手机测试下,
    ben0629
        27
    ben0629  
       Nov 25, 2020
    @thisismr2 MzQ4Njg0MjAyQHFxLmNvbQ== 设备是 ios,感谢!
    cwyalpha
        28
    cwyalpha  
       Nov 25, 2020 via iPhone
    继续分母
    Codelike
        29
    Codelike  
       Nov 25, 2020
    有意思 分母+1
    crab
        30
    crab  
       Nov 25, 2020
    @thisismr2 证书安装信任的了,dns.google 也支持。 不能访问页面提示的是 无法访问此网站,响应时间过长。
    thisismr2
        31
    thisismr2  
    OP
    PRO
       Nov 25, 2020   1
    @crab 我建了个临时 http server, 你试试能按视频操作后能访问这个吗 http://18.141.203.15
    SingeeKing
        32
    SingeeKing  
    PRO
       Nov 25, 2020
    回复总是要回复的,万一中讲了呢
    crab
        33
    crab  
       Nov 25, 2020
    @thisismr2 这个可以访问到。
    crab
        34
    crab  
       Nov 25, 2020
    @thisismr2 这样看还是 dns 出问题了?
    liguoqinjim
        35
    liguoqinjim  
       Nov 25, 2020
    抓包需要! 当个分母
    cwyalpha
        36
    cwyalpha  
       Nov 25, 2020 via iPhone
    分母+1
    thisismr2
        37
    thisismr2  
    OP
    PRO
       Nov 25, 2020   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  
       Nov 25, 2020 via Android
    试一下哈
    crab
        39
    crab  
       Nov 25, 2020   2
    @thisismr2 不好意思啊。[设置] ->General->About->Certificate Trust Settings] 这个地方没信任上。
    thisismr2
        40
    thisismr2  
    OP
    PRO
       Nov 25, 2020
    @crab #37

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

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

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

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

    楼主提到的「一行代码」可以 bypass 系统代理, 是上面这几行吗?
    1314258
        84
    1314258  
       Nov 25, 2020 via iPhone
    关键在于 vpn 。
    sankemao
        85
    sankemao  
       Nov 25, 2020
    @thisismr2 #72 竟然中了,感谢 MjEwOTgwMDU5QHFxLmNvbQ== iOS 设备
    enjolife
        86
    enjolife  
       Nov 25, 2020
    分母+1
    MrMario
        87
    MrMario  
       Nov 25, 2020 via iPhone
    mrchi
        88
    mrchi  
       Nov 25, 2020
    mitmproxy 的根证书安装的时候是访问 http://mitm.it 这个链接, 而这个链接在他们国外服务器, 所以可能很慢很慢很慢很慢, 多刷下试试
    -----
    这个不对吧,http://mitm.it 是 mitmproxy 代理直接拦截返回响应的
    test008u7
        89
    test008u7  
       Nov 25, 2020 via iPhone
    分子
    cwyalpha
        90
    cwyalpha  
       Nov 26, 2020 via iPhone
    @thisismr2 Y3d5YWxwaGFAZm94bWFpbC5jb20= ios 版 谢谢楼主
    cat9life
        91
    cat9life  
       Nov 26, 2020
    双向绑定证书的能用吗 一直没有好的方案
    zhygkx
        92
    zhygkx  
       Nov 26, 2020 via Android
    看看运气
    eluotao
        93
    eluotao  
       Nov 26, 2020 via iPhone
    用迅雷 sdk 如何抓到下载地址
    dzdh
        94
    dzdh  
       Nov 26, 2020
    ssl pinning 是怎么搞的
    dudukee
        95
    dudukee  
       Nov 26, 2020
    请问对于 android 不信任用户 CA 证书的情况,可以抓到吗?
    dudukee
        96
    dudukee  
       Nov 26, 2020
    #95 仔细看了下介绍,需要 root 后安装到 system CA store 。
    sangmong
        97
    sangmong  
       Nov 26, 2020
    分母
    nayihz
        98
    nayihz  
       Nov 26, 2020
    分母一下
    sapphires
        99
    sapphires  
       Nov 26, 2020
    分母+1
    free9fw
        100
    free9fw  
       Nov 26, 2020
    +1
    1  2  
    About     Help     Advertise     Blog     API     FAQ     Solana     1027 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 153ms UTC 22:13 PVG 06:13 LAX 15:13 JFK 18:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86