昨天经过测试, 发现这样的代码, 可以绕过系统代理:
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 绕过系统代理, 为什么不做呢? 猜测如下两点:
我不是 iOS 开发者, 目前只能猜测以上两条. 希望专业的朋友指正.
延伸自这个帖子: /t/715477
1
zengxs 2020-11-24 10:41:02 +08:00
没有必要
有些网络环境下必须使用代理才能上网 然后如果别人想抓你的包,你就算绕过系统代理也没用,我直接用 shadowrocket 开个全局 VPN,你怎么都绕不过 想要避免 MITM 可以用 ssl pinning 校验证书 |
2
LudwigWS 2020-11-24 10:44:09 +08:00 via iPhone
学到了,以后我就这么抓包
|
3
longaiwp 2020-11-24 10:44:32 +08:00
因为没什么用,真要抓包直接 VPN 接口拦住一样的。
|
4
FaiChou OP @longaiwp #3 很多抓包工具 比如 Charles(macOS)/HTTP Catcher(iOS)/Thor(iOS) 都是设置的 Network Extension (VPN)形式, 但它们作用在应用层, 我给的例子中代码可以绕过应用层代理, 想要抓包只能去 tcp 层做文章. 所以还是有用的.
|
5
FaiChou OP @zengxs #1 小火煎全局 VPN 是作用在应用层的, 用我给的例子, 是无法解析请求的. 我在圈 X/Loon 上做了很多测试, 都是一样的结果. 而且全局不全局只是请求是否都走代理服务器, 即使不开全局, 所有请求也会被小火煎这种 V 批 N 软件过滤.
|
6
zengxs 2020-11-24 10:53:25 +08:00
|
7
littiefish 2020-11-24 10:53:31 +08:00 via iPhone
奸商学会这个,以后估计没法过滤广告了。
|
8
FaiChou OP @zengxs #1
@longaiwp #3 这是我在 Loon 下的截图, 可以看到所有请求这些工具都会过滤, 根据规则有些请求走直连, 有些请求走代理服务器. https://tva1.sinaimg.cn/large/0081Kckwly1gl02o505toj30n01dsakp.jpg |
9
fffang 2020-11-24 10:54:34 +08:00
因为不知道,哈哈哈
|
11
FaiChou OP @zengxs #6 是的, 即使 ssl pinning, 如果想抓包, 也有方法的, 越狱后什么都能做, 道高一尺魔高一丈.
所以我的问题是, 简单一行代码可以让 MITM 失效, 为什么大家都没这么做? 我再讲个例子, 京东 /淘宝的比价( https://raw.githubusercontent.com/yichahucha/surge/master/tb_price.js), 就是利用了 MITM 方式进行更改请求, 如果 jd/tb 加了这行代码, 就可以规避这个比价功能. |
12
TanMusong 2020-11-24 10:58:38 +08:00
从我自己这考虑,抓包我从 pc 共享 wifi 抓,不知道这个能不能防住昂,其次项目内协议有加密,用于防止 MITM,或者应用破解修改,或者内存值修改等各种破解,没加密的比如下载,或者啥获取公共信息接口,一般也随便别人抓。
|
13
FaiChou OP @fffang #9 这个可能性不是很高.. 毕竟手机上 MITM 修改接口请求已经很成熟了. 即使没有 Surge/圈 X/Loon 这种跑脚本的, 之前用 Thor 也是简单更改 http response 的.
|
14
l764191074537 2020-11-24 11:00:34 +08:00
世界上只有一种反爬虫手段,就是让抓取数据成本比数据本身的成本高,其他都是纸老虎。
|
15
zengxs 2020-11-24 11:01:52 +08:00
|
16
TanMusong 2020-11-24 11:03:39 +08:00 5
问了一下朋友
我:绕过系统代理可以防止 MITM,为啥不做呢? 他:为啥要绕过系统代理,能确定用户不需要代理么? 我:用的少吧 他:少不是没有啊,你给数据加密不就行了,你能解决的为什么要用用户做代偿 |
17
Leonard 2020-11-24 11:11:29 +08:00
为什么不让用户用代理?
|
18
zycode277 2020-11-24 11:12:00 +08:00
.. 那有些人就是要用代理才能访问外网怎么办
|
19
FaiChou OP @Leonard #17 没有不让啊. 用户用了代理也能完成请求. 只要能联网就可以完成请求. 要考虑不能联网局域网情况下, 通过其他设备开一个访问互联网的服务这种情况吗? 还是极少数的.
|
20
GM 2020-11-24 11:14:48 +08:00 3
因为用户会骂娘,巨 tmd 烦那些自作聪明绕过系统设置的应用。
|
21
mxalbert1996 2020-11-24 11:14:56 +08:00 via Android
我用几行代码就可以恶心用户,为什么不这么做?
|
22
FaiChou OP |
23
weizhen199 2020-11-24 11:18:37 +08:00
加个选项呗
|
24
yov123456 2020-11-24 11:20:48 +08:00
surge 照样能抓到,走 tun 分析包头的
|
25
FaiChou OP @mxalbert1996 #21
@GM #20 bypass system proxy 为啥会恶心用户自作聪明? iOS 下有个第三方微博 VVebo, 应该就是用的这种方法规避 MITM 抓包. 对用户来说一点感觉没有, 即使我开着全局代理, 也不影响它正常请求. 但对于想要抓包的人, 就需要多做点准备了. |
26
Lax 2020-11-24 11:22:07 +08:00
什么理论? proxy == MITM ?
|
27
icyalala 2020-11-24 11:24:08 +08:00
在 M1 Mac 上已经一览无余了,管你怎么搞。。
|
28
FaiChou OP @Lax #26 可能表达有误, 大家都能懂就行. proxy 代理, 在 iOS 上通常以 V 批 N 形式存在, MITM 可以解析 https 请求.
|
29
also24 2020-11-24 11:31:15 +08:00
|
30
SingeeKing 2020-11-24 11:31:35 +08:00
真要防止被抓包正确做法不应该是 HTTPS + SSL Pinning 吗,就算再考虑防止 SSL Kill Switch 再加一层应用加密就好了,为什么要直接禁止用户用代理(楼主做法还是好的,银行那种不用 bypass 而是检测到用代理直接弹窗让你关才是最恶心的)
另外,我个人觉得 SSL Pinning 其实也不是很好,因为某些特殊的情况确实必须让网络走指定代理并且信任根证书做审计…… |
31
Lax 2020-11-24 11:31:52 +08:00
|
32
gefranks 2020-11-24 11:33:44 +08:00
最烦这种不按套路出牌的歪门邪道, 我这里有个东西,用了 3 个不同的库, 分别要在 java 本身, 源代码, 运行的 profile 里设代理,反胃中
|
33
weixiangzhe 2020-11-24 11:35:45 +08:00 via Android
我知道支付宝和银行 app 都有做
|
34
lululau 2020-11-24 11:36:15 +08:00
mitmproxy 透明模式轻松抓
|
35
wwqgtxx 2020-11-24 11:38:31 +08:00 via iPhone
因为有很多的公司网络就是要设置系统代理才能访问外网,你是要把这些用户都赶走么
|
36
ooxxcc 2020-11-24 11:44:45 +08:00 via iPhone
我用几行代码就可以让一小部分正常用户无法使用,还可以给更小一部分不正常用户增加抓包的麻烦程度,为什么不这么做呢?
|
37
FaiChou OP |
38
Rekkles 2020-11-24 11:53:25 +08:00
0.01%的用户的恶意行为 要其他 99.99%的用户买单的代码
|
41
ErrorMan 2020-11-24 12:12:44 +08:00
试图忽略小众用户,这种操作合适么,会抓包的也是极少数人,为了这个牺牲正常用户也太拉跨了
|
42
lcdtyph 2020-11-24 12:23:54 +08:00 via iPhone 2
实际上 qx surge 等软件有两种代理方式,一种是开在本地的 http 代理,即你说的可以 bypass 的方式
第二种是虚拟出来的 utun 网络设备,这个网络设备的 handler 中有一套自己的 tcp/ip 协议栈来处理应用过来的连接,自然也可以对这个连接的内容识别和修改。比如 surge 有个选项是 perform on tcp connection 就是你这种方式无法绕过的 |
44
justsosososo 2020-11-24 13:00:54 +08:00
没必要 防抓包就得上证书
|
45
no1xsyzy 2020-11-24 13:11:36 +08:00
你可能不知道 proxy 的功能……
我看你是接触到了 proxy 用于 MITM 自己的设备上的应用来实现抓包 但除此以外,proxy 也用于: 1. 科学上网 2. 内网审计(某些内网必须通过 DMZ 主机上设置的代理才能访问互联网,不然连路由表都没有) 3. 匿名化 你想象一下,如果 Google * App 设置了绕过代理多少人用不了? |
46
ysc3839 2020-11-24 13:16:00 +08:00 via Android
@FaiChou 你确定绕过了代理也能正常使用?前面的人说的是内网环境,必须通过一个代理服务器访问外网,你不走这个代理,怎么连接外网?
|
47
Lemeng 2020-11-24 13:20:04 +08:00
来学习的
|
48
Suclogger 2020-11-24 13:30:28 +08:00
既然考虑越狱场景,一行 hook URLSession 的 init 方法不就把你这个绕过了?
|
49
FaiChou OP @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 |
50
Lax 2020-11-24 13:42:04 +08:00 1
```
我再补充下, 用这个方法不会影响用户的使用, 即使用户不能联网, 使用 VPN 后才能联网, 也不会影响这种用户. ``` 在最近几年 VPN 用来翻墙普及前,大部分翻进内网或者翻出外网都是通过代理方式的。 看起来,楼主和其他几位朋友的分歧,在于是不是把这种使用代理功能进行代理上网的用户算作“正常使用”。 在电脑端这部分用户的基数还比较大,在 iOS 手机端确实用的比较少了。 |
51
eluotao 2020-11-24 13:59:53 +08:00
有没有抓包高手 帮我抓个包. 这个软件禁止打开抓包工具
|
54
tinydancer 2020-11-24 14:28:44 +08:00
lover of life,singer of songs
|
55
FaiChou OP @tinydancer #54 freddie mercury
|
56
LevineChen 2020-11-24 16:53:06 +08:00
xhj 是支持 socks proxy 的, 正常来说其他的工具也都支持. 即使按照 LZ 的方式设置了, 换一种 proxy 来 MITM 也是分分钟的事吧
|
57
oxromantic 2020-11-24 19:45:44 +08:00 1
因为抓包不必要靠代理模式啊,我写了个抓包改包软件,有兴趣可以试试
打开透明代理模式就是走 tun 抓包改包,也支持配置额外的上一级 http connect over tls 代理 (tls <-> nginx-stream <-> tinyproxy) https://testflight.apple.com/join/KcQagFCK |
58
MrKrabs 2020-11-24 19:54:32 +08:00
network extension 直接秒了
|
59
overflower 2020-11-24 20:09:08 +08:00
@FaiChou 虽然只联网不用代理也可以完成请求,但是不代表这就满足了用户的需求,有些人就是有需要。
|
60
lujie2012 2020-11-24 21:02:57 +08:00
抓包有用么,给你抓,客户端 Data 数据加密,拿到有什么用。反编译,root 系统,包破解才到位。直接路由器里面分析包结构,更到位
|
61
iseki 2020-11-24 21:22:22 +08:00
恶心了用户,破坏了系统本身的优雅设计,还没能实现自己的目的,为什么要这么折腾自己呢?
|
62
studyro 2020-11-25 09:32:24 +08:00
1. 不能防止抓包
2. 导致了部分用户完全不可用 图个啥? |