Files
live-hub-py/docs/虎牙hyCred签发-侦察笔记.md
T
yml2213 d24666ab2a feat(huya): hyCred签发链侦察 - saveLoginData落盘捕获+长连接消息族定位
- 证实cred长寿命(晨间cred午后仍有效), 每账号一次采集即可
- 密码登录响应不含cred; 签发走cdn.wup长连接(MsgRequestLgnCred族)
- getCred纯本地读; 落盘链: saveLoginData->JSON->AES->writeFileEx
- 三路线评估: A混合采集(可用)/B wsapi复刻/C长连接复刻, 下次从笔记抓手继续
2026-08-25 16:07:33 +08:00

50 lines
3.2 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.
# hyCred 签发协议 — 侦察笔记(2026-08-25 傍晚)
> 目标:任意账号取得有效 hyCred(114B),配合 tools/cert_forge 实现全自动多账号。
> 当前状态:**铸证已闭环**(见《虎牙证书算法闭环-差分实证.md》),本文记录签发链侦察结果。
## 已确认事实
1. **cred 是长寿命凭证**:早上抓的 hyCred 在下午(且中间用户重新登录过一次后)
依然能通过 bind 铸证(实验C)。=> 每账号只需采集一次,非会话级短时效。
2. **cred 每次登录轮换值但旧的仍有效**:今晨 `0a80a762...` ≠ 午后 `0a50ec12...`,两者均可用。
3. **密码登录响应不含 cred**`evidence/wup_response_login.bin`(1514B) 无 114B/152b64 结构。
4. **cred 存于本地登录态文件**`BusinessCfg::saveLoginData` (@0x265fb0 / 0x265a6c)
-> JSON(含"cred"字段) -> UdbAESUtil AES 加密 -> `UdbFileUtil::writeFileEx` 写盘。
`BusinessCfg::getCred(uid)` @0x265524 纯本地读(UdbLock+日志),无网络。
5. **签发走 cdn.wup.huya.com 长连接隧道**HAR 里只有 CONNECT,载荷不可见;
相关消息族符号齐全:
- `MsgRequestLgnCred` / `MsgResponseLgnCred`(请求/响应)
- `HandlerRequestLoginCred`(@0x3a1820) / `HandlerResponseLoginCred`(@0x3a182c)
- 已知方法: `handlerCredLoginOverTimeMsg` @0x3a00d0
- `UdbObjCreator_Msg{Request,Response}LgnCred``AppLgnCredentialLoginReq/Resp`(wup JCE)
- `MsgGetCred`/`HandlerGetCred`、Anony 变体、`MsgResponseUpdateCred`
6. **dckey/check ≠ hyCred**udbdf.huya.com/dckey/check 返回设备钥 dckey
(固定前缀 AAAAAMC1eP4iV43WYoI57ZOu0),与账号 cred 不同物。
## 本次抓取(evidence/cred_issue_trace.json
用户重登时捕获 saveLoginData bean 内存头:
`..."hy_300023887"...len前缀"1199666914671"..."4C5fozan"...`
bean 为 BusBeansLoginData 结构体,cred 字段在更深偏移,待下次 dump 全量)
vtable 探测结论:slot2/3 是析构/通用槽(打中 MsgLoop::doMSG/sendMessage),
真正 onHandler 未命中 —— 下次应挂 `ResponseMsgHandler` 派生 onHandler 或
直接挂 `hyudb_packet_util::cred_pack/cred_unpack`(@0x333170) 收发两端。
## 三条候选路线(按性价比)
| 路线 | 做法 | 成本 | 备注 |
|---|---|---|---|
| A 混合采集(立即可用) | 手机登目标号一次,Frida 自动抓 cred 入库;此后该号永久全自动铸证 | 低 | 已验证可行,脚本齐备 |
| B wsapi 短连接复刻 | 若 MsgRequestLgnCred 可经 huyaudbwebui servant 走 wsapi.huya.com HTTPS | 中 | 需 msgId+JCE 结构+OTP加密链(已有) 组包试验 |
| C 长连接完整复刻 | 实现 cdn.wup.huya.com WSP 握手/心跳/加密隧道 | 高 | 最后手段 |
## 下次继续的抓手
1. 重跑 hook_cred_issue.py 增强版:saveLD_bean dump 640B 定位 cred 字段偏移 +
backtrace 10 帧(找推送来源 handler+ 挂 `cred_unpack`@0x333170 抓网络侧明文。
2. 静态:`MsgRequestLgnCred::getClassName`@0x2a37d0 / 各消息 getClassName 取类名串,
在 rodata 找 类名→msgId 表(参考 MsgGetH5InfoEx=184549387 的命名规律)。
3. 若走 B:用 tools/huya_wup_encoder.py 的信封 + OTP 加密链组 RequestLgnCred 发 wsapi 试探。