统一虎牙 App 登录设备画像

This commit is contained in:
yml2213
2026-08-30 23:04:28 +08:00
parent bc02018719
commit f4ed518b50
6 changed files with 281 additions and 119 deletions
+15 -12
View File
@@ -21,20 +21,24 @@ Web UI 通过 `web/backend/routers/huya.py` 调用它。
```
┌──────────────────────────────────────────────────────────────────────┐
│ 每次 WUP 登录前 │
│ ① 新设备注册链 core/huya/dfp_register.register_device()
│ ① 读取/创建账号设备画像 core/huya/device_profile.get_profile()
│ 同一账号复用 vendor/model/screen/width/height/fingerprint/guid32 │
│ │
│ ② 新设备注册链 core/huya/dfp_register.register_device() │
│ getDfpConfig → selectOperator → dfpReport(随机cw) │
│ 返回 (t1, safedeviceid, device_id) ← 全新,非画像旧值
三步请求的设备字段均来自①,返回 (t1, safedeviceid, device_id) │
│ 返回字段为本次登录专用的新令牌,非画像旧值 │
│ 失败 → 抛 DfpRegistrationError → HuyaAppLoginError,终止,不回退 │
│ │
WUP 密码登录 wup_password_login_raw() │
WUP 密码登录 wup_password_login_raw() │
│ POST wup.huya.com hypasswordLoginsafedeviceid/device_id 用①的)│
│ ├─ 正常 → 解出 114B cred + 真实 uid │
│ └─ pt_auth 滑块 → solve_safe_auth() 自动过验 → 重发登录(≤3轮) │
│ │
本地铸证:nonce_forge(uid+k1) → cert_forge 铸证书 → envelope_forge │
本地铸证:nonce_forge(uid+k1) → cert_forge 铸证书 → envelope_forge │
│ 补丁 WUP 信封(证书 + UID) │
模拟扫码绑定四步流 QrRolegetQrId→scan→bind→tryQrLogin)→ biztoken│
POST /web/cookie/verify 兑换 → 全套网页 Cookie │
模拟扫码绑定四步流 QrRolegetQrId→scan→bind→tryQrLogin)→ biztoken│
POST /web/cookie/verify 兑换 → 全套网页 Cookie │
└──────────────────────────────────────────────────────────────────────┘
```
@@ -91,8 +95,8 @@ Web UI 通过 `web/backend/routers/huya.py` 调用它。
| fingerprint | **随机**(每账号) | `generate_profile` sha1 | 低 |
| 机型 / 屏幕 / 宽高 | **随机**(每账号从 `REAL_MODELS` 选) | `generate_profile` | 低 |
| app_version / sdk_version | **固定** | 常量 `13.4.22` / `1.0.80138` | 低(需与 hdid 配套) |
| 滑块 UA | **固定** 小米 M2102J2SC | `app_login.APP_UA_MOBILE` | ⚠ 与随机机型画像不一致 |
| session / traceId / 登录行为 JSON | **固定金样本** | `_golden_session_assets()` | ⚠ 多账号相同,异常画像 |
| 滑块/扫码 WebView UA | **按画像派生** | `device_profile.mobile_user_agent()` | 与机型/厂商/系统版本一致 |
| session / traceId / 登录行为 JSON | **每次请求动态** | `wup_encoder.make_*` + `_golden_session_assets()` | 仅协议字段固定结构 |
| QrRole context / reqid / page_id | **随机** | `QrRole`uuid/random | 低 |
---
@@ -100,10 +104,9 @@ Web UI 通过 `web/backend/routers/huya.py` 调用它。
## 五、风险与未解决项(诚实清单)
1. **hdid 固定共享** → 服务端可在设备维度把多个账号关联起来(见 §2 #1)。纯代码无法铸造新 hdid;换掉即 `APP_SIGN_NOT_MATCH`
2. **滑块 UA / session / traceId 固定** → 与随机机型画像不自洽,长期易形成异常画像
3. **qr_auth / dx_auth 无自动闭环** → 碰上直接失败(`QR_AUTH_REQUIRED`
4. **无稳定性数据** → 没有 20/50/100 次连续成功率、多账号/IP/时段矩阵
5. **Frida attach 主进程必被 msaoaidsec 杀**(真机/模拟器均实测)→ 见 §六。
2. **qr_auth / dx_auth 无自动闭环** → 碰上直接失败(`QR_AUTH_REQUIRED`
3. **无稳定性数据** → 没有 20/50/100 次连续成功率、多账号/IP/时段矩阵
4. **Frida attach 主进程必被 msaoaidsec 杀**(真机/模拟器均实测)→ 见 §六
---