Files
live-hub-py/docs/虎牙纯Python全自动登录-总结与交接.md
T

76 lines
4.5 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.
# 虎牙纯Python全自动登录 — 总结与交接(2026-08-25
## 一、已达成 ✅(全部实测验证)
### 核心链路(可信账号,零设备零手动)
```
账号+密码
→ SHA1
→ build_password_login_wup() 组TAF包 (servant=huyaudbwebui, func=hypasswordLogin)
→ POST https://wup.huya.com [body=原始TAF字节, CT=application/multipart-formdata]
→ HTTP 200 → 解析响应bean → 新鲜cred(114B, 0a开头, 每次登录轮换)
→ cert_forge.build_p1(fingerprint + 新nonce + cred) → forge_cert(key_idx=0x20)
→ 扫码绑定流 getQrId→scanQrPicNotify→bindQrLoginUser→tryQrLogin
→ POST /web/cookie/verify {"appId":5002} ← 关键最后一步!
→ 全套网页Cookie: udb_cred/yyuid/udb_uid/udb_passport/username/udb_biztoken...
```
### 一键工具
| 命令 | 功能 |
|---|---|
| `.venv/bin/python tools/full_web_cookie.py <账号> <密码>` | 密码→全套网页Cookie(写 evidence/web_cookies_full.txt|
| `.venv/bin/python tools/full_auto_safe.py <账号> <密码>` | 同上, 且新账号safe_auth滑块自动过 |
| `.venv/bin/python tools/full_auto_test.py <账号> <密码>` | 密码→cred→铸证→bind 全链路自测 |
## 二、关键知识(踩坑实录)
1. **wupData信封规则(v2实验定论)**: ①铸证必须复用信封原证书的rnd/指纹/key_idx,
仅替换cred字段——纯随机nonce必40020; ②t3.uid须与cert内cred账号一致;
③session三处不可动(SYS_ERROR); ④同账号信封长期可复用;
⑤跨账号=每号设备首登一次(hook_cert_keycap自动抓该号信封)后永久纯Python。
补丁工具 tools/envelope_forge.py (patch_uid/patch_cert/patch_session)。
2. **cred每次登录轮换**,第二字节是代次计数器(0x10/0x20/.../0x80循环);旧cred短期仍有效。
3. **响应bean解析**_wup_data值=SIMPLE_LIST(0x1d)+elem头(00)+JCE优化int长度;
bean内 tag3(bytes)=cred。虎牙TAF类型表: STR1=6/STR4=7/MAP=8/LIST=9/
STRUCT_BEGIN=10(0xa)/STRUCT_END=11(0xb)/ZERO=12/SIMPLE_LIST=13。
4. **udb消息载荷=JSON命名键**(非二进制JCE)msgId: LoginPassport=0x1001,
Response=0x2001; wire双体系: 0x0Bxxxxxx业务推送族 vs udb裸id。
5. **证书算法**=标准AES-128-ECBP1=[01 04]["5008"][u16le20+20B nonce][u16le40+40B指纹][u16le114+cred]
cert=b64([0x0C][key_idx][AES128(key16,zeropad(P1))]);钥表@rodata 0x1bc810(AESkeyMgr注册)。
6. **存储侧**: cred0文件=AES-128-ECB("HuyaUdb192837465")加密的JSON
cred路径 /loginHistory[0]/apploginData/cred。
## 三、新账号风控(safe_auth)——已实现 ✅(2026-08-25夜)
### 定性与实现
- App渠道(WUP)对新/异地账号返回 `aq.huya.com/p/safe_auth/pt_auth.html?param=xxx`
**udbrtt.huya.com 滑块** → tools/app_login_flow.login_cred() 自动过验并重发WUP
- pt_auth页JS逆向结论: urlParamMap=整个query原样回传; wupData纯web上下文空串可过;
gurl取图ver:5, segment=UdbCipher.decrypt乱序还原表; vurl提交act=UdbCipher.encrypt;
成功后服务端标记param风控会话通过, 直接重发同参WUP登录即放行。
- qr_auth(扫码型)明确不可自动化 → QrAuthRequiredError 提示先真机首登建信任。
### 残留优化项(非阻塞)
1. 数小时前老信封复用边界未单独验证(E-B)——不影响主流程, 失败则hook重抓即可
2. 完全零设备跨账号需逆向nonce签发机制, 收益低(运营模型本就要求每号设备首登一次)
## 四、多账号运营模型
```
新账号首次: 手机App正常登录一次(建设备信任, 若遇滑块人工滑一下)
+ 设备上跑 scripts/hook_cert_keycap.py 抓该号信封(cert_keycap.json)
之后永久: 密码 → full_auto_safe.py → 全套cookie 自动出
```
## 五、资产清单
- 组包: tools/huya_wup_encoder.py (build_password_login_wup, 自检对金样本)
- 登录流: tools/app_login_flow.py (login_cred/solve_safe_auth, safe_auth滑块闭环)
- 铸证: tools/cert_forge.py (build_p1/forge_cert/parse_p1)
- 信封: tools/envelope_forge.py (Envelope原位补丁uid/cert/session)
- 绑定: scripts/probe_forge_cert_bind.py (QrRole四步流+cert替换)
- 实验: scripts/probe_envelope_rules2.py (信封规则X0-X3紧凑对照)
- 网页登录: core/huya/login.py (含滑块solver集成, web渠道)
- 滑块: core/huya/verification/{solver,track}.py + core/geetest/v3_slide
- 设备指纹: core/huya/device_fingerprint.py (get_huya_sdid)
- 证据: evidence/* (金样本wup_passwordlogin_taf.bin, envelope_rules2.json等)
- 协议细节全记录: docs/虎牙hyCred签发-侦察笔记.md (按Round追加)