Commit Graph
24 Commits
Author SHA1 Message Date
yml2213 1afbd588a7 feat(huya): 复刻15/15全量实证 + DiffProbe上线 + C向量更正(ae26d0)
- 8组随机明文×随机钥逐字节命中 → 算法零残差
- appSign唯一未知: 钥=getkey双id派生材料(非裸24B)
2026-08-29 00:45:03 +08:00
yml2213 fda956beca feat(huya): 里程碑 - UdbAESUtil纯Python复刻成功(A/B/D三向量逐字节) + 登录帧t1=ProtoInfo(appSign槽=HDID32)
- tools/huya_aes_replica.py 617行逐指令复刻, AES-128变异(64B钥材用[0:16]+列链式扩展+移位吸收)
- 结构定案: t1 = {0:appSign=ed0db8! 1:appVer 2:sdkVer 3:lcid 4:clientIp 5:channel 6:countryCode}
- APP_SIGN错误名=appSign字段校验失败; 下步InvCipher直解明文
2026-08-29 00:37:56 +08:00
yml2213 71e28f3406 feat(huya): OTP中段公式实证 md5_char16(input∥getkey(1)派生) - 差分表+静态流落档 2026-08-29 00:15:53 +08:00
yml2213 c2b9954214 feat(huya): OTP差分定性 - 32hex尾=静态钥材料计算(非嵌入) + 中段=f(输入) 2026-08-29 00:13:02 +08:00
yml2213 92eb39cd9d feat(huya): OTP击穿 - arg语义(arg1=2) + 输出结构(0x03+可变+固定32hex尾8b38f1) - 32hex形态实锤 2026-08-29 00:11:52 +08:00
yml2213 ebdbd05217 feat(huya): md5_char16=MD5-hex中段16识别(非32hex本体) + 探针全家桶(encode_aes/md5/xxtea/otp可调) 2026-08-29 00:10:41 +08:00
yml2213 bc9d827a60 feat(huya): OTP组合链解码(xxtea+getkey+md5_char16+AES) - 32hex形态=md5_char16候选 + 复刻子代理在跑 2026-08-29 00:05:39 +08:00
yml2213 7249dd6909 feat(huya): unidbg encode_aes 探针上线 + 64B钥材料发现(AES变体非标)
- AesProbe.java: 直接调用 encode_aes, 权威差分源 (已知输入输出已记录)
- KeyExpansion 以16B步长读钥 → 64B材料; 标准AES对照 b1e3abcc≠ba3fb8f1 证变体
- docs §11.16
2026-08-29 00:01:00 +08:00
yml2213 b62ba48db7 feat(huya): 标准AES确认(SBOX逐字节一致) + 爆破总矩阵证伪 - HDID32=标准AES密文但钥材/明文/模式未定
- UdbAESUtil盒表=标准SBOX/INV-SBOX, KeyExpansion列主序Nk=6
- 88组合爆破零命中 → 下一轮unidbg差分或静态读encrypt路径
2026-08-28 23:46:23 +08:00
yml2213 96d75462a5 feat(huya): AESkeyMgr钥表按id注册定案(ZMHAVPRaxJ3MtXDjduUnXAKQ为首键) + encode_aes API解码 + 朴素AES爆破证伪
- C2@26fcc8=钥表构造: id1-4 键 VA 全定位
- encode_aes(IN,KEY,OUT) → UdbAESUtil(key).encrypt: 纯自研AES(KeyExpansion/Cipher自实现)
- 24B钥×多模式×10候选明文 与 ed0db8 零命中 → 密钥必经C1加工
2026-08-28 23:43:40 +08:00
yml2213 98201f9ef6 feat(huya): MD5派生证伪 + AESkeyMgr 16钥明文清单落档(C2装载=owNMiaCgcHmqoTr3iRamFuHj)
- 6 组合 md5/sha1 派生全 APP_SIGN (对照 ed0db8=cred) → 32hex≠无钥哈希
- libudbauthunify 钥表 VA 全定位 (C2@26fcc8 装载 owNMia..., KFWAH/4VYc/xXED/3FMH 族)
- evidence/mint/udb_keytable_24char.json
2026-08-28 23:37:18 +08:00
yml2213 e5aee00a9c feat(huya): jadx映射HDID32 Java链(NativeEntry.getHDID@0x20f0c8) + b()全语义表 + 签名锚定实验(仅HDID32锚,DEVID40自由)
- b(1)=5008/b(2)=ver/b(3)=1.14.68/b(107/108)=qimei → unidbg 桩补全
- 实验: 金样本hdid+随机DEVID40=1571B cred / 换hdid恒APP_SIGN
- docs §11.12
2026-08-28 23:27:36 +08:00
yml2213 eccc00e090 docs/code(huya): 设备标识符命名规范落地 - 全库HDID32/GUID32/DEVID40前缀化去混
- docs/HUYA_ID_NOMENCLATURE.md: 规范总表 + 三条强制规则 + 代码变量对应
- 4 篇主文档头部去混声明 + §11.x 被证伪假设行标注更正
- 代码: GOLDEN_HDID→GOLDEN_HDID32, device_profile.HDID→HDID32, wup_encoder/app_login 注释前缀化
- 后续所有表述必须以 GUID32(doLaunch) / HDID32(登录t1.t0) / DEVID40(t5) 前缀书写
2026-08-28 23:02:21 +08:00
yml2213 200130f8ce feat(huya): §11.11 标识符全清单去混 - 登录hdid(L1)与GUID(G1)体系无关定论(手机自身GUID也被拒), 32hex-hdid生成函数未定位
- 决定性实验: hdid=0a7dfa(手机当前GUID)→APP_SIGN / ed0db8→1571B cred
- 清单: G1/L1/D1/D2/D3/M1 六标识符逐一核实来源与可铸性
2026-08-28 22:50:49 +08:00
yml2213 de8959758b docs(huya): §11.10补充 - 登录hdid全链路不可见(无上行明文通道), 复刻需unidbg重放native签名 2026-08-28 22:42:04 +08:00
yml2213 64ae906514 feat(huya): 登录hdid隔离实验 - sGuid≠登录hdid证伪旧假设, 登录hdid=native私钥证书(APP_SIGN绑定hdid值)
- 原样重放金样本=1571B完整登录数据(R3今夜复现)
- 构建金样本hdid=1571B OK-data / 同构建铸币hdid=652B APP_SIGN (唯一变量=hdid)
- docs §11.10: 两套32hex体系澄清 + 登录证书两路径
2026-08-28 22:40:03 +08:00
yml2213 9ff572191c feat(huya): device_mint 铸币机编排器 + 登录链验收矩阵(铸币hdid→APP_SIGN/金样本→NEED_RISK)
- tools/device_mint.py: --mint-only/--login/--control/--matrix 全编排
- huya_launch_mint.mint_sguid(): 上线铸币函数
- docs §11.9: 接受度矩阵 + 边界精确化 (sGuid可铸/登录签名独立硬锚)
2026-08-28 22:31:30 +08:00
yml2213 ccfa742e3b feat(huya): 铸币机打通 - doLaunch tReq 结构bug修复(缺外层struct_begin)+双雨确定性实证(sGuid=f(mid))
- encode_live_launch_req: 双层 struct_begin(0)+struct_end 收尾 (服务器tag0 tId 期望STRUCT)
- build 只发 tReq 单键 (对齐真机 launch 帧, 不再追加 platform/version 等)
- parse_launch_rsp: gzip 解压 + \x06\x20(32hex) sGuid 可靠提取
- live 矩阵实证: 同指纹同 sGuid / 变异指纹新 sGuid / device_id 不驱动, mid 驱动
- docs §11.8: 破案链 + 实证表 + 铸币闭环 (mid→doLaunch→sGuid→登录链)
2026-08-28 21:52:12 +08:00
yml2213 d2adfb25ad feat(huya): doLaunch live对拍定案 - 信封/键/路径被服务端接受, tReq值恒定拒绝
- App侧全细节确认: a09.getRequestKey=tReq / UniPacket(true)=v3 / 值=write(struct,0)
  / URL=/launch/doLaunch / getOtherParams追加 platform/version/channel/uid 键
  / 传输类型服务端动态下发(HTTP是否真渠道未定)
