diff --git a/docs/HUYA_HDID_ALGORITHM_GEN.md b/docs/HUYA_HDID_ALGORITHM_GEN.md index 2b83379..59499c2 100644 --- a/docs/HUYA_HDID_ALGORITHM_GEN.md +++ b/docs/HUYA_HDID_ALGORITHM_GEN.md @@ -662,3 +662,25 @@ UdbAESUtilC1 + encrypt ← AES 层 - 32hex 尾 = **静态钥材料计算值** (非嵌入: so 全文件无 8b38f1/ed0db8 字节) - 中段 = f(输入) (变输入即变) — 待定性为 md5/xxtea/AES 哪层 - 32hex-HDID32 (ed0db8) 与 OTP 尾 = 同族 MAC 理论的验证对象 (下轮) + +## §11.20 OTP 中段公式实证: md5_char16(input ∥ getkey(1)-派生) (2026-08-28 夜) + +### 静态流 (32fa24: 32fb60-32fbdc) +``` +AESkeyMgrC2() ← 钥表构造 +getkey(this, w1=1, x2=第二参数) ← id1=1 (ZMHAV…族) +string::insert(input, pos, getkey产物) ← 钥材料插入输入串 +md5_char16(合成串) ← 中段 16B +UdbAESUtilC1(…) + encrypt ← 后段 +``` +### 差分数据 (中段, 输入依赖) +| in | 中段 (16B) | +|---|---| +| a | 78ea165d2d375a55a13989d176e96f3b | +| ab | 8c84ce0f1b734b1dc8227930936a4fd1 | +| abc | 88fa6ee519d52f61348e01d6e74c81cd | +| abcd | 0cd8ddaeb48a97b03459d4a1dc24a148 | +朴素的 md5_char16(in+key)/md5_char16(key+in) 全组合 = 零命中 → getkey 产物 = **派生钥** (非裸 24B)。 +### 下轮 +1. 探针直接调 AESkeyMgr::getkey(1,…) 取派生钥 → md5_char16 合成验证 +2. 子代理 AES 复刻 (运行中) diff --git a/tools/unidbg/hydev/src/hydev/AesProbe.java b/tools/unidbg/hydev/src/hydev/AesProbe.java index d9fa99f..f6fdf39 100644 --- a/tools/unidbg/hydev/src/hydev/AesProbe.java +++ b/tools/unidbg/hydev/src/hydev/AesProbe.java @@ -187,6 +187,11 @@ public class AesProbe { p.callOtp("abcX", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); p.callOtp("abc", "owNMiaCgcHmqoTr3iRamFuHj"); p.callOtp("", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); + p.callOtp("a", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); + p.callOtp("ab", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); + p.callOtp("abcd", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); + p.callXxtea("abc", "ZMHAVPRaxJ3MtXDjduUnXAKQ"); + p.callMd5Char16("abc"); p.emulator.close(); p.emulator.close(); }