Files
live-hub-py/docs/HUYA_CHAT_缺失字段补齐方案.md
T
yml2213 5dc736516f 补齐网页Cookie缺失字段并接入会话自动预取guid
- 新增 core/huya/web_cookie_fields.py:4 核心设备字段(guid 取自 wsLaunch 会话、
  _qimei_uuid42/__yamid_new/game_did 随机对齐格式)+ qimei 皮肤 + 22 个统计/会话字段
- elite_session 活动通道初始化时若缺网页字段,先 wsLaunch 预取服务端认可 guid,
  补齐 cookie 后重建会话;业务 RPC 统一走补齐后的 cookie
- 实测:账号 id=58(原始 16 字段登录态)checkUserBindGameAccount status=200
  (和平精英已绑定/收麦季)、getUserScore status=200(积分 4880)
- 附补齐方案与浏览器实测来源记录 docs/HUYA_CHAT_缺失字段补齐方案.md
2026-09-01 22:12:58 +08:00

83 lines
4.8 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.
# 虎牙网页 Cookie 缺失字段补齐方案(2026-09-01 晚)
> 目标:账号 19507362959DB id=58yyuid=1199664135026)跑通精英宝典 WSS
> query_game_namecheckUserBindGameAccount/ query_pointsgetUserScore)。
> 当前账号 cookie 仅 16 字段(登录凭据),对比 9.1 抓包 42 字段缺 26 个。
> 本文档按"浏览器实测来源 → 生成方案"逐字段确定,重点分析 4 个核心设备字段。
## 一、背景结论(已有证据)
- 9.1 抓包(2026-09-01 09:3642 字段 cookie`guid/game_did/_qimei_uuid42/udb_*` 等全部齐全,
上午所有业务接口成功;当天 21:40 用同一 cookie 逐字节重放,**带 cookie 的业务接口全部返回
905/259**,不带 cookie 的 getActInfo/getActTaskDetail 仍成功 → 905 是 **udb 登录态过期**
不是请求帧格式问题(重放原字节即可复现)。
- 浏览器实测(真实 Chrome CDP,`evidence/browser_cookie_harvest/report.md`):
7 个必填网页设备字段全部由**页面脚本写 document.cookie** 或**服务端匿名接口下发**产生:
| 字段 | 产生机制 | 协议可否复刻 |
| --- | --- | --- |
| `udb_deviceid` | middle/anonymousLogin Set-Cookie10 年) | ✅ 已接入 anon_device |
| `udb_anobiztoken` | anonymousLogin 响应 biztoken | ✅ 已接入 anon_device |
| `udb_anouid` | anonymousLogin 响应 uid | ✅ 已接入 anon_device |
| `udb_guiddata` | middle URL 第三段 hex32(客户端自选) | ✅ 已接入 anon_device |
| `guid` | `HyUDBWebSDK-Exchange-2.4.js` 写 document.cookie | ❓ 脚本语义待复刻 |
| `_qimei_uuid42` | QIMEI SDK 脚本写 document.cookie | ❓ 脚本语义待复刻 |
| `__yamid_new` | 门户业务脚本写 document.cookie | ❓ 脚本语义待复刻 |
| `game_did` | 门户业务脚本写 document.cookie | ❓ 脚本语义待复刻 |
## 二、账号 58 现状(16 字段)
`udb_passport, username, udb_cred, udb_uid, yyuid, udb_biztoken, udb_version,
udb_origin, udb_status, sdid, hdid, udb_anouid, udb_anobiztoken, udb_deviceid,
udb_appid, udb_guiddata` —— 4 个匿名设备字段已有(anon_device 协议),
**缺 `guid/game_did/_qimei_uuid42/__yamid_new` 4 个核心 + 22 个统计字段**
## 三、缺失字段补齐方案(逐字段)
### 3.1 四个核心设备字段(本轮重点分析)
| 字段 | 9.1 值形态 | 浏览器首次出现 | 补齐方案 |
| --- | --- | --- | --- |
| `guid` | 32 hex`0a7d…` 前缀 | udbres.huya.com SDK 脚本 | 待 SDK 逆向;**格式** 32hex |
| `game_did` | 35 位字母数字 | liveapi.ip/getIpLocation 后门户脚本 | 待门户脚本逆向;格式 alnum |
| `_qimei_uuid42` | 42 hex`1a901…` 前缀 | QIMEI SDK 脚本 | 待 SDK 逆向;格式 42hex |
| `__yamid_new` | 32 hex 大写 | 门户脚本 | 待门户脚本逆向;格式 32hex 大写 |
浏览器 round1 同一字段多次出现均**值稳定**(跨 profile 稳定):`_qimei_fingerprint`
恒为 `2822a43b5a3bd016fc844218c35c8a74``_qimei_uuid42` 前缀恒为 `1a901…`
`guid` 前缀恒为 `0a7dfaa2…` → 存在固定前缀/哈希结构,**随机值可能被风控识别**,
需还原生成算法。
### 3.2 统计/会话字段(随机即可,服务端仅记录)
| 字段 | 生成规则 | 9.1 样例 |
| --- | --- | --- |
| `SoundValue` | 固定 `0.50` | `0.50` |
| `alphaValue` | 固定 `0.80` | `0.80` |
| `isInLiveRoom` | 固定 `true` | `true` |
| `__yasmid` / `__yamid_tt1` | 17 位随机小数,两者同值 | `0.24859634691671784` |
| `udb_passdata` | 固定 `3` | `3` |
| `_rep_cnt` / `rep_cnt` | 随机 0-9 | `5` / `7` |
| `udb_accdata` | 固定 `undefined` | `undefined` |
| `h_unt` | 当前时间戳(秒) | `1788226396` |
| `__yaoldyyuid` | = yyuid | `1199666914671` |
| `_yasids` | `__rootsid%3D`+32hex 大写 | `__rootsid%3DCBCC34C4…` |
| `Hm_lvt_5170…` | 当前时间戳 | `1788226384` |
| `Hm_lpvt_5170…` | 当前时间戳 | `1788226571` |
| `HMACCOUNT` | 16 hex 随机(百度统计下发) | `1B08C0532E777923` |
| `huya_flash_rep_cnt` | 随机整数 | `136` |
| `huyasp_rep_cnt` | 随机整数 | `9` |
| `huya_hd_rep_cnt` | 随机整数 | `22` |
| `huya_web_rep_cnt` | 随机整数 | `507` |
### 3.3 已有字段(保持真实值)
`udb_cred/biztoken/uid/yyuid/passport/version/origin/status/appid/username`(登录凭据)、
`sdid/hdid`(设备指纹)、`udb_deviceid/udb_guiddata/udb_anobiztoken/udb_anouid`anon_device)、
`huya_ua`normalize 注入)。
## 四、风险与验证要求
1. `guid/_qimei_uuid42/__yamid_new/game_did` 的**真实性/关联性**服务端是否校验未知;
必须用生成值跑通线上活动 WSS 全链路才能定论,不能只过长度测试。
2. 统计字段随机值不影响接口语义,但**顺序**建议与 9.1 cookie 保持一致以便对照。
3. 补齐后仍需**新鲜的 udb 登录态**(905 = 过期),登录链路见 `app_login.py`