- live诊断: E(空值)->require field / F(缺键)->not found key / G(0x0c)->完全复现
  'read struct type mismatch tag0 type12' -> 服务端确实解析tReq值, 语义与本地djce不同
- 工具升级: --live 用5键 App同等 map; 悬而未决点=需App真实doLaunch帧(约束内路径全探)
  - logcat无klog / xlog+mmap2 mars压缩不解 / 冷启动走缓存不发网络launch / 禁pm clear
  - 可选项: 代理+CA被动抓包 / 模拟器新装 / 继续抠mars xlog
2026-08-28 19:13:36 +08:00
yml2213 44109aa408 feat(huya): doLaunch wire 离线还原 + GUID铸币复放器原型 (huya_launch_mint.py)
- JCE 规格: LiveLaunchReq{tId,tLiveUB,bSupportDomain}/LiveUserbase{eSource,eType,tUAEx}
  LiveAppUAEx{sIMEI,sAPN,sNetType,sDeviceId,sMId}/UserId{lUid..sQIMEI}/LiveLaunchRsp{t0=sGuid}
  (classes9/11 dex writeTo 精确还原)
- 信封: UniPacket, servant=launch (@WupServant), func=doLaunch, sBuffer key=_wup_data
- tools/huya_launch_mint.py: 请求构造 + 响应解析(sGuid_candidates 递归兜底) + self-test 回环 PASS
- 传输(hyns/KiwiServant)与响应形态留待 live 实测校准; 禁设备侧活动
2026-08-28 18:36:47 +08:00
yml2213 bed53a6586 feat(huya): isNative定案NativeBridge纯Java + GUID值流还原(服务端sGuid签发) + unidbg金测试恢复
- dex直读判定: NativeBridge.b/a/c/g/h/klog全为Java(classes5), NativeEntry全native; .data描述符块=GetStaticMethodID反向调Java的name/sig常量表
- GUID值流完整还原: native getGUID=纯缓存getter(pref hydeviceid_guid -> WupHelper.getGuid() -> b(100) -> 回写)
  YYProtoSdkModule.initHuyaUdbSdk(classes17)->HyDeviceProxy.j(appid,WupHelper.getGuid(),mid)->pnc.a
  WupHelper.getGuid->HalImpl.getGuid->sGuidProperty<--live-launch服务端LiveLaunchRsp.sGuid(32hex硬校验)
