# grok-reg-protocol-cpa 基于 **Chromium + DrissionPage + turnstilePatch** 的免费 Grok 账号注册机。 注册成功后产出两类凭证: | 产物 | 用途 | 路径 | |------|------|------| | **SSO** | grok.com / grok2api Web 池 | 账本第三段 + 可选推远端池 | | **OIDC(CPA xAI)** | 免费 **Grok 4.5**(Grok Build / cli-chat-proxy) | `cpa_auths/xai-.json` | > **硬约束:SSO ≠ OIDC。** > 免费 Grok 4.5 **不能**用账本里的 sso JWT 直接打 API;必须再走 > `accounts.x.ai` device-auth 铸 OIDC,写成 CPA 的 `type=xai` 认证文件。 > 有 SSO 时优先走 **纯 HTTP Device Flow**;失败再回退浏览器 consent。 --- ## 当前推荐链路(Gmail catch-all) 本仓库当前实配以 **Gmail IMAP + Cloudflare catch-all 域名** 为主: 1. 用 catch-all 域名生成随机注册邮箱(如 `xxx@zhangyunuo.net`) 2. 验证码转发到 Gmail,经 IMAP 拉取 3. 注册拿到 SSO 4. 协议优先 mint OIDC → `cpa_auths/xai-*.json` ``` [Cloudflare catch-all 域名 → Gmail] ↓ 注册 accounts.x.ai accounts_cli.txt email----password----sso ↓ grok2api 池 (可选) SSO → Web 非 4.5 模型 ↓ OIDC mint(协议优先 → 浏览器回退) ↓ cpa_auths/xai-email.json 【注册机主导出】 ↓ (cpa_copy_to_hotload=true 时) CPA auth-dir 热加载 【可选】 ↓ CLIProxyAPI :8317 model=grok-4.5 ``` 也支持:`cloudmail` / `hotmail|outlookmail` / `cloudflare` / `duckmail` / `yyds`。 --- ## 环境 | 依赖 | 说明 | |------|------| | Linux / macOS | 协议 mint **不需要**浏览器;回退浏览器时需要桌面 `DISPLAY` | | `uv` + Python 3.13 | 见 `pyproject.toml` / `uv.lock`;可选 `mise` | | Chromium | 注册流程 + 协议失败回退时需要 | | 代理(按需) | 访问 xAI / accounts.x.ai 不通时配置 `proxy` / `cpa_proxy` | | 可选 | grok2api `:8000`、CLIProxyAPI(CPA) `:8317` | ```bash cd /path/to/grok-reg-protocol-cpa uv sync uv run python -c "from DrissionPage import Chromium; from curl_cffi import requests; print('OK')" ``` 或用 mise: ```bash mise install mise run deps ``` --- ## 快速开始(Gmail) ```bash cd grok-reg-protocol-cpa uv sync # 1) 主配置 cp config.example.json config.json # 2) 环境变量(可选;也可直接写进 config.json) cp .env.example .env # 编辑 .env: # GMAIL_USER=you@gmail.com # GMAIL_PASSWORD=xxxx xxxx xxxx xxxx # Gmail 应用专用密码 # 3) 在 config.json 中至少确认: # "email_provider": "gmail", # "defaultDomains": "your-catchall-domain.com", # "gmail_imap_user": "you@gmail.com", # 或依赖 .env 的 GMAIL_USER # "gmail_imap_password": "app password", # 或依赖 .env 的 GMAIL_PASSWORD # "proxy": "", # 需要时填 http://127.0.0.1:7890 # "cpa_export_enabled": true # 4) 注册 1 个号(含 SSO + CPA 导出) uv run python -u register_cli.py --extra 1 --threads 1 ``` GUI: ```bash uv run python grok_register_ttk.py # 或 mise run gui ``` --- ## 配置 1. 复制模板并编辑(模板内 `"//…"` 键是注释,加载时忽略): ```bash cp config.example.json config.json ``` 2. **字段详解见 `config.example.json` 内注释键。** ### 环境变量(`.env`) 真实进程环境变量优先于 `.env`;多数项也可写在 `config.json`。 | 变量 | 用途 | |------|------| | `GMAIL_USER` / `GMAIL_PASSWORD` | Gmail IMAP(`email_provider=gmail`) | | `MAIL_USER` / `MAIL_PASSWORD` | 兼容别名(`gmail_code_listener`) | | `CLOUDMAIL_URL` / `CLOUDMAIL_ADMIN_EMAIL` / `CLOUDMAIL_PASSWORD` | CloudMail 管理端 | | `GROK2API_APP_KEY` | 远端 grok2api Admin | | `API_REVERSE_TOOLS` | 可选:外部 `cpa_xai` 父目录 | | `CPA_EXPORT` | `auto_register` 是否导出 CPA(`0/false` 关) | | `https_proxy` / `http_proxy` | 代理回退 | 模板见 `.env.example`。 ### 邮箱模式 #### A. Gmail + catch-all(推荐) ```json { "email_provider": "gmail", "defaultDomains": "your-catchall-domain.com", "gmail_imap_user": "you@gmail.com", "gmail_imap_password": "xxxx xxxx xxxx xxxx", "gmail_imap_host": "imap.gmail.com", "gmail_imap_port": 993, "gmail_resend_after_sec": 45 } ``` 说明: - `defaultDomains`:Cloudflare 等 catch-all 域名,用于生成注册邮箱 - 验证码实际进入 Gmail;用 **应用专用密码**,不是登录密码 - 也可把账号密码只写在 `.env` 的 `GMAIL_USER` / `GMAIL_PASSWORD` #### B. Hotmail / Outlook ```json { "email_provider": "hotmail", "hotmail_accounts_file": "mail_credentials.txt", "hotmail_max_aliases_per_account": 5 } ``` ```bash cp mail_credentials.example.txt mail_credentials.txt ``` 每行四段(`----` 分隔): ```text 邮箱----密码----ClientID----Token ``` | 段 | 含义 | |----|------| | 邮箱 | Hotmail / Outlook 主邮箱 | | 密码 | 邮箱登录密码(注册机侧保留;IMAP 走 OAuth) | | ClientID | Azure AD 应用 Client ID | | Token | Microsoft OAuth2 **refresh_token**(XOAUTH2 IMAP) | 运行时摘要: - 默认先用原邮箱,后续用随机 plus alias - `outlook.office365.com`(可回退 `imap-mail.outlook.com`)XOAUTH2 IMAP 收码 - refresh_token 轮换会**自动回写** `mail_credentials.txt` #### C. CloudMail 需要 `cloudmail_url` / `cloudmail_admin_email` / `cloudmail_password` + `defaultDomains`。 也可用环境变量 `CLOUDMAIL_*`。 ### 代理优先级 | 字段 | 作用 | |------|------| | `proxy` | **注册** Chromium + 邮箱等 HTTP | | `cpa_proxy` | **OIDC mint**(协议 HTTP + 回退浏览器 + probe) | ``` cpa_proxy > proxy > 环境变量 https_proxy/http_proxy ``` ### CPA / OIDC 关键项 | 字段 | 默认 | 含义 | |------|------|------| | `cpa_export_enabled` | `true` | 注册成功后是否 mint OIDC | | `cpa_prefer_protocol` | `true` | 有 SSO 时先走纯 HTTP 协议 mint | | `cpa_protocol_only` | `false` | `true`=协议失败也不回退浏览器 | | `cpa_protocol_poll_timeout_sec` | `90` | 协议路径 token 轮询超时 | | `cpa_auth_dir` | `./cpa_auths` | 主导出目录 | | `cpa_copy_to_hotload` | `false` | 是否复制到 CPA 热加载目录 | | `cpa_hotload_dir` | `""` | CPA `auth-dir`(仅 copy 时) | | `cpa_base_url` | `https://cli-chat-proxy.grok.com/v1` | 免费 Build **必须**此上游 | | `cpa_headless` | `false` | 回退浏览器建议有头 | | `cpa_force_standalone` | `true` | 回退时独立 Chromium | | `cpa_mint_cookie_inject` | `true` | 回退时注入注册 cookie | | `cpa_mint_workers` | `-1` | mint 并发:`-1` 自动;`0` 内联;`1-10` 固定 | | `cpa_mint_required` | `false` | mint 失败是否整号失败 | ### 落盘约定 | 路径 | 是否必须 | 说明 | |------|----------|------| | `.env` | 可选 | Gmail / CloudMail 等密钥(勿提交) | | `config.json` | 是 | 本地实配(勿提交) | | `mail_credentials.txt` | hotmail 模式必须 | 四段凭证池 | | `accounts_cli.txt` / `accounts_*.txt` | 是 | 主账本 `email----password----sso` | | `cpa_auths/xai-*.json` | 开 export 时 | CPA 格式 OIDC 归档 | | `emails_used.txt` / `emails_error.txt` | 运行时 | 邮箱占用/失败记录 | | CPA `…/auths/xai-*.json` | 可选 | 热加载;由 `cpa_copy_to_hotload` 控制 | --- ## 协议 OIDC → CPA(失败回退浏览器) ``` 注册成功拿到 sso cookie ↓ 【优先】protocol_mint:curl_cffi + sso device/code → verify → approve → token 轮询 ↓ 成功 cpa_auths/xai-.json mint_method=protocol ↓ 失败 【回退】browser_confirm:有头 Chromium + turnstilePatch 同一套 device-auth,页面点「允许」 ↓ cpa_auths/xai-.json mint_method=browser ``` 实测:协议路径约数秒级;浏览器路径约 40–60s/号。 日志示例: ```text [cpa] mint try protocol (SSO HTTP device flow) [cpa] protocol token ok ... [cpa] mint protocol SUCCESS [cpa] mint_method=protocol ``` 本仓库自包含铸造代码: | 路径 | 说明 | |------|------| | `cpa_xai/protocol_mint.py` | SSO → 纯 HTTP Device Flow | | `cpa_xai/mint.py` | 协议优先,失败回退浏览器 | | `cpa_xai/browser_confirm.py` | 有头 Chromium 完成 consent | | `cpa_export.py` | 注册成功 hook | | `scripts/backfill_cpa_xai_from_accounts.py` | 存量账号批量补 CPA | | `scripts/export_cpa_xai_from_grok_auth.py` | 从 `~/.grok/auth.json` 导出 | --- ## 命令 前置: ```bash cd /path/to/grok-reg-protocol-cpa # 代理建议写在 config.json 的 proxy / cpa_proxy # 回退浏览器时需要桌面会话 export DISPLAY=${DISPLAY:-:0} ``` ### A. 新注册 N 个号(含 SSO + OIDC 导出) ```bash # 再注册 1 个(推荐) uv run python -u register_cli.py --extra 1 --threads 1 # 再注册 5 个 uv run python -u register_cli.py --extra 5 --threads 2 # GUI uv run python grok_register_ttk.py # 或 mise run gui / mise run register ``` 成功时: 1. 追加账本 `email----password----sso` 2. 可选:推 grok2api 3. 若 `cpa_export_enabled`:协议 mint(失败则浏览器)→ `cpa_auths/xai-.json` 4. 若 `cpa_copy_to_hotload`:再拷到 `cpa_hotload_dir` ### B. 存量号补 CPA(只 mint,不重新注册) 账本需含 SSO(第三段)。有 SSO 时通常**无需**弹浏览器: ```bash uv run python -u scripts/backfill_cpa_xai_from_accounts.py \ --accounts accounts_cli.txt \ --limit 1 --probe --timeout 300 # 全量缺失号 uv run python -u scripts/backfill_cpa_xai_from_accounts.py \ --limit 0 --probe --timeout 300 --sleep 3 ``` | 参数 | 含义 | |------|------| | `--limit N` | 本次最多 N 个缺失号;`0`=全部 | | `--email x@y` | 只处理指定邮箱 | | `--out-dir` | 主导出目录 | | `--cpa-dir` | 成功后复制到 CPA 热加载目录 | | `--probe` | 检查是否列出 `grok-4.5` | | `--headless` | 回退浏览器时无头(不推荐) | ### C. 从 `~/.grok/auth.json` 导出 ```bash uv run python scripts/export_cpa_xai_from_grok_auth.py --out-dir ./cpa_auths ``` ### D. 手动导入 CPA 热加载 ```bash cp -a ./cpa_auths/xai-USER@domain.json "$CPA_AUTH_DIR"/ chmod 600 "$CPA_AUTH_DIR"/xai-USER@domain.json ``` ### E. 调用验证(免费 Grok 4.5) ```bash KEY="<你的 CPA API KEY>" curl -sS http://127.0.0.1:8317/v1/models -H "Authorization: Bearer $KEY" | head curl -sS http://127.0.0.1:8317/v1/chat/completions \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "grok-4.5", "messages": [{"role":"user","content":"Reply with exactly OK"}], "stream": false }' ``` --- ## CLI 参数速查(`register_cli.py`) | 参数 | 含义 | |------|------| | `--extra N` | **再新注册 N 个**(推荐) | | `--count N` | 账号**总数目标**(含已有);已达标则退出 | | `--threads N` | 注册并发 1–10 | | `--mint-workers N` | CPA mint 并发:`-1`=config/auto;`0`=内联;`1-10`=固定 | | `--mint-queue-max N` | mint 队列背压:`-1`=auto(2×workers);`0`=不限制 | | `--accounts-file` | 账本路径 | | `--fast` / `--no-fast` | 快速模式(默认开)/ 关闭 | | `--no-browser-reuse` | 每号强制 quit 浏览器 | | `--browser-recycle-every N` | 复用 N 次后完整回收 | | `--cookie-snapshot` | 注册成功写 cookie 快照 | | `--inline-mint` | 强制注册线程内联 mint(调试) | --- ## 故障排查 | 现象 | 原因 / 处理 | |------|-------------| | Gmail 收不到码 | 检查应用专用密码、catch-all 是否进 Gmail、`defaultDomains`、IMAP 是否开启 | | 协议 `sso invalid` | SSO 过期/无效;会回退浏览器;检查账本第三段 | | 协议 verify/approve 失败 | 会话态变化 / 风控;看日志后自动回退浏览器 | | 一直 `authorization_pending` | 浏览器路径未完成 consent;需到「设备已授权」且 token 200 | | Cloudflare / Turnstile | 回退浏览器时关 headless、开 turnstilePatch、检查代理 | | Hotmail 收不到码 | 检查四段凭证、ClientID/Token、IMAP 主机与 alias 计数 | | 有 token 但无 grok-4.5 | `cpa_base_url` 是否为 `cli-chat-proxy` | | 注册成功但无 `cpa_auths` | `cpa_export_enabled`?看 `cpa_auths/cpa_auth_failed.txt` | 调试原则:以 **token 端点返回 `access_token` + refresh_token** 为准;probe 看 `/v1/models` 是否含 `grok-4.5`。 --- ## 目录结构 ``` grok-reg-protocol-cpa/ register_cli.py # CLI 批量注册 + mint 流水线 grok_register_ttk.py # 浏览器注册核心(多邮箱 provider) auto_register.py # 另一套自动注册入口 gmail_code_listener.py # Gmail 验证码监听辅助 cpa_export.py # 成功 hook cpa_xai/ protocol_mint.py # SSO 纯 HTTP Device Flow(协议优先) mint.py # 协议 → 浏览器回退编排 browser_confirm.py # 原浏览器 consent oauth_device.py / schema.py / writer.py / probe.py ... scripts/ backfill_cpa_xai_from_accounts.py export_cpa_xai_from_grok_auth.py config.example.json .env.example config.json # 本地实配(勿提交) .env # 本地密钥(勿提交) mail_credentials.example.txt # Hotmail 四段模板 mail_credentials.txt # 本地邮箱池(勿提交) accounts_cli.txt # 主账本(勿提交) cpa_auths/ # xai-.json(勿提交) turnstilePatch/ pyproject.toml / uv.lock / mise.toml ``` --- ## 安全 - `config.json`、`.env`、`mail_credentials.txt`、账本、`cpa_auths/*.json` 含密码与 token **权限建议 600;勿提交 git;勿塞进分享包** - 免费 Build 有额度与风控;批量 mint 请控速(`--sleep`) - 仓库默认已 ignore:`.env`、`config.json`、`accounts_*.txt`、`emails_*.txt`、`cpa_auths/`、`cookies/`、`logs/` 等 --- ## 相关 - CLIProxyAPI / CPA:自备;将 `cpa_auths/xai-*.json` 拷到 CPA auth-dir 即可 - 免费 Grok 4.5 只走 Build OIDC + `cli-chat-proxy`,不是网页 SSO