微信二维码

微信: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
2
3
4
┌──────────────┐  Wi-Fi 手动代理   ┌──────────────┐  二级代理   ┌────────┐
│ 越狱 iPhone │ ──── :9000 ─────▶│ Reqable │ ─ :7890 ──▶│ Clash │──▶ 互联网
│ (ChatGPT App)│ │ (电脑, 抓包) │ │(科学上网)│
└──────────────┘ └──────────────┘ └────────┘

手机流量先发给电脑上的 Reqable(负责解密、抓包、改写),Reqable 再把流量交给 Clash(负责出国)。Reqable 管"看见和改写",Clash 管"送得出去",职责分离。

2.1 电脑端配置

第一步:启动 Clash

  • ✅ 确保 Clash 正常运行(默认端口 7890
  • 关闭系统代理
  • 关闭 TUN 模式(虚拟网卡)

⚠️ 最容易踩的坑:如果 Clash 开着系统代理或 TUN,它会抢先接管电脑全部流量,导致 Reqable 的二级代理形成环路、或流量被 Clash 直接吞掉,结果就是手机的请求根本进不了 Reqable。记住:这一步 Clash 只当"上游出口",不当"入口接管"。

第二步:配置 Reqable 的二级代理

打开 Reqable,创建二级代理(Upstream Proxy)规则

1
2
3
协议:HTTP
地址:127.0.0.1
端口:7890 # 即 Clash 的端口

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 界面里有引导),安装描述文件,然后两步信任

  1. 「设置 → 通用 → VPN 与设备管理」→ 安装刚下载的描述文件
  2. 「设置 → 通用 → 关于本机 → 证书信任设置」→ 打开 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
2
3
4
5
✅ cloudd
✅ accountsd
✅ identityservicesd
✅ akd
✅ nsurlsessiond

各进程的作用:

进程 职责 为什么要 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 可能是 p22p44 等不同数字,取决于你被调度到哪个节点,域名规律是 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(保持不变)

注意offerNamesalableAdamId 必须是同一个商品的,不能混用(比如 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
2
3
4
5
6
appAdamId (6448311069)  ← ChatGPT App

└─ mtSubscriptionAdamId (6749460546) ← 订阅组(组内方案互斥、可升降级)
├─ salableAdamId 6448311597 → Plus 月付
├─ salableAdamId 6759817441 → Pro 5x 月付
└─ salableAdamId 6657954405 → Pro 20x 月付 ★ 目标商品
  • salableAdamId 是"可售商品"的唯一标识,每个价格档位都是一个独立商品。OpenAI 关闭新购只是不再展示 Pro 20x 的入口,但 6657954405 在 App Store 里依然可售。
  • offerName 是产品字符串标识符,命名规律:oai_chatgpt_{档位}_{额度}_{周期}
  • mtSubscriptionAdamId 是订阅组,除 Go 外所有套餐共用,同组可互相升降级——这也是"从 Plus 切到 Pro 20x"能成立的前提。

六、常见问题与排障

按出现频率排列,对着排查即可。

6.1 抓不到 buyProduct 请求(最高频)

现象:Reqable 里能看到 ChatGPT 的 API 流量,唯独没有 buyProduct

排查顺序:

  1. SSL Kill Switch 是否注入到了 nsurlsessiond —— 购买请求的实际载体,漏了它必然抓不到(见 3.3)
  2. Reqable 证书是否已安装并信任 —— 描述文件 + 证书信任开关,两步都要做(见 2.3)
  3. Clash 是否误开了系统代理 / TUN —— 会吞掉流量(见 2.1)
  4. 配完 Choicy 后是否重启了设备 —— hook 不重启不生效

6.2 某些系统功能异常(App Store 打不开、iCloud 报错)

注入范围过广或证书链有问题时可能出现。严格只对那 5 个进程注入,不要对全局所有进程开 SSL Kill Switch,范围越大副作用越多。

6.3 弹窗出来了,但确认后失败

  • 账号无订阅资格 → 情况 B 没先订 Go/Plus(见 4.1)
  • 付款方式异常 → Apple ID 余额不足 / 卡被拒 / 区域限制
  • 两个商品字段不匹配offerNamesalableAdamId 必须是同一商品的

6.4 价格字段改错

从非 $200 的入口(如 Plus 月付)操作时,忘了同步改 price,会导致价格与商品不匹配。从 Plus 年付($200) 入手时价格恰好一致,最省事;其他入口务必确认 price = 目标商品价格(Pro 20x = 200000)。

6.5 操作完成后务必还原环境

MITM + SSL Kill Switch 让设备处于"信任任意中间人证书"的高风险状态,用完必须还原

  1. Choicy 里关闭对那 5 个进程的 SSL Kill Switch 注入
  2. 删除手机 Wi-Fi 的手动代理配置
  3. 删除 / 取消信任 Reqable 的 CA 证书

不要让一台"信任任意证书"的设备长期联网使用。


七、流程总览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌──────────────────────────────────────────────────────────┐
│ 准备阶段 │
│ 1. 越狱 iOS 设备 │
│ 2. Sileo 安装 SSL Kill Switch 3 + Choicy │
│ 3. 电脑安装 Clash + Reqable │
│ 4. 确认 Apple ID 有订阅资格(无则先订 Go/Plus) │
└──────────────────────┬───────────────────────────────────┘

┌──────────────────────────────────────────────────────────┐
│ 配置阶段 │
│ 1. Clash 关系统代理/TUN;Reqable 二级代理 → Clash:7890 │
│ 2. 手机 Wi-Fi 代理指向 Reqable:9000 │
│ 3. 手机安装并信任 Reqable 证书 │
│ 4. Choicy 对 5 个系统进程启用 SSL Kill Switch → 重启 │
└──────────────────────┬───────────────────────────────────┘

┌──────────────────────────────────────────────────────────┐
│ 执行阶段 │
│ 1. ChatGPT App → 设置 → 订阅 → 查看所有方案 │
│ 2. 选 Plus 年付($200),点订阅(先别付款) │
│ 3. Reqable 拦截 buyProduct 请求(设断点) │
│ 4. 改写 offerName / salableAdamId(price 保持 200000) │
│ 5. 放行 → 弹出 Pro 20x 确认弹窗 → 确认付款 🎉 │
└──────────────────────────────────────────────────────────┘

八、安全与合规提醒

  • 技术边界:这套手法只是把购买请求的商品标识改成另一个合法可售商品,Pro 20x 依然全价支付。它没有伪造支付凭证、没有篡改价格少付钱、没有绕过账号认证——是"走后端还通的路",不是"骗过支付系统"。
  • 设备安全:越狱本身削弱了 iOS 的安全性;SSL Kill Switch 期间设备信任任意中间人证书,若连到不可信网络,Apple ID 凭据、iCloud 数据都可能被截获。建议用一台专用越狱测试机操作,用完及时还原(见 6.5)。
  • 服务条款:修改 App Store 购买请求可能违反 Apple 与 OpenAI 的服务条款,极端情况下面临订阅撤销或账号受限。本文是技术原理讲解,是否操作、后果自负
  • 时效性:这条途径依赖 Apple 侧商品仍可售。一旦 6657954405 被置为不可售,方法立即失效。