Files
grok-keygen/README.md
T
chaos 6f7c949681 Replace repository with grok-reg-protocol-cpa project
Overwrite previous grok-keygen contents with the local registration/CPA protocol codebase (secrets and runtime data excluded).
2026-07-11 17:25:37 +08:00

397 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# grok_reg-protocol_cpa
基于 **Chromium + DrissionPage + turnstilePatch** 的免费 Grok 账号注册机。
本分支在原版注册机基础上新增了两点:
1. **Hotmail / Outlook 邮箱凭证池**
支持 `邮箱----密码----ClientID----Token` 四段格式读取与 XOAUTH2 IMAP 收验证码。
2. **协议优先的 导出**
注册拿到 SSO 后,优先用 **纯 HTTP Device Flow**(`curl_cffi` + `sso` cookie)铸造 CPA 用的 `xai-*.json`;协议失败再回退原浏览器 consent 逻辑。
一条成功链路会产出两类凭证:
| 产物 | 用途 | 路径 |
|------|------|------|
| **SSO** | grok.com / grok2api Web 池 | 账本第三段 + 可选推远端池 |
| **OIDC(CPA xAI)** | 免费 **Grok 4.5**(Grok Build / cli-chat-proxy) | `cpa_auths/xai-<email>.json` |
> **硬约束:SSO ≠ OIDC。**
> 免费 Grok 4.5 **不能**用账本里的 sso JWT 直接打 API;必须再走
> `accounts.x.ai` device-auth 铸 OIDC,写成 CPA 的 `type=xai` 认证文件。
> 本仓库的协议路径正是用 **SSO cookie 自动完成** 这一步(无需再弹浏览器时优先走协议)。
本仓库**自包含** OIDC/CPA 铸造代码(`cpa_xai/`):
| 路径 | 说明 |
|------|------|
| `cpa_xai/protocol_mint.py` | **新增**:SSO → 纯 HTTP Device Flow(verify / approve / token) |
| `cpa_xai/mint.py` | 协议优先,失败回退 `mint_with_browser` |
| `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` 导出 |
---
## 本版主要改动
### 1. Hotmail / Outlook:`邮箱----密码----ClientID----Token`
设置:
```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 用) |
示例:
```text
your@hotmail.com----mailPassword----xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx----0.AXcA...refresh_token...
```
运行时行为摘要:
- 默认先用原邮箱,后续用随机 plus alias(如 `name+k8s2p9qa@domain`)
- 经 `outlook.office365.com`(可回退 `imap-mail.outlook.com`)XOAUTH2 IMAP 拉验证码
- refresh_token 若轮换会**自动回写** `mail_credentials.txt`
- 成功 / 失败 / 占用中的 alias 会参与去重与 `hotmail_max_aliases_per_account` 计数
相关配置见 `config.example.json` 中 `hotmail_*` 注释键。
### 2. 协议 OIDC → CPA(失败回退浏览器)
```
注册成功拿到 sso cookie
↓
【优先】protocol_mint:curl_cffi + sso
device/code → verify → approve → token 轮询
↓ 成功
cpa_auths/xai-<email>.json mint_method=protocol
↓ 失败
【回退】browser_confirm:有头 Chromium + turnstilePatch
同一套 device-auth,页面点「允许」
↓
cpa_auths/xai-<email>.json mint_method=browser
```
实测协议路径约数秒级即可完成(含 probe);浏览器路径约 40–60s/号。
关键配置:
| 字段 | 默认 | 含义 |
|------|------|------|
| `cpa_prefer_protocol` | `true` | 有 SSO 时先走纯 HTTP 协议 mint |
| `cpa_protocol_only` | `false` | `true`=协议失败也不回退浏览器(调试用) |
| `cpa_protocol_poll_timeout_sec` | `90` | 协议路径 token 轮询超时 |
| `cpa_export_enabled` | `true` | 注册成功后是否 mint OIDC |
| `cpa_auth_dir` | `./cpa_auths` | 主导出目录 |
| `cpa_base_url` | `https://cli-chat-proxy.grok.com/v1` | 免费 Build **必须**此上游 |
| `cpa_headless` | `false` | 回退浏览器时建议有头 |
| `cpa_force_standalone` | `true` | 回退时独立 Chromium,不复用注册 tab |
| `cpa_mint_cookie_inject` | `true` | 回退时注入注册 cookie,尽量跳过二次登录 |
日志里可看到:
```text
[cpa] mint try protocol (SSO HTTP device flow)
[cpa] protocol token ok ...
[cpa] mint protocol SUCCESS
[cpa] mint_method=protocol
```
协议失败时类似:
```text
[cpa] mint protocol failed: ...
[cpa] mint fallback → browser
[cpa] mint_method=browser
```
---
## 整链示意
```
[邮箱 Hotmail/Outlook 或 CloudMail 等]
↓ 注册 accounts.x.ai
accounts_*.txt / 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
```
---
## 环境
| 依赖 | 说明 |
|------|------|
| macOS / Linux + 桌面 | 协议 mint **不需要**浏览器;回退浏览器时需要 `DISPLAY` / 本机 GUI |
| `uv` + Python 3.13 | 本目录 `pyproject.toml` / `uv.lock`;可选 `mise` |
| `chromium` | 仅注册 + 协议失败回退时需要 |
| 代理 | xAI / accounts.x.ai 通常需要,如 `http://127.0.0.1:7890` |
| 可选 | 本机 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
```
---
## 配置
1. 复制模板并编辑(模板内 `"//…"` 键是注释,加载时忽略):
```bash
cp config.example.json config.json
# 编辑:email_provider、proxy、hotmail_*、cpa_*
```
2. **字段详解见 `config.example.json` 内注释键**。
### 代理优先级
| 字段 | 作用 |
|------|------|
| `proxy` | **注册** Chromium + 邮箱等 HTTP |
| `cpa_proxy` | **OIDC mint**(协议 HTTP + 回退浏览器 + probe) |
```
cpa_proxy > proxy > 环境变量 https_proxy/http_proxy
```
配置优先于 shell 里的 `https_proxy`,避免「config 写了 7890 却被环境变量盖掉」。
### 与 CPA 相关的关键项(摘要)
| 字段 | 含义 | 建议 |
|------|------|------|
| `cpa_export_enabled` | 注册成功后是否 mint OIDC | `true` |
| `cpa_prefer_protocol` | SSO 协议优先 | `true` |
| `cpa_protocol_only` | 仅协议、不回退浏览器 | 调试时 `true`,日常 `false` |
| `cpa_auth_dir` | **主导出目录** | `./cpa_auths` |
| `cpa_copy_to_hotload` | 是否复制到 CPA 热加载目录 | 可选,默认 `false` |
| `cpa_hotload_dir` | CPA `auth-dir` | 仅 copy 时需要 |
| `cpa_base_url` | 上游 API 根 | **必须** `https://cli-chat-proxy.grok.com/v1` |
| `cpa_headless` | 回退浏览器是否无头 | **`false`** |
| `cpa_force_standalone` | 回退时独立浏览器 | **`true`** |
| `cpa_proxy` | mint 专用代理 | 如 `http://127.0.0.1:7890` |
| `cpa_mint_required` | mint 失败是否整号失败 | 通常 `false` |
CLI 与 GUI 都会在注册成功后读这些配置。GUI 下 CPA 导出会串行,避免多窗口抢焦点。
### 落盘约定
| 路径 | 是否必须 | 说明 |
|------|----------|------|
| `mail_credentials.txt` | hotmail 模式必须 | `邮箱----密码----ClientID----Token` |
| `accounts_cli.txt` / `accounts_*.txt` | 是 | 主账本 `email----password----sso` |
| `cpa_auths/xai-*.json` | 是(开 export 时) | CPA 格式 OIDC 归档 |
| CPA `…/auths/xai-*.json` | 可选 | 热加载;由 `cpa_copy_to_hotload` 控制 |
---
## 命令:批量注册 + 认证
前置:
```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-<email>.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` 导出 CPA 文件
```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 |
| `--accounts-file` | 账本路径 |
---
## 故障排查
| 现象 | 原因 / 处理 |
|------|-------------|
| 协议 `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_auth_failed.txt` |
调试原则:以 **token 端点返回 `access_token` + refresh_token** 为准;probe 看 `/v1/models` 是否含 `grok-4.5`。
---
## 目录结构
```
grok_reg-protocol_cpa/
register_cli.py # CLI 批量注册
grok_register_ttk.py # 浏览器注册核心 + Hotmail 等
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
config.json # 本地实配(勿外泄)
mail_credentials.example.txt # 邮箱----密码----ClientID----Token 模板
mail_credentials.txt # 本地邮箱池(勿提交)
accounts_cli.txt # 主账本
cpa_auths/ # xai-<email>.json(分享包勿带)
turnstilePatch/
pyproject.toml / uv.lock / mise.toml
```
---
```bash
cd grok_reg-protocol_cpa
uv sync
cp config.example.json config.json
cp mail_credentials.example.txt mail_credentials.txt
# 填 hotmail 四段凭证 + proxy,再运行
uv run python -u register_cli.py --extra 1
```
---
## 安全
- `config.json`、`mail_credentials.txt`、账本、`cpa_auths/*.json` 含密码与 refresh_token,**权限 600 / 勿提交 git / 勿塞进分享包**
- 免费 Build 有额度与风控;批量 mint 请控速(`--sleep`)
---
## 相关
- CLIProxyAPI / CPA:自备;将 `cpa_auths/xai-*.json` 拷到 CPA auth-dir 即可
- 免费 Grok 4.5 只走 Build OIDC + `cli-chat-proxy`,不是网页 SSO