跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • iOS 可以几行代码绕过系统代理, 为什么大家都不这么做?
未分類
25 11 月 2020

iOS 可以几行代码绕过系统代理, 为什么大家都不这么做?

iOS 可以几行代码绕过系统代理, 为什么大家都不这么做?

資深大佬 : FaiChou 3

昨天经过测试, 发现这样的代码, 可以绕过系统代理:

let sessionConfig = URLSessionConfiguration.default var proxyDict = [AnyHashable : Any]() sessionConfig.connectionProxyDictionary = proxyDict // 主要是这一行 let session = URLSession.init(configuration: sessionConfig, delegate: nil, delegateQueue: OperationQueue.current) // 网络请求 

普通的抓包工具(应用层抓包)是抓取不到请求的, 只有 wireshark 这种作用在上层协议的工具才可以.

为什么要绕过系统代理? 可以避免 MITM, 手机上现在很多软件可以 hack 其他软件, 比如圈 X, 在收到网络请求时候可以对请求进行更改, 或者修改 body 信息.

既然开发者可以一行代码来 bypass 绕过系统代理, 为什么不做呢? 猜测如下两点:

  1. 网络请求不使用 URLSession, 用其他的网络请求框架比如 Alamofire 没有这功能
  2. 软件没必要绕过系统代理, 有些场景是要考虑系统代理的

我不是 iOS 开发者, 目前只能猜测以上两条. 希望专业的朋友指正.

延伸自这个帖子: /t/715477