- 修正结论: GUID非本地指纹公式, 铸币=服务端doLaunch/device_register按虚拟设备指纹签发sGuid
- unidbg: 新harness回归根因=C++ locale/facet在unidbg libc++上ABI崩溃; 旧harness+当前merged恢复金测试MATCH, 实证native缓存写回流
- 新工具: tools/dex_probe_native.py(dex access_flags判定), tools/dex_scan_calls.py(跨dex调用点扫描)
2026-08-28 18:15:46 +08:00
yml2213 27c71a3ad2 feat(huya): hook阶段结论 - NativeBridge排除动态JNI与各库RN, 静态物证=内联描述符块; 双库unidbg打通; 设备稳定注意
- 排除: Java_导出扫描/各库dlopen JNI_OnLoad RN拦截/健康进程重触发RN = 全0命中
- unidbg verbose: hydeviceid仅FindClass+NewGlobalRef; udb仅注册HuyaAuthCore
- 物证: hydeviceid .data@0x3e21e4 内联方法描述符块(klog/b/c/g/h+getDataDir/getPath) + 类名字符串
- 双库: udb(JNI_OnLoad@0x262620)解密合并 unidbg 加载成功; merge 升级段驱动+动态保留+init_array置零+仅重定位槽清理
- 新输入: udb_deviceID/udb_deviceID_encode/oaid prefs + b(104) + Build.*字段
- 设备稳定: pm clear+frida attach 探测致闪退, 后续禁用; 无frida冷启动健康
- 静态还原重启点: isNative定讫 -> 注册函数(运行期建表模式) 或 Java逻辑; unidbg差分oracle + fnPtr兜底
2026-08-28 17:19:45 +08:00
yml2213 70621cff8f feat(huya): unidbg 金测试打通 - 采集器加密可复现(androidId=PDSuHx..)/GUID=0a7dfa..一致
- 输入图定案: 库内零硬件文件读, 种子=ANDROID_ID+服务端hydeviceid_config+MID, 属性层无关(X1/X2)
- 真机全段解密 dump(phone_dump_hydev_full) + merge_decrypted 合入原文件 → unidbg 可直接加载
- unidbg(JDK21+patch) harness: JNI 桩(SharedPreferences日志化/Settings.Secure/NativeBridge)
  金测试: androidId 加密态与 getGUID 全部与真机一致
- 遗留: NativeBridge.b(100) 原生归属库未定(非hydeviceid/udb/device-util), 当前桩替顶
- 修正结论: '单机不可铸造'判断错误, GUID=b(100)=f(androidId密, config, MID) 输入全可控
2026-08-28 16:06:25 +08:00
yml2213 49aae8b74c docs(huya): 算法生成路径分析 - 标准密码学原语定位/固定密钥候选/决定性实验/双路径(静态对拍+unidbg)
- dump 静态取证: AES S-box@0x36be82 / MD5 IV@0x36c190 / SHA1 K@0x36c1a0 / base64@0x3e8880
- .data 明文密钥候选: 7jbF5...(=AES-256 key) / HuyaUdb1928374650qwertyuiop / 865a4924...×2 / 961c151d...(SHA1)
- getGUID(0x20f8c8) 反汇编确认标准 OLLVM 平坦化 + 内部调用锚点 0x46140/0x1d6e68
- 指出'单机不可铸造'实验未覆盖 fileshydckey/全清数据/IMEI/qimei → 种子集可能可再生成
- 决定性实验 E1-E4(输入图+差分语料) + 路径A(纯Python黑盒对拍, 不需要解全部OLLVM) + 路径B(unidbg 仿真金测试)
- 服务端验收闭环: 铸币→dfpReport注册→WUP登录, 从第一天起验证
2026-08-28 12:55:20 +08:00