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

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

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

    [继上一个帖子: 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  
    MikeV2EX
        101
    MikeV2EX  
       2020-11-26 10:11:26 +08:00
    上次没中 还来
    viniedodo
        102
    viniedodo  
       2020-11-26 10:13:08 +08:00
    再来抽一个
    zzqims9527q
        103
    zzqims9527q  
       2020-11-26 11:04:00 +08:00 via iPhone
    1
    jeblur
        104
    jeblur  
       2020-11-26 13:24:56 +08:00
    再来一次
    chinafeng
        105
    chinafeng  
       2020-11-26 13:46:13 +08:00
    分母 + 1
    HandSonic
        106
    HandSonic  
       2020-11-26 16:18:24 +08:00
    来抽一个
    MrWhite
        107
    MrWhite  
       2020-11-26 17:01:19 +08:00
    @thisismr2 抱歉,才看到哈 邮箱:NTI0MjExOTUyQHFxLmNvbQ== 设备是 iOS 感谢楼主大大
    victory2706
        108
    victory2706  
       2020-11-26 18:29:10 +08:00 via Android
    分母➕1
    ytang
        109
    ytang  
       2020-11-26 21:40:47 +08:00
    支持
    thisismr2
        110
    thisismr2  
    OP
       2020-11-27 00:35:57 +08:00
    @mrchi 我抓了下, 好像是个远端服务器请求
    christin
        111
    christin  
       2020-11-27 08:41:36 +08:00 via iPhone
    求中
    awana
        112
    awana  
       2020-11-27 09:39:18 +08:00
    分母分母
    thisismr2
        113
    thisismr2  
    OP
       2020-11-27 09:45:36 +08:00
    @sankemao 已发
    @cwyalpha 已发
    MrWhite
        114
    MrWhite  
       2020-11-27 09:54:11 +08:00
    @thisismr2 😀 1-10 楼 中奖者: #8 @MrWhite 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS

    我的这个还没收到哈。。 还能给发吗。
    thisismr2
        115
    thisismr2  
    OP
       2020-11-27 09:56:33 +08:00
    💛 71-80: #74 @zhangchioulin 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    💛 81-90: #81 @o0OoO0o 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    💛 91-100: #92 @zhygkx 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    thisismr2
        116
    thisismr2  
    OP
       2020-11-27 09:57:45 +08:00
    @MrWhite 已发
    thisismr2
        117
    thisismr2  
    OP
       2020-11-27 10:02:32 +08:00   ❤️ 1
    💛 101-120: #102 @viniedodo 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    54xavier
        118
    54xavier  
       2020-11-27 10:06:57 +08:00
    上次没中,再来一次 老分母了 YWRtaW5ANTR4YXZpZXIuY24= 美区 ios
    mrchi
        119
    mrchi  
       2020-11-27 10:14:53 +08:00
    @thisismr2 不是的,可以参考 mitmproxy 的文档 https://docs.mitmproxy.org/stable/concepts-certificates/

    By far the easiest way to install the mitmproxy certificates is to use the built-in certificate installation app.

    The mitmproxy CA cert is located in ~/.mitmproxy after it has been generated at the first start of mitmproxy.

    所以其实证书的安装页面是在本地的,由 mitmproxy 拦截并返回的请求。

    当然 mitm.it 的域名是真实存在的,直接访问会提示:If you can see this, traffic is not passing through mitmproxy. 也就是说,提示你 mitmproxy 代理设置不正确,这个请求没有被拦截。
    viniedodo
        120
    viniedodo  
       2020-11-27 10:18:25 +08:00
    @thisismr2 dmluaWVkb2RvQGdtYWlsLmNvbQ==
    ios 太幸运了 感谢
    thisismr2
        121
    thisismr2  
    OP
       2020-11-27 10:28:04 +08:00
    💛 111-120: #118 @54xavier 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    zhangchioulin
        122
    zhangchioulin  
       2020-11-27 10:31:58 +08:00
    @thisismr2 #115
    太幸运了!我需要 iOS 美区的,谢谢啦。
    邮箱:emhhbmdjaGlvdWxpbkBnbWFpbC5jb20=
    54xavier
        123
    54xavier  
       2020-11-27 10:57:40 +08:00
    @thisismr2 感谢感谢
    thisismr2
        124
    thisismr2  
    OP
       2020-11-27 11:04:15 +08:00
    @viniedodo 已发
    @54xavier 已发
    liwenqiang1990
        125
    liwenqiang1990  
       2020-11-27 12:00:04 +08:00
    来试试
    thisismr2
        126
    thisismr2  
    OP
       2020-11-27 12:10:08 +08:00
    @mrchi 对. 我发现两种方式都可以达到目的

    thisismr2
        127
    thisismr2  
    OP
       2020-11-27 12:12:53 +08:00
    Dawnnnnnn
        128
    Dawnnnnnn  
       2020-11-27 14:35:07 +08:00
    分母
    houzhi
        129
    houzhi  
       2020-11-27 16:02:21 +08:00
    分子来了
    mrchi
        130
    mrchi  
       2020-11-27 17:47:27 +08:00
    @thisismr2 没懂你意思。

    如果你现在也认为 mitm.it 是本地返回的请求,那就 append 说明一下吧,不要误导到别人。
    v2long
        131
    v2long  
       2020-11-27 17:59:43 +08:00
    试试 看看能中不
    o0OoO0o
        132
    o0OoO0o  
       2020-11-27 19:57:50 +08:00
    @thisismr2 #115 哇,难得第一次抽中奖! anA5Zm9zend4QHJlbGF5LmZpcmVmb3guY29t
    Android 的,多谢!
    zhygkx
        133
    zhygkx  
       2020-11-27 20:10:07 +08:00
    @thisismr2 #92 开心,emh5Z2t4QDE2My5jb20= Android,多谢
    billzhuang
        134
    billzhuang  
       2020-11-27 23:21:31 +08:00
    get a try, tks
    cwyalpha
        135
    cwyalpha  
       2020-11-28 08:10:40 +08:00   ❤️ 1
    不错 试用了下,抓月圆之夜这个游戏,用 ios stream 是抓不到他上传和下载存档的包的,但是用这个可以。
    但是像云闪付这种 ssl pin 的还是搞不定,回头得找个安卓的解决方案
    cwyalpha
        136
    cwyalpha  
       2020-11-28 08:12:28 +08:00   ❤️ 1
    另外 windows 下用 mitmproxy ui 在 edit options 里选上 rawtcp,模式写 socks5 也可以用。否则 win 下没有 mitmproxy..
    thisismr2
        137
    thisismr2  
    OP
       2020-11-28 09:42:25 +08:00
    @mrchi 已 append
    phpIsNumberOne
        138
    phpIsNumberOne  
       2020-11-28 09:48:39 +08:00
    抓到的包也是被加密了的,有什么用???
    thisismr2
        139
    thisismr2  
    OP
       2020-11-28 09:51:37 +08:00
    @phpIsNumberOne Man-in-the-middle attack
    thisismr2
        140
    thisismr2  
    OP
       2020-11-28 10:00:02 +08:00
    @o0OoO0o 已发
    @zhygkx 已发

    💛 121-130: #128 @Dawnnnnnn 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    thisismr2
        141
    thisismr2  
    OP
       2020-11-28 10:02:30 +08:00
    💛 131-140: #134 @billzhuang 请在这里 base64 贴上你的邮箱, 并告知需要 Android 还是 iOS. 谢谢
    billzhuang
        142
    billzhuang  
       2020-11-28 11:07:37 +08:00
    @thisismr2 emh1YW5nbWluQGdtYWlsLmNvbQ==
    iOS,谢谢你
    thisismr2
        143
    thisismr2  
    OP
       2020-11-28 23:22:24 +08:00
    @billzhuang 已发
    Waterchestnut
        144
    Waterchestnut  
       2020-11-29 10:44:11 +08:00 via Android
    上次没中,这次再来试试
    houzhi
        145
    houzhi  
       2020-11-29 17:16:40 +08:00
    再来试试
    xzxzxzxz
        146
    xzxzxzxz  
       2020-11-30 17:07:35 +08:00
    +1
    Dawnnnnnn
        147
    Dawnnnnnn  
       2020-12-01 09:43:36 +08:00
    @thisismr2 #128 bTEwNTA1OTY3MDRAZ21haWwuY29t Android 感谢
    thisismr2
        148
    thisismr2  
    OP
       2020-12-01 13:32:37 +08:00
    @Dawnnnnnn 已发
    happyhou
        149
    happyhou  
       2020-12-03 10:59:04 +08:00
    +1
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3337 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:39 · PVG 19:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.