docs(huya): 新增总览去困惑地图 + 代码风险标记 + 真机 Frida 稳定注入通道

- docs/HUYA_APP_OVERVIEW.md: 整体流程/三形态hdid区分/登录入口盘点/随机化矩阵/风险清单/真机Frida现状
- core/huya 各模块 docstring 加风险标记与 hdid 名称混淆提示, 指向总览
- tools/app_login_flow 标注已过时(未接注册链), tools/huya_device_profile 标注与 core 策略关系
- scripts/phone_stable_capture.py + diag_phone_lifecycle.py: 真机 spawn+art_callsite 稳定抓帧/四组诊断
- evidence/diag_phone/: 真机基线/attach/稳定抓帧实验证据 (90s 存活无 EGL 崩)
This commit is contained in:
yml2213
2026-08-28 10:44:56 +08:00
parent 49c5c36c05
commit 45b5e9128c
13 changed files with 955 additions and 2 deletions
+5
View File
@@ -12,6 +12,11 @@
当前继续使用已注册样本;新注册链动态更新的是 safedeviceid 和 device_id。
注册链(``core/huya/dfp_register``)每次登录前执行,失败即抛错终止(``HuyaAppLoginError``),
不读取画像里的旧固定值,也不静默回退旧链。
⚠ 风险与边界(详见 ``docs/HUYA_APP_OVERVIEW.md``):
- hdid 全账号固定共享 -> 服务端可设备维度关联账号;
- 滑块 UA / session / traceId 用金样本常量 -> 与随机机型画像不自洽;
- qr_auth(扫码)/dx_auth(短信) 无自动闭环 -> 碰上直接失败(QR_AUTH_REQUIRED)。
"""
from __future__ import annotations
+1 -1
View File
@@ -32,7 +32,7 @@ class HuyaSdidResult:
"""sdid 获取结果。"""
sdid: str = ""
hdid: str = "" # df/collect 同响应下发的 40hex 设备ID; 与 WUP 登录的 32hex hdid 非同一体系
hdid: str = "" # df/collect 同响应下发的 40hex 设备ID; 与 WUP 登录的 32hex hdid 非同一体系(见 docs/HUYA_APP_OVERVIEW.md §二)
source: str = ""
message: str = ""
+5
View File
@@ -6,6 +6,11 @@
``safedeviceid``RSA action 令牌)与登录帧 ``device_id`` 由
:mod:`core.huya.dfp_register` 在每次 WUP 登录前经新设备注册链实时签发,
不再写入画像,也不再允许任何固定金样本令牌被多账号复用。
⚠ 字段状态速览(详见 ``docs/HUYA_APP_OVERVIEW.md`` §四):
- 随机: fingerprint / 机型 / 屏幕 / 宽高 / device_id(画像侧)
- 固定: hdid(32hex 硬锚,全账号同一) / app_version / sdk_version
- 动态签发: safedeviceid、登录帧 device_id。
"""
from __future__ import annotations
+5
View File
@@ -13,6 +13,11 @@
错误语义: 链上任何一步失败(模板缺失/损坏、HTTP 异常、响应缺字段)都会抛
``DfpRegistrationError``。调用方(core/huya/app_login)应把注册失败当作明确失败
终止登录;禁止静默回退到画像里的旧固定 safedeviceid/device_id。
⚠ 名称混淆提示(详见 ``docs/HUYA_APP_OVERVIEW.md`` §二):
- 这里签发的 t2 = 登录帧 safedeviceid、t5 = 登录帧 device_id40hex);
- 登录帧 t1.t0 的 32hex hdid 是另一体系(libhydeviceid.so 设备ID,服务端硬锚),
本模块 ``_random_triple`` 里的 64hex "hdid" 只是随机 cw 的 JSON 占位,非真身份。
"""
from __future__ import annotations
+1 -1
View File
@@ -179,7 +179,7 @@ def _build_wup_data(w: _Writer, uid_str: str, sha1_password: str,
# -- t1: 设备信息 struct --
di = device_info
w.struct_begin(1)
w.string(0, hdid)
w.string(0, hdid) # t1.t0 = 32hex 设备ID (libhydeviceid.so 硬锚, 不可随机/换, 换→APP_SIGN_NOT_MATCH)
w.string(1, di.get("app_version", "13.4.22"))
w.string(2, di.get("sdk_version", "1.0.80138"))
w.string(3, "")