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

16705 次点击
所在节点    iDev
62 条回复
ErrorMan
2020-11-24 12:12:44 +08:00
试图忽略小众用户,这种操作合适么,会抓包的也是极少数人,为了这个牺牲正常用户也太拉跨了
lcdtyph
2020-11-24 12:23:54 +08:00
实际上 qx surge 等软件有两种代理方式,一种是开在本地的 http 代理,即你说的可以 bypass 的方式

第二种是虚拟出来的 utun 网络设备,这个网络设备的 handler 中有一套自己的 tcp/ip 协议栈来处理应用过来的连接,自然也可以对这个连接的内容识别和修改。比如 surge 有个选项是 perform on tcp connection 就是你这种方式无法绕过的
FaiChou
2020-11-24 12:40:26 +08:00
@lcdtyph 谢谢指正。平时用 Loon 比较多。
justsosososo
2020-11-24 13:00:54 +08:00
没必要 防抓包就得上证书
no1xsyzy
2020-11-24 13:11:36 +08:00
你可能不知道 proxy 的功能……
我看你是接触到了 proxy 用于 MITM 自己的设备上的应用来实现抓包
但除此以外,proxy 也用于:
1. 科学上网
2. 内网审计(某些内网必须通过 DMZ 主机上设置的代理才能访问互联网,不然连路由表都没有)
3. 匿名化

你想象一下,如果 Google * App 设置了绕过代理多少人用不了?
ysc3839
2020-11-24 13:16:00 +08:00
@FaiChou 你确定绕过了代理也能正常使用?前面的人说的是内网环境,必须通过一个代理服务器访问外网,你不走这个代理,怎么连接外网?
Lemeng
2020-11-24 13:20:04 +08:00
来学习的
Suclogger
2020-11-24 13:30:28 +08:00
既然考虑越狱场景,一行 hook URLSession 的 init 方法不就把你这个绕过了?
FaiChou
2020-11-24 13:35:39 +08:00
@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
2020-11-24 13:42:04 +08:00
```
我再补充下, 用这个方法不会影响用户的使用, 即使用户不能联网, 使用 VPN 后才能联网, 也不会影响这种用户.
```

在最近几年 VPN 用来翻墙普及前,大部分翻进内网或者翻出外网都是通过代理方式的。
看起来,楼主和其他几位朋友的分歧,在于是不是把这种使用代理功能进行代理上网的用户算作“正常使用”。
在电脑端这部分用户的基数还比较大,在 iOS 手机端确实用的比较少了。
eluotao
2020-11-24 13:59:53 +08:00
有没有抓包高手 帮我抓个包. 这个软件禁止打开抓包工具
no1xsyzy
2020-11-24 14:14:38 +08:00
@eluotao 抓好了已经发给你了
eluotao
2020-11-24 14:16:51 +08:00
@no1xsyzy 什么意思?
tinydancer
2020-11-24 14:28:44 +08:00
lover of life,singer of songs
FaiChou
2020-11-24 14:48:37 +08:00
@tinydancer #54 freddie mercury
LevineChen
2020-11-24 16:53:06 +08:00
xhj 是支持 socks proxy 的, 正常来说其他的工具也都支持. 即使按照 LZ 的方式设置了, 换一种 proxy 来 MITM 也是分分钟的事吧
oxromantic
2020-11-24 19:45:44 +08:00
因为抓包不必要靠代理模式啊,我写了个抓包改包软件,有兴趣可以试试

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

https://testflight.apple.com/join/KcQagFCK
MrKrabs
2020-11-24 19:54:32 +08:00
network extension 直接秒了
overflower
2020-11-24 20:09:08 +08:00
@FaiChou 虽然只联网不用代理也可以完成请求,但是不代表这就满足了用户的需求,有些人就是有需要。
lujie2012
2020-11-24 21:02:57 +08:00
抓包有用么,给你抓,客户端 Data 数据加密,拿到有什么用。反编译,root 系统,包破解才到位。直接路由器里面分析包结构,更到位

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

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

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

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

© 2021 V2EX