一个配合 mitmproxy 的 iOS 和 Android 端 HTTP&HTTPS 抓包 APP(非设置系统代理方式) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thisismr2
V2EX    推广

一个配合 mitmproxy 的 iOS 和 Android 端 HTTP&HTTPS 抓包 APP(非设置系统代理方式)

  •  1
     
  •   thisismr2
    PRO
    2020-10-16 09:58:06 +08:00 6538 次点击
    这是一个创建于 1870 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统代理方式和虚拟网卡方式

    一直比较习惯命令行的工具, 所以一直在用 mitmproxy 抓包

    • 但是通常都是设置手机系统代理的方式, 以及其他很多抓包工具比如 Charles, 都是设置手机系统代理
    • 一些 iOS 端手机端 HTTP 抓包工具即使使用了 Network Extension (VPN), 也是通过设置了系统代理. 而且不如在桌面上查看分析包的可操作性强

    通过设置系统代理的方式, 有些 APP 会无视系统代理(APP 开发人员一行代码就可以). 所以自然导致无法抓取那些不走系统代理的 APP

    所以写了这个 client 配合 mitmproxy 使用, 原理不是设置系统代理. 而是从网卡级**系统 Transport 层(TCP)**接管流量然后给 mitmproxy, 所以也能抓那些跳过系统代理的 APP.

    简单问题和根证书问题

    一直喜欢自己写的东西都使用都很简单. 一条命令一个按钮之类的. 但是大家都知道解密 TLS 需要安装根证书. 这个 iOS 和 Android 有很大差别, 而且不同的系统版本也有很大差别, 而且有时安装完 CA, 可能 APP 需要重启才生效. 很多细节吧. 所以如果没研究过的同学这个步骤可能大家需要 google 下.. 而且 Android 新版本好像还区分 User CA 和 System CA, 而安装为 System CA 需要 root, 抓包需求比较多的话还是建议大家单独准备个 root 了的开发机.

    录了个视频

    所以昨天录了一个视频放在 youtube 上了, (第一次弄录屏视频, 不太专业, 就是用自带的录屏软件录了就传上去了, 多担待):

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

    下载地址

    下面是 AppStore 和 Google Play 的链接, 分别都设了个$4.99 的价格, 没有内购(商店如果展示 App 含内购, 估计是我引入了内购 SDK 忘了移除了). 因为不可抗因素, 苹果说使用了一些技术不让在大陆区 AppStore 上架, 所以 iOS 同学需要非大陆 AppleID 下载

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

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

    兑换码

    如果感觉这个应用能给你帮助的话, 这里针对 iOS 和 Android 分别准备了 20 个兑换码.

    领取规则:

    这里想请大家帮个忙. 刚申请了 Stripe 支付, 需要 20 笔交易, 来过他们判定规则, 所以我随便 fork 了个查看 IP 的 chrome 扩展(Apache Licence 2.0)加上了国家信息, 收费$1. 想用来攒够 20 笔交易.

    https://chrome.google.com/webstore/detail/ipvbar/copjmgogifdfjkaenpallapiidcpkjbm

    1. 安装扩展后
    2. 点击图标
    3. 呈现出来 popup 后(不确定接口速度如何), 点击 Pro
    4. 输入 Email, 获取验证码后, 输入验证码(可能在垃圾箱)
    5. 支付$1 (不确定 Stripe 支付是不是支持大陆信用卡?)

    我收到支付信息后, 会往你的 Email 里发送两个兑换码: 一个 iOS 兑换码和一个 Android 兑换码. 共 20 个人吧. 如果有问题或没收到可以下面 @我.

    (那个$1 是月订阅制, 如果你支付了, 建议不要那么快手动结束订阅, 可以在下一个扣费日的前几天停止订阅, 或者方便的话可以支付 2 刀后手动结束订阅 [是结束订阅, 可别申请退款哈], 因为不太了解 Stripe 的判定机制, 所以先谢谢大家)

    第 1 条附言    2020-10-16 17:45:14 +08:00
    #23 楼的内容可能有用
    第 2 条附言    2020-10-16 18:05:06 +08:00

    刚看到stripe文档. 支持中国银联信用卡

    第 3 条附言    2020-10-19 11:32:45 +08:00
    #45 楼 修正了 #23 的错误
    第 4 条附言    2020-11-02 18:27:41 +08:00
    兑换码 已发放完毕. 后面可直接在非果区 AppStore 或 google play 购买
    54 条回复    2024-01-15 17:54:34 +08:00
    thisismr2
        1
    thisismr2  
    OP
    PRO
       2020-10-16 10:22:26 +08:00
    看来用 mitmproxy 抓包的同学还是不太多吧
    xionger
        2
    xionger  
       2020-10-16 10:28:05 +08:00
    大神又出新东西了, 可惜我不会用 mitmproxy. 偶尔会用下 Charles 抓包. 哈哈前端抓包需求不多

    BTW(不过我用大神的 Brook)
    thisismr2
        3
    thisismr2  
    OP
    PRO
       2020-10-16 10:37:54 +08:00
    @xionger 不敢当. 嗯 Charles 设置系统代理方式. 是否使用系统代理 app 可以自己选择的. 忽略系统代理的就抓不到了.

    (BTW) 能帮助到你就好 :)

    另外 mimtproxy 有 web 界面好像, 前端可以试试呀
    thisismr2
        4
    thisismr2  
    OP
    PRO
       2020-10-16 10:41:45 +08:00
    收到一个提醒, 我要去发兑换码了. 嘻嘻
    thisismr2
        5
    thisismr2  
    OP
    PRO
       2020-10-16 10:46:52 +08:00
    邮箱 l 开头的同学, 兑换码已发送. (第一次生成 ios 和 android 兑换码, 如果我姿势不正确, 提醒我下哈)
    xionger
        6
    xionger  
       2020-10-16 10:57:35 +08:00
    我的邮箱 s 开头, 不过我给不给兑换码都行, 我还不会用 mitmproxy. 得空了研究下这个东西, 好像挺牛逼的.
    不过 我发现就单说这个 chrome 扩展就很带劲啊, 值了
    thisismr2
        7
    thisismr2  
    OP
    PRO
       2020-10-16 11:10:35 +08:00   1
    @xionger 已发. 就 20 个. 一个萝卜一个坑

    :) 都是写完自己用过一段时间的工具
    xionger
        8
    xionger  
       2020-10-16 11:27:10 +08:00
    @thisismr2 问下, 那个 stripe 页面是自带的吗, 那么简洁
    edsion996
        9
    edsion996  
       2020-10-16 11:33:16 +08:00
    > 从网卡级**系统 Transport 层(TCP)**接管流量

    这个是怎么工作的,iOS 允许任意 app 在后台接管流量么
    thisismr2
        10
    thisismr2  
    OP
    PRO
       2020-10-16 11:33:24 +08:00
    @xionger stripe 的文档里 demo copy 过来的. 也可以说算是 stripe(文档里)自带的吧.
    thisismr2
        11
    thisismr2  
    OP
    PRO
       2020-10-16 11:39:36 +08:00
    @zjb861107 可以的. 需要用到 Network Extension 里的 API
    Biebe
        12
    Biebe  
       2020-10-16 12:24:18 +08:00 via iPhone
    不 root 可以抓只信任系统证书的 app 吗
    yushiro
        13
    yushiro  
       2020-10-16 12:51:52 +08:00 via iPhone
    ios 上用 network extension 的 app 一堆吧~
    thisismr2
        14
    thisismr2  
    OP
    PRO
       2020-10-16 12:57:43 +08:00
    @Biebe 这个应该是 android 系统级别的隔离. 原本 android 和 ios 一样, 安装一个 root ca 到系统里就行了. 系统就会当成一个 root ca. 后来 android 区分了两个 system ca store 和 user ca store
    xionger
        15
    xionger  
       2020-10-16 13:09:22 +08:00
    Android 开发的话 root 了应该啥都能干了
    thisismr2
        16
    thisismr2  
    OP
    PRO
       2020-10-16 13:15:15 +08:00
    @Biebe 但不代表全部都不行. 总之感觉 root 后抓的踏实. android 的同事是专门用了一个老的 root 了的 Nexus6 当开发机和转包. 我平常是用 ios 抓.
    thisismr2
        17
    thisismr2  
    OP
    PRO
       2020-10-16 13:34:05 +08:00
    @yushiro
    Network Extension 有网络层 API, 传输层 API, 应用层 API
    比如可以只用 Network Extension 设置系统代理(仍然会显示 V 批 N 标示). 这就算是[应用层], 本质同[设置 app]设置系统代理一样.
    另外如果接管所有流量, 就需要用 [网络层 API] 处理 IP 包, 再加工成 [传输层]的 TCP/UDP 包, 最后再给[应用层]

    抓包类 app, 良心好的开发者会在他们 app 介绍了里说明 是哪一层. 比如这个就说明了
    https://i.loli.net/2020/10/16/tU7WfrBHeoPLIlT.png
    xionger
        18
    xionger  
       2020-10-16 13:38:02 +08:00
    thisismr2
        19
    thisismr2  
    OP
    PRO
       2020-10-16 13:50:24 +08:00
    接 #17

    谢谢
    我还是补文字吧
    “请务必阅读以下简介:
    Thor 并非万能,只工作在系统 HTTP 层: **不支持**非 HTTP 流量(TCP, UDP)及**不经过系统 HTTP 代理的流量**”
    yushiro
        20
    yushiro  
       2020-10-16 14:24:39 +08:00 via iPhone
    嗯,没注意过三个层面的 api 区别。
    常用的几个留学软件也都支持 mitm,就是不解决 ssl pin ~
    thisismr2
        21
    thisismr2  
    OP
    PRO
       2020-10-16 14:53:12 +08:00
    邮箱 j 开头的 gmail 同学. 兑换码已发送.
    xionger
        22
    xionger  
       2020-10-16 15:19:59 +08:00
    $ mitmweb -m socks5

    ![image.png]( https://i.loli.net/2020/10/16/75zkwXmZhx1DStP.png)



    学了下 mitmproxy, 发现有个 mitmweb 命令也可以, 有图形界面

    但是 mitmweb 命令会输出很多东西, 超出我的理解能力范围了 @thisismr2
    thisismr2
        23
    thisismr2  
    OP
    PRO
       2020-10-16 15:57:19 +08:00   2
    我尽量系统的解释下抓包的各种情况.

    ## 首先是拦截流量, 两种情况

    * 第一种是配置系统代理

    这种方式呢通常是创建一个 http proxy, 然后配置到系统代理上, 如果 app 选择走系统代理(大部分会走, 但是 app 不走系统代理也是开发人员一行代码的事). 所以这种方式有一定的局限性. 不走的就是直连了.

    * 第二种是拦截所有 TCP 和 UDP 流量

    这是 mitmproxy client 选择的方式, 这种方式的好处是所有流量都能够拦截, 开发人员无视系统代理也没用(因为不工作在系统代理那块).
    这里拦截了所有的 TCP 和 UDP 流量(这里刻意排除了 DNS 流量)给 mitmproxy
    坏处是 mitmproxy 只能处理 http 和 https 流量, 所以如果某个 app 走的私有 TCP 协议, 那么这部分流量 mitmproxy 就无法处理了, 可能 app 就显示无法连接之类的. 当然介于当前讨论的主题也是 HTTP 和 HTTPS 抓包, 可以理解. (这种情况如果 mitmproxy 后期可以将非 HTTP(S)协议的代理请求也正常处理哪怕不分析包 就更好了)

    ## 关于(SSL)TLS 和 单独对称加密的数据

    解密 TLS 的原理就是中间人劫持, 所以需要那个根证书.

    TLS 又分单向和双向认证

    单向认证: 通常 https 的网站啊接口什么的都是单向认证, 所以可以我们用根证书辅助来拦截, 可以正常解包.

    双向认证: 也就是服务端会验证客户端的证书, 所以这种是无法解密的(不好理解, 可以理解下面要描述的情况)

    单独对称加密: 可以理解为服务端和客户端约定一个密钥, 客户端将密钥编译进代码里. 这种情况, 只有你知道编译进代码里的密钥你才能解密. 所以根证书也是无能为力的.
    xionger
        24
    xionger  
       2020-10-16 16:24:32 +08:00
    感谢感谢. 我也就抓抓同事的 RN 应用. 学习的道路任重而道远啊
    zy445566
        25
    zy445566  
       2020-10-16 16:29:55 +08:00
    其实还可以修改开发的请求地址到代理服务请求抓包也挺方便的
    https://github.com/zy445566/before-server
    zy445566
        26
    zy445566  
       2020-10-16 16:30:49 +08:00
    我公司已经用了一段时间的 before-server,效果还不错
    xionger
        27
    xionger  
       2020-10-16 16:44:03 +08:00
    楼上这完全不相干的东西. 这广告真恶心.
    thisismr2
        28
    thisismr2  
    OP
    PRO
       2020-10-16 17:34:31 +08:00
    l 开头的 outlook 邮箱. 兑换码已发送.
    thisismr2
        29
    thisismr2  
    OP
    PRO
       2020-10-16 18:30:03 +08:00
    **还有 16 对**
    thisismr2
        30
    thisismr2  
    OP
    PRO
       2020-10-16 18:40:09 +08:00
    如果没 append 发放完毕, 就代表还没发放完毕. 如果遇到边界情况导致不够会重新生成新的发放. 周末愉快.
    playniuniu
        31
    playniuniu  
       2020-10-16 23:08:30 +08:00
    老哥,付好了,pla 开头的 gmail 邮箱
    playniuniu
        32
    playniuniu  
       2020-10-16 23:20:07 +08:00
    @thisismr2 还有怎样才能取消订阅呢,没看到取消的按钮呢。到了一个月会自动取消吗?
    thisismr2
        33
    thisismr2  
    OP
    PRO
       2020-10-17 09:32:09 +08:00
    @playniuniu 兑换码已发. (昨晚睡的早)
    thisismr2
        34
    thisismr2  
    OP
    PRO
       2020-10-17 09:34:21 +08:00
    @playniuniu 我也第一次用这个支付方式. 怎么取消我得去搜搜, 搜到再回答
    thisismr2
        35
    thisismr2  
    OP
    PRO
       2020-10-17 12:50:37 +08:00
    @playniuniu 好像在 stripe 发给你的邮件里?
    playniuniu
        36
    playniuniu  
       2020-10-17 14:23:50 +08:00
    @thisismr2 我看了一下邮件,里面只有收据,没有退订的按钮和链接
    thisismr2
        37
    thisismr2  
    OP
    PRO
       2020-10-17 14:41:58 +08:00
    @playniuniu 好像还真是. 和 paypal 的逻辑不一样. 我研究下
    thisismr2
        38
    thisismr2  
    OP
    PRO
       2020-10-17 15:19:20 +08:00
    发现了我没开启这个选项.

    已开启.



    已经 subscribe 的我再看看
    fx0719
        39
    fx0719  
       2020-10-17 16:09:42 +08:00 via iPhone
    可惜手机还是 13
    thisismr2
        40
    thisismr2  
    OP
    PRO
       2020-10-17 16:42:52 +08:00
    @playniuniu 给你发了邮件
    thisismr2
        41
    thisismr2  
    OP
    PRO
       2020-10-17 16:43:28 +08:00
    @fx0719 升下嘛, 反正早晚得升
    coolzilj
        42
    coolzilj  
       2020-10-17 20:28:44 +08:00 via Android
    想问为什么不直接用 mitmproxy 的 transparent mode,是这个比 -T 解决了更多的问题吗?
    thisismr2
        43
    thisismr2  
    OP
    PRO
       2020-10-17 21:45:44 +08:00
    @coolzilj 其实目的是一样的. 其实就是 transparent, linux 和 bsd 和 mac 依赖的各不相同, iptables, doas, pf. 使用体验上. 如果对这几个工具非常熟还可以. 另外应该如果是 windows 应该就走不通了好像
    coolzilj
        44
    coolzilj  
       2020-10-17 23:30:37 +08:00 via Android
    @thisismr2 了解,谢谢
    thisismr2
        45
    thisismr2  
    OP
    PRO
       2020-10-19 11:30:37 +08:00
    更正 #23 内容:

    错误:
    “坏处是 mitmproxy 只能处理 http 和 https 流量, 所以如果某个 app 走的私有 TCP 协议, 那么这部分流量 mitmproxy 就无法处理了, 可能 app 就显示无法连接之类的. 当然介于当前讨论的主题也是 HTTP 和 HTTPS 抓包, 可以理解. (这种情况如果 mitmproxy 后期可以将非 HTTP(S)协议的代理请求也正常处理哪怕不分析包 就更好了)”

    正确:
    mitmproxy 可以处理非 http 和 https 流量, 只需要加个 --rawtcp 即可
    $ mitmproxy -m socks5 --rawtcp
    thisismr2
        46
    thisismr2  
    OP
    PRO
       2020-10-19 11:33:46 +08:00
    目前 rawtcp 参数是 experimental 性质的
    chenliang0571
        47
    chenliang0571  
       2020-10-24 16:57:39 +08:00
    名额满了?输入 CODE 之后直接显示"YOU ARE PRO"
    ethusdt
        49
    ethusdt  
       2020-11-20 23:15:25 +08:00
    请教个问题, 既然「 app 不走系统代理也是开发人员一行代码的事」那为什么很多的 app 都不这么做呢?
    比如微博国际版, 很多第三方微博就直接拿微博国际版的接口用. 额, 举了个不好的例子, 因为即使设置了, 也可以在应用层之上抓包继续看到请求.

    那继续讲个例子吧, 手机上使用 圈 x, 可以运行一些脚本, 来实现京东 /淘宝比价的功能, 我猜测是利用了 jd/淘宝内的某个 api 请求, 经过修改 hack, 达到目的. 圈 x/surge 这类的软件是作用的应用层网络的系统代理, 如果 jd/淘宝多写「一行」代码, 就可以避免这种问题. 而且配合 ssl-pinning 效果更佳吧?
    ethusdt
        50
    ethusdt  
       2020-11-20 23:16:12 +08:00
    playniuniu
        51
    playniuniu  
       2021-01-04 13:57:35 +08:00
    @thisismr2 能帮我在确认一下订阅是否已经取消了?

    我这边上个月 17 号还是收到了订阅账单,没有取消
    thisismr2
        52
    thisismr2  
    OP
    PRO
       2021-02-23 15:03:32 +08:00
    @playniuniu 已取消
    ae86
        53
    ae86  
       2023-12-22 16:42:59 +08:00
    大佬 Google Play 的链接失效了
    thisismr2
        54
    thisismr2  
    OP
    PRO
       2024-01-15 17:54:34 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1519 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 16:21 PVG 00:21 LAX 08:21 JFK 11:21
    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