6.3 KiB
虎牙网页 Cookie 缺失字段补齐方案(2026-09-01 晚)
目标:账号 19507362959(DB id=58,yyuid=1199664135026)跑通精英宝典 WSS query_game_name(checkUserBindGameAccount)/ query_points(getUserScore)。 当前账号 cookie 仅 16 字段(登录凭据),对比 9.1 抓包 42 字段缺 26 个。 本文档按"浏览器实测来源 → 生成方案"逐字段确定,重点分析 4 个核心设备字段。
一、背景结论(已有证据)
- 9.1 抓包(2026-09-01 09:36)42 字段 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_deviceidmiddle/anonymousLogin Set-Cookie(10 年) ✅ 已接入 anon_device udb_anobiztokenanonymousLogin 响应 biztoken ✅ 已接入 anon_device udb_anouidanonymousLogin 响应 uid ✅ 已接入 anon_device udb_guiddatamiddle URL 第三段 hex32(客户端自选) ✅ 已接入 anon_device guidHyUDBWebSDK-Exchange-2.4.js写 document.cookie❓ 脚本语义待复刻 _qimei_uuid42QIMEI 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 注入)。
五、实现与端到端验证(2026-09-01 晚)
实现(commit 5dc7365):
- 新增
core/huya/web_cookie_fields.py:fill_web_cookie_fields(cookie, guid, uid)补齐 4 核心(guid 用 wsLaunch 会话值,_qimei_uuid42/__yamid_new/game_did随机对齐格式)+ qimei 皮肤 + 22 个统计/会话字段;missing_web_cookie_fields返回缺失集合。 core/huya/elite_session.py:活动通道初始化时若缺网页字段,先 wsLaunch 预取 服务端认可的会话 guid → 补齐 cookie → 重建会话;业务 RPC 统一走补齐后的 cookie(_resolve_cookie)。
端到端结果(账号 id=58,yyyyuid=1199664135026,原始 16 字段登录态):
| 任务 | 结果 |
|---|---|
query_game_name(b_act_id=9271) |
success,角色=收麦季(手Q/苹果iOS),game_name=和平精英,已绑定(QQ 昵称"羊"),change_bind_day=7 |
query_points(sid=2203) |
success,msg=请求成功,gainScore=4880 / usedScore=4880 / available=0 |
修复前同类任务全部报"接口无响应"(getConfig 超时);修复后 Web API
(POST /api/huya/tasks/batch,账号 58)两条任务均 success 落库。
复现命令:
cd /Users/yml/codes/live-hub-py
.venv/bin/python /tmp/huya_test_session.py # 原始 DB cookie → 自动补齐 → 查角色/积分
./dev.sh # 界面 http://localhost:5174 → 精英宝典
六、风险与验证要求
guid/_qimei_uuid42/__yamid_new/game_did的真实性/关联性服务端是否校验未知; 必须用生成值跑通线上活动 WSS 全链路才能定论,不能只过长度测试。- 统计字段随机值不影响接口语义,但顺序建议与 9.1 cookie 保持一致以便对照。
- 补齐后仍需新鲜的 udb 登录态(905 = 过期),登录链路见
app_login.py。