Windows 上 TRAE CN(原名 TRAE SOLO CN / TraeWork CN)桌面客户端凭证存储的系统性逆向工程。
2026-10-24 更新:桌面客户端已改名 Trae CN(%LOCALAPPDATA%\Programs\Trae CN),本地解密链路已在 Trae CN v1.107.1 重测通过(byteCrypto 新锚点);域名规划、登录 URL 与模型请求对齐 modelmux traecn 渠道实测(OAuth 迁至
api.trae.com.cn,模型走trae-api-cn.mchost.guru)。详见docs/FLOW.md§九。
| 指标 | 数值 |
|---|---|
| 解密 | 4/4 凭证条目(100%,2026-10-24 在 Trae CN 1.107.1 重测通过) |
| API 端点发现 | 98 个 TRAE 专用路径(共 356 个) |
| 成功调用 API | 18 个可用 + 22 个需参数 |
| Token 续期 | 完整 ECDSA P-256 设备证明流程(双端点候选) |
| 每日签到 | 状态查询 + 领取 |
| 模型请求 | remote 目录 45 模型 + 22 通道目录(2026-10-24 实测) |
| 浏览器登录 | 网页授权 URL(20 参数)+ 本地回调 + agent-browser 打开 |
| 测试覆盖 | 18/18 通过 |
# 无需 npm install,Node >= 18 直接运行:
node scripts/trae-cli.mjs decrypt # 解密凭据(本地,无网络)
node scripts/trae-cli.mjs validate # 活性验证(2 次轻请求)
node scripts/trae-cli.mjs checkin # 签到状态(--claim 才领取)
node scripts/trae-cli.mjs models # 模型列表(2 次轻请求)
node scripts/trae-cli.mjs login-url # 网页授权登录 URL
node scripts/trae-cli.mjs refresh --yes # 轮换凭据并写回 storage.jsonnpm install
npm run phase6 # 解密验证(本地,无网络请求)
npm run dev -- models # token 活性 + 模型列表(共 3 次轻请求)
npm run dev -- checkin # 每日签到
npm run dev -- login # 浏览器授权登录(agent-browser 打开授权页,人工授权一次)
npm run dev -- refresh # 轮换 token(请先关闭 TRAE!会轮换凭据,非必要不执行)
npx vitest run # 18/18 通过⚠ 克制原则:
models是验证用最小请求集(3 次轻请求);refresh会轮换凭据、checkin会领取积分——频率过高会触发风控导致账号异常。
| 阶段 | 目标 | 关键发现 |
|---|---|---|
| 1. 侦察 | 框架/版本/数据目录 | Electron + VS Code fork,解包目录 |
| 2. 数据收集 | 定位凭证存储 | storage.json 在 globalStorage/ |
| 3. 格式分析 | 熵值与魔数 | 自定义 byteCrypto 信封(非 DPAPI) |
| 4. 加密识别 | 定位加密代码 | out/main.js byteCrypto 模块 |
| 5. 密钥提取 | 获取 pepper 表 | 4 张 64B 表,锚点随版本轮换(双锚点候选:旧 Em=async / 新 userStorage.js 模块路径) |
| 6. 解密验证 | 解密 + API 测试 | 4/4 解密成功,loginAllowed:true |
| 分类 | 认证头 | 可用 | 总数 |
|---|---|---|---|
| iCube | x-icube-token |
8 | 23 |
| UG/增长 | Cloud-IDE-JWT + x-device-id |
2 | 17 |
| Cloudide | x-cloudide-token |
7 | 36 |
| Connector | Cloud-IDE-JWT |
1 | 9 |
| GTM | Cloud-IDE-JWT |
0 | 4 |
① 核心 IDE → 远程环境、项目、MCP、技能、聊天会话
② 账号体系 → 登录/设备绑定/OAuth/第三方集成
③ 商业化 → 支付/套餐/权益/积分计费
④ 增长体系 → 每日签到/活动/裂变/邀请码
⑤ 内容生态 → 模板/素材/Agent 分享
⑥ 企业集成 → 飞书/Connector/Supabase/Vercel
⑦ 运营配置 → 动态配置/特性开关/通知偏好
⑧ 设计可视化 → HTML→Figma/设计库/可视化编辑器
⑨ 扩展市场 → 插件/技能/Agent 发布与管理
⑩ IM 桥接 → 飞书/企业消息桥接
偏移 长度 内容
0 6 header = 74 63 05 10 00 00 ("tc" + ver5 + 0x10)
6 32 random(crypto.getRandomValues)
38 n*16 AES-128-CBC(key, iv, SHA512(plaintext) || plaintext)
密钥派生:pepper = Vie[i] ^ Qie[i] → derived = SHA512(SHA512(random) || pepper) → key = derived[0:16], iv = derived[16:32]
端点双候选(2026-10 对齐 modelmux 实测):新 https://api.trae.com.cn/cloudide/api/v3/trae/oauth/ExchangeToken 优先,旧 https://api.trae.cn/trae/api/v3/oauth/ExchangeToken 自动回退。请求体:
{
"ClientID": "en1oxy7wnw8j9n",
"RefreshToken": "<当前>",
"DeviceInfo": { "DeviceID": "...", "PlatformCode": "SOLO_PC", ... },
"DeviceProof": {
"Signature": "<ECDSA P-256 SHA-256 base64>",
"Timestamp": "<unix 秒>",
"Nonce": "<32 位 hex>"
}
}签名原文(path 按当前尝试的端点计算):"POST\n<path>\n<ClientID>\n<RefreshToken>\n<Timestamp>\n<Nonce>"
发现的 3 个坑:
x-cloudide-token必须为空字符串、DeviceProof字段名必须 PascalCase、DeviceInfo指纹必须与注册时一致。 注意:网页授权凭据(login命令产物)与 IDE 本地解密凭据不同源——前者刷新用简化 body(无设备签名),见traeUpstream.ts。
iCube:user, notifications/preferences, avatar/random, report/token, showcase/list, templates/list, templates/favorites, templates/scenes
UG:checkin_credits/status, checkin_credits/claim
Cloudide:GetUserInfo, CheckLogin, CheckPay, GetUserEmailSuffix, GetUserSupabaseToken, GetUserVercelToken, oauth/GetRefreshToken
Connector:GetFeishuPermissionTree
src/
├── index.ts ← CLI(11 个命令)
├── phase1-reconnaissance/index.ts
├── phase2-data-collection/index.ts
├── phase3-format-analysis/index.ts
├── phase4-encryption-id/
├── phase5-key-extraction/
├── phase6-decryption/
│ ├── byteCrypto.ts ← 核心:信封 + 表提取(双锚点候选)
│ ├── traeClient.ts ← ExchangeToken(双端点)+ 签到客户端
│ ├── traeUpstream.ts ← 登录 URL + GetUserInfo + 模型请求
│ ├── flows.ts ← checkin/refresh/models 编排
│ ├── decryptTraeAuth.ts ← 批量解密
│ └── validate.ts ← API 验证
└── utils/
├── entropy.ts | magic.ts
└── paths.ts ← 运行时路径动态解析(无硬编码)
docs/ ← 全部文档(已脱敏)
output/ ← 敏感数据(gitignore)
scripts/ ← 辅助脚本(12 个)
tests/ ← 18 个测试
| 文档 | 内容 |
|---|---|
docs/FINDINGS.md |
完整算法分析(byteCrypto、ExchangeToken、签到) |
docs/FLOW.md |
全流程手册 |
docs/PATH-HARDENING.md |
硬编码路径治理(动态解析改造记录) |
docs/phase6-decryption/API-REFERENCE.md |
89 个 API 端点测试 含认证详情 |
docs/phase6-decryption/API-DOMAINS.md |
14 个业务域分类 |
docs/phase1~6-*/RUN-LOG.md |
各阶段执行记录 |
docs/README.md |
脱敏规范与目录状态 |
- 文档中所有敏感值按
docs/README.md规范脱敏 - 原始凭证在
output/目录(gitignore) - token 续期会轮换 refreshToken —— 运行
refresh前请关闭 TRAE - 本项目仅用于对自己机器和凭证的安全研究
MIT