Quantumult X(圈 X)是 iOS 上功能最深的代理工具之一,而它的 rewrite(重写)功能,是新手和老手的分水岭。我当年第一次开 rewrite,把全网请求改崩、App 集体罢工,折腾一晚上才爬出来。这篇用踩坑复盘的方式,带你入门。
插图来源:Storyset
先搞懂:rewrite 是干什么的#
一句话:在请求发出前/响应回来后,把内容改掉。比如:
- 把 App 开屏广告的请求直接拒绝(去广告)。
- 把某个接口返回的"isVip: false"改成 true(解锁思路,仅限本地测试,请勿用于盗版)。
- 把网页里的烦人弹窗元素删掉。
原理是中间人(MitM):Quantumult X 生成根证书装到 iPhone 上,解密 HTTPS 流量,改完再加密发出去。听起来吓人,但这是本地操作,数据不出手机。
踩坑复盘:我当年犯的三个错#
坑一:上来就全开 MitM。我第一次把 MitM 主机名填成 *,结果银行 App 直接闪退、微信支付罢工。教训:MitM 只针对你想改的域名,别图省事写通配符。金融类 App 该直连直连。
坑二:乱装第三方 rewrite 规则。网上搜来的规则集,质量参差不齐,有的规则三年没更新,装上反而把正常功能搞坏。教训:规则一条一条加,出问题立刻关掉排查。
坑三:证书没装对。rewrite 不生效,90% 是证书问题:要去"设置-通用-关于本机-证书信任设置"里把 Quantumult X 的证书设为完全信任。少这一步,后面全白搭。
如果你是纯新手,建议先看科学上网入门和全平台客户端配置,把代理基础打牢再碰 rewrite——地基不稳,楼盖得越高塌得越惨。
入门步骤:第一个 rewrite#
以"去掉某 App 开屏广告"为例:
- Quantumult X 里进入"重写",新建一条规则。
- 类型选
reject(拒绝请求),匹配开屏广告的域名(用 Quantumult X 自带的抓包/日志找)。 - 只对这个 App 生效,别全局。
- 保存,杀掉 App 重进,验证广告没了且功能正常。
- 备份配置:好不容易调好的规则,导出一份存好。
进阶思路:rewrite 能玩多深#
- 去广告:开屏、信息流广告,reject 是最常用的。
- 响应体重写:用
script-response-body改接口返回,需要写点 JS,适合爱折腾的。 - 请求头修改:伪装设备、改地区,某些场景有用。
但有条红线:rewrite 改的是你手机本地的流量,别拿它去薅羊毛、破解付费——那是另一回事。技术是中性的,用法决定性质。
踩坑复盘续:进阶玩家才会踩的坑#
坑四:rewrite 和分流规则打架。某 App 明明走了代理,rewrite 就是不生效——查了半天,发现是分流规则把它直连了,而 rewrite 只对特定模式下的流量生效。教训:rewrite 不生效时,先看分流,再看规则,最后看证书,排查有顺序。
坑五:脚本写崩把电量吃光。在 script-response-body 里写了个有问题的 JS,结果手机发烫、电量尿崩。教训:脚本先在小范围测试,打日志看执行情况,别一上来就全量开。
坑六:系统更新后证书失效。iOS 大版本升级,有时会把手动信任的证书重置,rewrite 集体罢工。教训:每次升级 iOS,第一件事就是检查证书信任状态。
三类常用 rewrite 模板(抄作业)#
第一类:开屏广告 reject
- 类型:
reject - 匹配:广告统计、开屏广告域名(用 Quantumult X 的请求日志抓,App 启动瞬间冒出来的那几个一般就是)
- 作用范围:只针对该 App 的 hostname
第二类:去信息流广告
- 类型:
reject或reject-200 - 匹配:信息流广告接口路径
- 注意:
reject-200返回空的 200,比直接 reject 更不容易让 App 报错
第三类:响应体重写
- 类型:
script-response-body - 场景:把接口返回里的广告位字段删掉
- 门槛:要会写一点 JS,先从改 JSON 字段练手
模板是起点,不是终点。每个 App 的接口都在变,模板三个月不更新就可能失效——这就是为什么我说 rewrite 是"养"出来的,不是"配"出来的。
日常维护清单#
- 每月检查一次:规则还生效吗,App 更新后有没有罢工
- 失效的规则及时删,别留着占坑
- 新装 App,先裸跑三天,确认正常再决定加不加 rewrite
- 配置文件每月导出备份一次(iCloud 丢配置的惨案每年都有)
- 跟踪一两个 rewrite 规则分享源,但别无脑全装
进阶步骤:第一条响应体重写脚本#
- 在 Quantumult X 里新建 rewrite,类型选
script-response-body。 - 匹配你要改的接口 URL(用日志抓准,别贪多)。
- 写 JS:解析响应体,改掉目标字段,再按原格式返回。
- 先只对这一个接口开,验证 App 功能正常。
- 生效后再考虑要不要推广到同类接口。
踩坑复盘:模块是个双刃剑#
坑七:模块装太多互相打架。rewrite 玩熟了,自然会去碰模块(别人打包好的规则加脚本合集)。我最多时装了二十几个模块,结果某个 App 罢工,根本定位不到是哪个模块干的。教训:模块一次只装一个,观察三天再装下一个;出问题的第一反应是逐个禁用模块。
坑八:忽略模块更新。模块作者修了 bug 发了新版,你还在用半年前的旧版,白白踩本可避免的坑。教训:模块和规则集一样要定期更新,但更新前看一眼更新说明。
从 rewrite 到模块:升级步骤#
- rewrite 单条规则玩熟了,再碰模块——顺序别反。
- 只从可信来源装模块,装之前看 star 数和最近更新时间。
- 装完先看模块说明:它改了哪些域名、动了哪些接口,心里有数。
- 观察三天,没问题再留用;有问题先禁用模块,再逐条排查。
- 模块的配置备份和 rewrite 规则一起导出,换设备一次到位。
玩到这一步,你已经超过 90% 的 Quantumult X 用户了。再往深走就是脚本和模块的天下,自建 Reality 节点那种属于服务端玩法,和 rewrite 是两条线,按兴趣选一条深入就行。