iOS ChatGPT Pro 20x 强开订阅全解析:从环境搭建到 StoreKit 请求重写实操教程

微信:
dev-io
Telegram:@hotkeyworks
⚠️ 免责声明:本文仅供安全研究与技术学习。文中描述的技术手段仅用于分析 iOS App 内购(IAP)与 App Store 订阅协议的工作原理,帮助开发者理解 StoreKit 的安全边界。请勿将相关技术用于任何未授权的操作,并遵守 Apple 与 OpenAI 的服务条款。
前言
前段时间,OpenAI 关闭了 ChatGPT Pro 20x 的新购。
Pro 20x 是 OpenAI 面向重度用户的高配档位——每月 $200,相比 Pro 5x 提供更高的额度和模型优先级。新购关闭后,已经订阅的老用户可以继续续费,但新用户在官方渠道已经订不了了——网页端的方案列表里不再提供 Pro 20x 的购买入口。这是 OpenAI 主动做的一次停售。
但有一个"漏网之处":iOS 端仍然能通过特殊途径充上 Pro 20x。
原因在于责任分界——OpenAI 能控制自己的下单入口,但 iOS 上真正的扣款走的是 Apple 的 App Store 内购(IAP)。Pro 20x 对应的 App Store 可售商品,只要还处于「可售(Available)」状态,Apple 的购买接口 buyProduct 就仍然接受它。OpenAI 关掉了新购入口,却没有(也无法单方面)把 Apple 那边的计费商品一并撤下。
所以这套「强开」的思路就是:在 iOS 上发起一次普通订阅,用中间人抓包(MITM)拦截发往 App Store 的购买请求,把请求里的商品标识字段改写成 Pro 20x,让扣款流程继续走完。 这就是在官方新购关闭后,iOS 仍能订上 Pro 20x 的途径。
一、前置条件
在开始之前,请确保你已准备好以下全部条件,缺一不可:
| 序号 | 条件 | 说明 |
|---|---|---|
| 1 | 一部已越狱的 iOS 设备 | 需要能安装 Sileo / Zebra 等包管理器 |
| 2 | 手机上 ChatGPT App 能正常打开 | 确保 App 已登录、版本可用 |
| 3 | 一台安装了 Reqable 的电脑 | 抓包与请求重写工具,支持 Windows / macOS |
| 4 | 电脑上安装了 Clash | 用于科学上网(作为 Reqable 的上游出口) |
| 5 | 手机与电脑连接同一 Wi-Fi | 中间人抓包走局域网,必须同网段 |
| 6 | 一个有订阅资格的 Apple ID | 详见 4.1 节——从未订过要先订 Go/Plus |
💡 为什么必须越狱:App Store 的购买请求不是 ChatGPT App 发出的,而是 iOS 的系统守护进程(如
nsurlsessiond/itunesstored)发出的。这些系统进程做了 SSL Pinning(证书绑定),普通的中间人证书会被拒绝。要绕过它,必须用越狱插件在系统层 hook 掉证书校验——非越狱设备做不到这一点。
二、网络环境配置
整套抓包链路的数据流向是这样的:
1 | ┌──────────────┐ Wi-Fi 手动代理 ┌──────────────┐ 二级代理 ┌────────┐ |
手机流量先发给电脑上的 Reqable(负责解密、抓包、改写),Reqable 再把流量交给 Clash(负责出国)。Reqable 管"看见和改写",Clash 管"送得出去",职责分离。
2.1 电脑端配置
第一步:启动 Clash
- ✅ 确保 Clash 正常运行(默认端口
7890) - ❌ 关闭系统代理
- ❌ 关闭 TUN 模式(虚拟网卡)
⚠️ 最容易踩的坑:如果 Clash 开着系统代理或 TUN,它会抢先接管电脑全部流量,导致 Reqable 的二级代理形成环路、或流量被 Clash 直接吞掉,结果就是手机的请求根本进不了 Reqable。记住:这一步 Clash 只当"上游出口",不当"入口接管"。
第二步:配置 Reqable 的二级代理
打开 Reqable,创建二级代理(Upstream Proxy)规则:
1 | 协议:HTTP |
Reqable 自身的监听端口是 9000(手机要指向这个端口)。
2.2 手机端配置
打开手机「设置 → Wi-Fi → 当前连接的网络 → 配置代理 → 手动」,填写:
| 字段 | 值 |
|---|---|
| 服务器 | 电脑的局域网 IP(如 192.168.1.x) |
| 端口 | 9000(Reqable 的监听端口) |
💡 查电脑 IP:macOS 用
ifconfig,Windows 用ipconfig,找到当前 Wi-Fi 网卡的192.168.x.x地址。
2.3 安装并信任 Reqable 证书
配好代理后,用手机 Safari 打开 Reqable 的证书下载页(Reqable 界面里有引导),安装描述文件,然后两步信任:
- 「设置 → 通用 → VPN 与设备管理」→ 安装刚下载的描述文件
- 「设置 → 通用 → 关于本机 → 证书信任设置」→ 打开 Reqable 证书的信任开关
这两步缺一不可。只装不信任,HTTPS 依然解不开。
三、iOS 越狱设备配置
这是整套流程中技术含量最高、也最容易失败的一环——绕过系统进程的 SSL Pinning。
3.1 安装必要插件
在越狱设备的 Sileo(或 Zebra)商店里安装以下两个插件:
| 插件名 | 用途 |
|---|---|
| SSL Kill Switch 3 | 绕过 SSL Pinning,让系统进程的 HTTPS 可被解密抓包 |
| Choicy | 控制 Tweak 精确注入到指定进程 |
3.2 配置 SSL Kill Switch 3
打开 SSL Kill Switch 3,确认总开关已开启即可。
原理:它直接 hook 掉 iOS 底层负责证书校验的函数(如
SSL_CTX_set_custom_verify/SecTrustEvaluate),让校验永远返回"通过"。这样即便系统进程做了证书指纹绑定,你的中间人证书也能畅通无阻。
3.3 配置 Choicy(关键)
光开 SSL Kill Switch 还不够,得告诉系统"要对哪些进程生效"。打开 Choicy → 守护进程(Daemons),对以下 5 个系统进程勾选启用 SSL Kill Switch 3:
1 | ✅ cloudd |
各进程的作用:
| 进程 | 职责 | 为什么要 hook |
|---|---|---|
cloudd |
iCloud 通用守护进程 | 承载部分账户与订阅同步流量 |
accountsd |
账户框架守护进程 | 管理 Apple ID 账户凭据 |
identityservicesd |
身份服务 | Apple ID 身份验证通信 |
akd |
AuthKit 守护进程 | Apple ID 认证核心 |
nsurlsessiond |
后台网络会话 | App Store 购买请求的实际网络载体 |
⚠️ 重中之重:
buyProduct购买请求最终由nsurlsessiond(或itunesstored)承载,不是 ChatGPT App 发出的。如果你只对 ChatGPT App 注入 SSL Kill Switch,会看到 ChatGPT 自己的 API 流量,却唯独抓不到那条购买请求。这也是 90% 的人卡住的原因。
配完后,重启设备(或至少重启相关进程)让 hook 生效。
四、订阅流程详解
环境就绪,开始正式操作。
4.1 确认账号订阅资格
Pro 20x 强开对账号有要求,分两种情况:
- 情况 A(有订阅记录):Apple 账号之前订阅过 ChatGPT 任意套餐(Go / Plus / Pro 5x 都算)→ 可直接操作,跳到 4.2。
- 情况 B(从未订阅过):从未订过 ChatGPT 会员的 Apple ID → 需要先正常订一个 Go 或 Plus,产生订阅记录后,再回来做强开。
为什么:
buyProduct走的是订阅组内的购买/变更逻辑。一个从没在这个订阅组里产生过任何记录的账号,直接购买一个 UI 上不展示的高价商品,更容易触发 Apple 侧的异常校验。先建立一条订阅记录,相当于在组里"落过户",后续组内变更就顺理成章。
4.2 操作步骤
Step 1|进入订阅页面
1 | ChatGPT App → 设置 → 订阅 → 查看所有方案 |
Step 2|选择任意方案并点订阅(先别付款)
推荐选 Plus 年付($200),点「订阅」按钮。
⚠️ 此时不要在手机上确认付款! 弹出系统付款框之前,请求已经发出,这正是我们要拦截的时刻。
为什么选 Plus 年付:Plus 年付($200) 和 Pro 20x 月付($200) 价格相同。改写时
price字段不用动,只需替换两个商品标识字段,出错概率最低。若从 Plus 月付($19.99) 入手,还得额外把price改掉,多一分风险。
Step 3|在 Reqable 里定位购买请求
在电脑的 Reqable 抓包列表里找到这条请求:
1 | POST https://p44-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct |
p44可能是p22、p44等不同数字,取决于你被调度到哪个节点,域名规律是p{N}-buy.itunes.apple.com。
Step 4|拦截并重写请求体
对该请求设置断点(Breakpoint),在它发出前暂停,修改请求体(Apple Plist XML 格式)中的这 3 个字段:
| 字段 | 原值(Plus 年付) | 改为(Pro 20x 月付) |
|---|---|---|
offerName |
oai_chatgpt_plus_20000_1y |
oai_chatgpt_pro_20000_1m |
salableAdamId |
6745416289 |
6657954405 |
price |
200000 |
200000(保持不变) |
注意:
offerName和salableAdamId必须是同一个商品的,不能混用(比如 offerName 写 Pro 20x 但 salableAdamId 还是 Plus 的,会被服务端拒)。
Step 5|放行请求
改完后放行该请求。如果一切正确:
1 | 🎉 手机上会弹出 ChatGPT Pro 20x 的订阅确认弹窗! |
此时再确认付款,即完成 Pro 20x 订阅。
4.3 重写的两种方式
| 方式 | 操作 | 适用 |
|---|---|---|
| 断点手改 | 对 buyProduct 设 Breakpoint,暂停后手动编辑 Plist |
第一次操作,看清完整请求体 |
| Rewrite 规则 | 预设正则替换 offerName / salableAdamId |
熟练后自动化复用 |
建议第一次用断点,看清 Plist 结构后再决定是否上 Rewrite 规则。
五、关键请求字段参考
5.1 ChatGPT 各套餐字段对照表
需要改成别的档位时,把请求体字段替换成对应值即可:
| 套餐 | offerName |
salableAdamId |
mtSubscriptionAdamId |
price |
|---|---|---|---|---|
| Go 月付 $8 | oai_chatgpt_go_1000_1m |
6749460546 |
❌ 无 | 8000 |
| Plus 月付 $19.99 | oai_chatgpt_plus_1999_1m |
6448311597 |
6749460546 |
19990 |
| Plus 年付 $200 | oai_chatgpt_plus_20000_1y |
6745416289 |
6749460546 |
200000 |
| Pro 5x 月付 $100 | oai_chatgpt_pro_10000_1m |
6759817441 |
6749460546 |
100000 |
| Pro 20x 月付 $200 | oai_chatgpt_pro_20000_1m |
6657954405 |
6749460546 |
200000 |
💡 说明:
price单位为 0.001 美元(200000= $200.00)。Go 套餐没有mtSubscriptionAdamId,其余套餐共用同一个订阅组6749460546。
5.2 buyProduct 请求体字段说明
1 | POST https://p44-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct |
请求体为 Apple Plist XML 格式,关键字段:
| 字段 | 说明 | 示例值(Pro 20x) |
|---|---|---|
appAdamId |
ChatGPT App ID | 6448311069 |
bid |
Bundle ID | com.openai.chat |
offerName |
订阅方案名称 | oai_chatgpt_pro_20000_1m |
price |
价格(0.001 美元) | 200000 |
salableAdamId |
可售商品 ID | 6657954405 |
mtSubscriptionAdamId |
订阅组 ID | 6749460546 |
buySubscription |
是否订阅购买 | true |
5.3 这些 ID 之间的层级关系
理解 AdamId 的层级,改字段时才不会乱:
1 | appAdamId (6448311069) ← ChatGPT App |
salableAdamId是"可售商品"的唯一标识,每个价格档位都是一个独立商品。OpenAI 关闭新购只是不再展示 Pro 20x 的入口,但6657954405在 App Store 里依然可售。offerName是产品字符串标识符,命名规律:oai_chatgpt_{档位}_{额度}_{周期}。mtSubscriptionAdamId是订阅组,除 Go 外所有套餐共用,同组可互相升降级——这也是"从 Plus 切到 Pro 20x"能成立的前提。
六、常见问题与排障
按出现频率排列,对着排查即可。
6.1 抓不到 buyProduct 请求(最高频)
现象:Reqable 里能看到 ChatGPT 的 API 流量,唯独没有 buyProduct。
排查顺序:
- SSL Kill Switch 是否注入到了
nsurlsessiond—— 购买请求的实际载体,漏了它必然抓不到(见 3.3) - Reqable 证书是否已安装并信任 —— 描述文件 + 证书信任开关,两步都要做(见 2.3)
- Clash 是否误开了系统代理 / TUN —— 会吞掉流量(见 2.1)
- 配完 Choicy 后是否重启了设备 —— hook 不重启不生效
6.2 某些系统功能异常(App Store 打不开、iCloud 报错)
注入范围过广或证书链有问题时可能出现。严格只对那 5 个进程注入,不要对全局所有进程开 SSL Kill Switch,范围越大副作用越多。
6.3 弹窗出来了,但确认后失败
- 账号无订阅资格 → 情况 B 没先订 Go/Plus(见 4.1)
- 付款方式异常 → Apple ID 余额不足 / 卡被拒 / 区域限制
- 两个商品字段不匹配 →
offerName与salableAdamId必须是同一商品的
6.4 价格字段改错
从非 $200 的入口(如 Plus 月付)操作时,忘了同步改 price,会导致价格与商品不匹配。从 Plus 年付($200) 入手时价格恰好一致,最省事;其他入口务必确认 price = 目标商品价格(Pro 20x = 200000)。
6.5 操作完成后务必还原环境
MITM + SSL Kill Switch 让设备处于"信任任意中间人证书"的高风险状态,用完必须还原:
- Choicy 里关闭对那 5 个进程的 SSL Kill Switch 注入
- 删除手机 Wi-Fi 的手动代理配置
- 删除 / 取消信任 Reqable 的 CA 证书
不要让一台"信任任意证书"的设备长期联网使用。
七、流程总览
1 | ┌──────────────────────────────────────────────────────────┐ |
八、安全与合规提醒
- 技术边界:这套手法只是把购买请求的商品标识改成另一个合法可售商品,Pro 20x 依然全价支付。它没有伪造支付凭证、没有篡改价格少付钱、没有绕过账号认证——是"走后端还通的路",不是"骗过支付系统"。
- 设备安全:越狱本身削弱了 iOS 的安全性;SSL Kill Switch 期间设备信任任意中间人证书,若连到不可信网络,Apple ID 凭据、iCloud 数据都可能被截获。建议用一台专用越狱测试机操作,用完及时还原(见 6.5)。
- 服务条款:修改 App Store 购买请求可能违反 Apple 与 OpenAI 的服务条款,极端情况下面临订阅撤销或账号受限。本文是技术原理讲解,是否操作、后果自负。
- 时效性:这条途径依赖 Apple 侧商品仍可售。一旦
6657954405被置为不可售,方法立即失效。