大佬有話說 (62)

  • 資深大佬 : zengxs

    没有必要

    有些网络环境下必须使用代理才能上网

    然后如果别人想抓你的包,你就算绕过系统代理也没用,我直接用 shadowrocket 开个全局 VPN,你怎么都绕不过

    想要避免 MITM 可以用 ssl pinning 校验证书

  • 資深大佬 : LudwigWS

    学到了,以后我就这么抓包

  • 資深大佬 : longaiwp

    因为没什么用,真要抓包直接 VPN 接口拦住一样的。

  • 主 資深大佬 : FaiChou

    @longaiwp #3 很多抓包工具 比如 Charles(macOS)/HTTP Catcher(iOS)/Thor(iOS) 都是设置的 Network Extension (VPN)形式, 但它们作用在应用层, 我给的例子中代码可以绕过应用层代理, 想要抓包只能去 tcp 层做文章. 所以还是有用的.

  • 主 資深大佬 : FaiChou

    @zengxs #1 小火煎全局 VPN 是作用在应用层的, 用我给的例子, 是无法解析请求的. 我在圈 X/Loon 上做了很多测试, 都是一样的结果. 而且全局不全局只是请求是否都走代理服务器, 即使不开全局, 所有请求也会被小火煎这种 V 批 N 软件过滤.

  • 資深大佬 : zengxs

    @FaiChou #4 OK,就算在小火煎抓不到,但是如果别人真想抓你包直接在网关就能拦截,甚至不用在设备上进行任何操作

    防 MITM 还是 ssl pinning 比较有效

  • 資深大佬 : littiefish

    奸商学会这个,以后估计没法过滤广告了。

  • 主 資深大佬 : FaiChou

    @zengxs #1
    @longaiwp #3

    这是我在 Loon 下的截图, 可以看到所有请求这些工具都会过滤, 根据规则有些请求走直连, 有些请求走代理服务器.

    https://tva1.sinaimg.cn/large/0081Kckwly1gl02o505toj30n01dsakp.jpg

  • 資深大佬 : fffang

    因为不知道,哈哈哈

  • 資深大佬 : zengxs

    @zengxs #6 当然你也可以双管齐下 哈哈哈

  • 主 資深大佬 : FaiChou

    @zengxs #6 是的, 即使 ssl pinning, 如果想抓包, 也有方法的, 越狱后什么都能做, 道高一尺魔高一丈.

    所以我的问题是, 简单一行代码可以让 MITM 失效, 为什么大家都没这么做?

    我再讲个例子, 京东 /淘宝的比价( https://raw.githubusercontent.com/yichahucha/surge/master/tb_price.js), 就是利用了 MITM 方式进行更改请求, 如果 jd/tb 加了这行代码, 就可以规避这个比价功能.

  • 資深大佬 : TanMusong

    从我自己这考虑,抓包我从 pc 共享 wifi 抓,不知道这个能不能防住昂,其次项目内协议有加密,用于防止 MITM,或者应用破解修改,或者内存值修改等各种破解,没加密的比如下载,或者啥获取公共信息接口,一般也随便别人抓。

  • 主 資深大佬 : FaiChou

    @fffang #9 这个可能性不是很高.. 毕竟手机上 MITM 修改接口请求已经很成熟了. 即使没有 Surge/圈 X/Loon 这种跑脚本的, 之前用 Thor 也是简单更改 http response 的.

  • 資深大佬 : l764191074537

    世界上只有一种反爬虫手段,就是让抓取数据成本比数据本身的成本高,其他都是纸老虎。

  • 資深大佬 : zengxs

    @FaiChou #11

    这就不清楚了,可能他们觉得不需要防止这个吧

    这些大厂如果真的想防抓包的话,像微信的 mmtls 一样搞个私有协议就行了

  • 資深大佬 : TanMusong

    问了一下朋友
    我:绕过系统代理可以防止 MITM,为啥不做呢?
    他:为啥要绕过系统代理,能确定用户不需要代理么?
    我:用的少吧
    他:少不是没有啊,你给数据加密不就行了,你能解决的为什么要用用户做代偿

  • 資深大佬 : Leonard

    为什么不让用户用代理?

  • 資深大佬 : zycode277

    .. 那有些人就是要用代理才能访问外网怎么办

  • 主 資深大佬 : FaiChou

    @Leonard #17 没有不让啊. 用户用了代理也能完成请求. 只要能联网就可以完成请求. 要考虑不能联网局域网情况下, 通过其他设备开一个访问互联网的服务这种情况吗? 还是极少数的.

  • 資深大佬 : GM

    因为用户会骂娘,巨 tmd 烦那些自作聪明绕过系统设置的应用。

  • 資深大佬 : mxalbert1996

    我用几行代码就可以恶心用户,为什么不这么做?

  • 主 資深大佬 : FaiChou

    @zycode277 #18

    @Leonard #17

    A 设备连接在局域网下, 通过 B 设备(同一局域网下)的代理服务, 访问互联网. 这种情况作为开发者还是不用考虑了, 除非你这 app 需要特定 VPN 的情况. 而且, 我的例子代码, 是可以让它成功请求的, 只是在手机系统上的其他软件就看不到.

  • 資深大佬 : weizhen199

    加个选项呗

  • 資深大佬 : yov123456

    surge 照样能抓到,走 tun 分析包头的

  • 主 資深大佬 : FaiChou

    @mxalbert1996 #21
    @GM #20

    bypass system proxy 为啥会恶心用户自作聪明? iOS 下有个第三方微博 VVebo, 应该就是用的这种方法规避 MITM 抓包. 对用户来说一点感觉没有, 即使我开着全局代理, 也不影响它正常请求. 但对于想要抓包的人, 就需要多做点准备了.

  • 資深大佬 : Lax

    什么理论? proxy == MITM ?

  • 資深大佬 : icyalala

    在 M1 Mac 上已经一览无余了,管你怎么搞。。

  • 主 資深大佬 : FaiChou

    @Lax #26 可能表达有误, 大家都能懂就行. proxy 代理, 在 iOS 上通常以 V 批 N 形式存在, MITM 可以解析 https 请求.

  • 資深大佬 : also24

    @FaiChou #25
    如果 『系统代理』这个功能的存在,只是为了抓包做服务,那大可以用各种手段规避跳过。

    但是这里有一个问题:
    『系统代理』这个功能,为什么会存在?只是为了方便抓包么?

  • 資深大佬 : SingeeKing

    真要防止被抓包正确做法不应该是 HTTPS + SSL Pinning 吗,就算再考虑防止 SSL Kill Switch 再加一层应用加密就好了,为什么要直接禁止用户用代理(主做法还是好的,银行那种不用 bypass 而是检测到用代理直接弹窗让你关才是最恶心的)

    另外,我个人觉得 SSL Pinning 其实也不是很好,因为某些特殊的情况确实必须让网络走指定代理并且信任根证书做审计……

  • 資深大佬 : Lax

    @FaiChou MITM 已经是个专用名词了,不建议滥用。

    Google Drive 的 macOS 客户端不尊重系统的 proxy 设置,非常恶心,不开全局 VPN 几乎不能用。

  • 資深大佬 : gefranks

    最烦这种不按套路出牌的歪门邪道, 我这里有个东西,用了 3 个不同的库, 分别要在 java 本身, 源代码, 运行的 profile 里设代理,反胃中

  • 資深大佬 : weixiangzhe

    我知道支付宝和银行 app 都有做

  • 資深大佬 : lululau

    mitmproxy 透明模式轻松抓

  • 資深大佬 : wwqgtxx

    因为有很多的公司网络就是要设置系统代理才能访问外网,你是要把这些用户都赶走么

  • 資深大佬 : ooxxcc

    我用几行代码就可以让一小部分正常用户无法使用,还可以给更小一部分不正常用户增加抓包的麻烦程度,为什么不这么做呢?

  • 主 資深大佬 : FaiChou

    @wwqgtxx #35
    @ooxxcc #36
    用这个方法并不会影响正常用户使用. 即使他用设置系统代理, 也能使用.

    @lululau #34 是的, 我用的就是 mitmproxy client 配合电脑上的 mitmproxy 可以抓取. 它从 tcp 层进行抓包.

    @Lax #31 macOS 下要分开讨论, 的确很多软件即使开了全局代理也没办法, 只能借助 Surge 或者 Proxifier 等工具才可以.

  • 資深大佬 : Rekkles

    0.01%的用户的恶意行为 要其他 99.99%的用户买单的代码

  • 主 資深大佬 : FaiChou

    @Rekkles #38 请看我的补充, 不会影响用户正常使用.

  • 資深大佬 : GM

    @FaiChou
    对想抓你包的人来说,你加一万行代码都没用,照抓不误。
    对需要设置系统代理才能上网的用户来说,他想骂娘。

  • 資深大佬 : ErrorMan

    试图忽略小众用户,这种操作合适么,会抓包的也是极少数人,为了这个牺牲正常用户也太拉跨了

  • 資深大佬 : lcdtyph

    实际上 qx surge 等软件有两种代理方式,一种是开在本地的 http 代理,即你说的可以 bypass 的方式

    第二种是虚拟出来的 utun 网络设备,这个网络设备的 handler 中有一套自己的 tcp/ip 协议栈来处理应用过来的连接,自然也可以对这个连接的内容识别和修改。比如 surge 有个选项是 perform on tcp connection 就是你这种方式无法绕过的

  • 主 資深大佬 : FaiChou

    @lcdtyph 谢谢指正。平时用 Loon 比较多。

  • 資深大佬 : justsosososo

    没必要 防抓包就得上证书

  • 資深大佬 : no1xsyzy

    你可能不知道 proxy 的功能……
    我看你是接触到了 proxy 用于 MITM 自己的设备上的应用来实现抓包
    但除此以外,proxy 也用于:
    1. 科学上网
    2. 内网审计(某些内网必须通过 DMZ 主机上设置的代理才能访问互联网,不然连路由表都没有)
    3. 匿名化

    你想象一下,如果 Google * App 设置了绕过代理多少人用不了?

  • 資深大佬 : ysc3839

    @FaiChou 你确定绕过了代理也能正常使用?前面的人说的是内网环境,必须通过一个代理服务器访问外网,你不走这个代理,怎么连接外网?

  • 資深大佬 : Lemeng

    来学习的

  • 資深大佬 : Suclogger

    既然考虑越狱场景,一行 hook URLSession 的 init 方法不就把你这个绕过了?

  • 主 資深大佬 : FaiChou

    @no1xsyzy #45 谢谢补充, 第三点的确没用过.

    @ysc3839 #46 嗯, 你这么一说我又想了下, 可能自始至终我的表达都是错误的, 因为我是一瓶子不满状态, 对这方面了解不是很多, 误导了大家. 经过我的实验, 使用这行代码, Charles/HTTP Catcher 无法抓到包, 注释这行代码, Charles/HTTP Catcher 可以抓取到 https 请求. 无法抓包的情况下在 Loon 里可以看到它请求是 tcp 请求. 因为我遇到这问题时候先进行了搜索: “ios swift bypass system proxy” 于是以为这行代码的作用是绕过了系统代理. 代码从这里来的:

    https://stackoverflow.com/questions/28061353/how-to-bypass-proxy-in-ios-programmatically/48261195

  • 資深大佬 : Lax

    “`
    我再补充下, 用这个方法不会影响用户的使用, 即使用户不能联网, 使用 VPN 后才能联网, 也不会影响这种用户.
    “`

    在最近几年 VPN 用来翻墙普及前,大部分翻进内网或者翻出外网都是通过代理方式的。
    看起来,主和其他几位朋友的分歧,在于是不是把这种使用代理功能进行代理上网的用户算作“正常使用”。
    在电脑端这部分用户的基数还比较大,在 iOS 手机端确实用的比较少了。

  • 資深大佬 : eluotao

    有没有抓包高手 帮我抓个包. 这个软件禁止打开抓包工具

  • 資深大佬 : no1xsyzy

    @eluotao 抓好了已经发给你了

  • 資深大佬 : eluotao

    @no1xsyzy 什么意思?

  • 資深大佬 : tinydancer

    lover of life,singer of songs

  • 主 資深大佬 : FaiChou

    @tinydancer #54 freddie mercury

  • 資深大佬 : LevineChen

    xhj 是支持 socks proxy 的, 正常来说其他的工具也都支持. 即使按照 LZ 的方式设置了, 换一种 proxy 来 MITM 也是分分钟的事吧

  • 資深大佬 : oxromantic

    因为抓包不必要靠代理模式啊,我写了个抓包改包软件,有兴趣可以试试

    打开透明代理模式就是走 tun 抓包改包,也支持配置额外的上一级 http connect over tls 代理 (tls <-> nginx-stream <-> tinyproxy)

    https://testflight.apple.com/join/KcQagFCK

  • 資深大佬 : MrKrabs

    network extension 直接秒了

  • 資深大佬 : overflower

    @FaiChou 虽然只联网不用代理也可以完成请求,但是不代表这就满足了用户的需求,有些人就是有需要。

  • 資深大佬 : lujie2012

    抓包有用么,给你抓,客户端 Data 数据加密,拿到有什么用。反编译,root 系统,包破解才到位。直接路由器里面分析包结构,更到位

  • 資深大佬 : iseki

    恶心了用户,破坏了系统本身的优雅设计,还没能实现自己的目的,为什么要这么折腾自己呢?

  • 資深大佬 : studyro

    1. 不能防止抓包
    2. 导致了部分用户完全不可用

    图个啥?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具