feat(huya): hyCred签发链侦察 - saveLoginData落盘捕获+长连接消息族定位
- 证实cred长寿命(晨间cred午后仍有效), 每账号一次采集即可 - 密码登录响应不含cred; 签发走cdn.wup长连接(MsgRequestLgnCred族) - getCred纯本地读; 落盘链: saveLoginData->JSON->AES->writeFileEx - 三路线评估: A混合采集(可用)/B wsapi复刻/C长连接复刻, 下次从笔记抓手继续
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# 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 试探。
|
||||
Reference in New Issue
Block a user