feat(huya): 🏆 appSign(t1.t0)算法完全破解 — ed0db8逐字节复现 (R15)
公式: appSign = MD5(appId + '_' + appVersion + '_' + k1)
金样本: MD5('5008_13.4.22_865a4924a40897ac1fcfe6b4c2cbb0e3') = ed0db8334cadd236c00cadf7e11ab5a5 ✅
发现链路: createWupProtoInfo@0x273f1c反汇编 -> HuyaMd5(全局单例3串@0x484000+0xe0) -> frida实机读串(5008/13.4.22/k1) -> toString直出ed0db8 -> python标准md5复现
- 修改: hook_otp_capture.js(+appsign/huya-md5 hook, SSO/LONG修正, tostr-hex/ctor-hex)
- docs §11.45: 完整公式+发现链路+结构性解释+工程意义
This commit is contained in:
@@ -1036,3 +1036,39 @@ hypasswordLogin/MsgLoginReq/LogLoginReq → mid 各异, tail 恒定 8b38f1 → a
|
||||
### 5) 下一步 (appSign 真源)
|
||||
- 反汇编登录 WUP 构建器 createWupRequestData<AppCommonData>@0x38dab0 → ProtoInfo.appSign 填充点 → 找 32hex getter
|
||||
- 或 frida 全 hook BusinessCfg 设备 getters + setDeviceInfo 链直接读 appSign 来源
|
||||
|
||||
---
|
||||
|
||||
## ★ §11.45 R15: 🏆 appSign(t1.t0) 算法完全破解 — ed0db8 逐字节复现 (2026-08-29)
|
||||
|
||||
### 公式 (实机全链捕获 + 复现验证)
|
||||
```
|
||||
t1.t0 appSign (32hex, "hdid") = MD5( appId + "_" + appVersion + "_" + k1 )
|
||||
金样本: MD5("5008_13.4.22_865a4924a40897ac1fcfe6b4c2cbb0e3")
|
||||
= ed0db8334cadd236c00cadf7e11ab5a5 ✅ 逐字节命中
|
||||
```
|
||||
- appId = "5008" (byte-appId), appVersion = 版本名 ("13.4.22"), k1 = BusinessCfg+0x10 设备钥 (865a49...cbb0e3)
|
||||
- 与网页 appSign 公式同族: web=md5(appId+vCode+k1)[:8] (60576904) — native 用版本名+完整32hex
|
||||
- HuyaMd5 类 = 标准 MD5 封装 (实机 toString 输出 = ed0db8 直接命中)
|
||||
|
||||
### 发现链路 (本轮)
|
||||
1. createWupProtoInfo(ProtoInfo&)@0x273f1c 反汇编 → appSign = HuyaMd5(拼接串) — 3 个全局单例串 @base+0x484000+0xe0 (+0x10/+0x28/+0x40)
|
||||
2. frida 读全局串: "5008" / "13.4.22" / k1 (SSO 旗标字节混读修正后)
|
||||
3. HuyaMd5::toString() 实机输出 = **ed0db8334cadd236c00cadf7e11ab5a5** (WUP 公共帧构建时触发, 无需登录)
|
||||
4. python: md5("5008_13.4.22_865a4924a40897ac1fcfe6b4c2cbb0e3") = ed0db8 ✅
|
||||
|
||||
### 结构性解释 (与 R14 证伪一致)
|
||||
- appSign 只依赖 {appId, appVersion, k1} — 无账号输入 → **跨账号稳定** ✓ (device_profiles 多账号共用)
|
||||
- k1 = 设备级键 (dfp t1/ channelKey 同族: cbb045/cbb0e3) → 版本更新则 appSign 变化 → 服务端按版本校验
|
||||
- 与 web appSign 公式同族: web=md5(appId+vCode+k1)[:8] (60576904) — native 用版本名+完整32hex
|
||||
- OTP 链 (getOtp) = 账号级 (s5=cred) — 与 appSign 职责分离 ✓
|
||||
|
||||
### 工程意义
|
||||
- 制造任意 (appVersion, k1) 组合的合法 appSign — 登录帧 t1.t0 可自铸
|
||||
- 现有多账号方案 (金样本 hdid/shareConfig) 可升级为"按设备钥动态计算"
|
||||
- 设备身份 (dfpReport 加密体) 仍是仅剩的铸造缺口 (#2)
|
||||
|
||||
### 工具/证据
|
||||
- tools/frida/hook_otp_capture.js: createWupProtoInfo@0x273f1c + HuyaMd5C1/toString 全链 hook
|
||||
- capture_20260829_054317.jsonl: ctor inHex=353030385f31332e342e32325f383635... (5008_13.4.22_k1) + tostr=ed0db8...
|
||||
- 复核: md5("5008_13.4.22_865a4924a40897ac1fcfe6b4c2cbb0e3") = ed0db8334cadd236c00cadf7e11ab5a5 ✅
|
||||
|
||||
Reference in New Issue
Block a user