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

2020-11-24 10:32:27 +08:00
 FaiChou

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

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

16249 次点击
所在节点    iDev
62 条回复
zengxs
2020-11-24 10:41:02 +08:00
没有必要

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

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

想要避免 MITM 可以用 ssl pinning 校验证书
LudwigWS
2020-11-24 10:44:09 +08:00
学到了,以后我就这么抓包
longaiwp
2020-11-24 10:44:32 +08:00
因为没什么用,真要抓包直接 VPN 接口拦住一样的。
FaiChou
2020-11-24 10:47:45 +08:00
@longaiwp #3 很多抓包工具 比如 Charles(macOS)/HTTP Catcher(iOS)/Thor(iOS) 都是设置的 Network Extension (VPN)形式, 但它们作用在应用层, 我给的例子中代码可以绕过应用层代理, 想要抓包只能去 tcp 层做文章. 所以还是有用的.
FaiChou
2020-11-24 10:50:50 +08:00
@zengxs #1 小火煎全局 VPN 是作用在应用层的, 用我给的例子, 是无法解析请求的. 我在圈 X/Loon 上做了很多测试, 都是一样的结果. 而且全局不全局只是请求是否都走代理服务器, 即使不开全局, 所有请求也会被小火煎这种 V 批 N 软件过滤.
zengxs
2020-11-24 10:53:25 +08:00
@FaiChou #4 OK,就算在小火煎抓不到,但是如果别人真想抓你包直接在网关就能拦截,甚至不用在设备上进行任何操作

防 MITM 还是 ssl pinning 比较有效
littiefish
2020-11-24 10:53:31 +08:00
奸商学会这个,以后估计没法过滤广告了。
FaiChou
2020-11-24 10:53:43 +08:00
@zengxs #1
@longaiwp #3

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

https://tva1.sinaimg.cn/large/0081Kckwly1gl02o505toj30n01dsakp.jpg
fffang
2020-11-24 10:54:34 +08:00
因为不知道,哈哈哈
zengxs
2020-11-24 10:55:35 +08:00
@zengxs #6 当然你也可以双管齐下 哈哈哈
FaiChou
2020-11-24 10:57:16 +08:00
@zengxs #6 是的, 即使 ssl pinning, 如果想抓包, 也有方法的, 越狱后什么都能做, 道高一尺魔高一丈.

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

我再讲个例子, 京东 /淘宝的比价( https://raw.githubusercontent.com/yichahucha/surge/master/tb_price.js), 就是利用了 MITM 方式进行更改请求, 如果 jd/tb 加了这行代码, 就可以规避这个比价功能.
TanMusong
2020-11-24 10:58:38 +08:00
从我自己这考虑,抓包我从 pc 共享 wifi 抓,不知道这个能不能防住昂,其次项目内协议有加密,用于防止 MITM,或者应用破解修改,或者内存值修改等各种破解,没加密的比如下载,或者啥获取公共信息接口,一般也随便别人抓。
FaiChou
2020-11-24 10:59:05 +08:00
@fffang #9 这个可能性不是很高.. 毕竟手机上 MITM 修改接口请求已经很成熟了. 即使没有 Surge/圈 X/Loon 这种跑脚本的, 之前用 Thor 也是简单更改 http response 的.
l764191074537
2020-11-24 11:00:34 +08:00
世界上只有一种反爬虫手段,就是让抓取数据成本比数据本身的成本高,其他都是纸老虎。
zengxs
2020-11-24 11:01:52 +08:00
@FaiChou #11

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

这些大厂如果真的想防抓包的话,像微信的 mmtls 一样搞个私有协议就行了
TanMusong
2020-11-24 11:03:39 +08:00
问了一下朋友
我:绕过系统代理可以防止 MITM,为啥不做呢?
他:为啥要绕过系统代理,能确定用户不需要代理么?
我:用的少吧
他:少不是没有啊,你给数据加密不就行了,你能解决的为什么要用用户做代偿
Leonard
2020-11-24 11:11:29 +08:00
为什么不让用户用代理?
zycode277
2020-11-24 11:12:00 +08:00
.. 那有些人就是要用代理才能访问外网怎么办
FaiChou
2020-11-24 11:13:44 +08:00
@Leonard #17 没有不让啊. 用户用了代理也能完成请求. 只要能联网就可以完成请求. 要考虑不能联网局域网情况下, 通过其他设备开一个访问互联网的服务这种情况吗? 还是极少数的.
GM
2020-11-24 11:14:48 +08:00
因为用户会骂娘,巨 tmd 烦那些自作聪明绕过系统设置的应用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX