diff --git a/docs/HUYA_HDID_ALGORITHM_GEN.md b/docs/HUYA_HDID_ALGORITHM_GEN.md index 97ede8d..85a4dde 100644 --- a/docs/HUYA_HDID_ALGORITHM_GEN.md +++ b/docs/HUYA_HDID_ALGORITHM_GEN.md @@ -527,3 +527,34 @@ hdid = md5(AID)/md5(MID)/md5(AID+MID)/md5(AID+CFG)/md5(AID+MID+CFG)/sha1(AID)[:3 ### 下步 (unidbg 执行路线) C2/钥表已定位 → 下一步 = unidbg 调 AESkeyMgr/C2-相关 sign/AES 函数 (hyudb_otp_encrypt@0x32fa24, UdbAESUtil::encrypt, xxtea...) 以可控输入差分 → 复刻 32hex-HDID32 生成。 + +## §11.14 AESkeyMgr 钥表按 id 注册 + encode_aes API 定案 (2026-08-28 夜) + +### AESkeyMgr::C2@0x26fcc8 = 钥表构造 (按 id 注册 24 字符钥) +| id | 钥 | VA | +|---|---|---| +| 1 | `ZMHAVPRaxJ3MtXDjduUnXAKQ` | 0x1c155e | +| 2 | `4VYcPdvKKqjBHZtCmbroRXHk` | 0x1bc810 | +| 3 | `xXEDWqiKLGwEZ6HubEiswCqK` | 0x1bc829 | +| 4 | `3FMHubdKosFrhmXNLHTNHZwe` | 0x1bc842 | +| (C2 前置装载) | `owNMiaCgcHmqoTr3iRamFuHj` | 0x1b898b | +| KFWAH/ybEWdv 族 | 0x1b9f27/0x1b9f40 | R2 旧线索 | + +### encode_aes API (0x330218) 完全解码 +``` +encode_aes(IN:std::string&, KEY:std::string&, OUT:std::string&) + 1. OUT.assign(常量串@0x1ba000+0xa90) ← 初始化输出 + 2. UdbAESUtilC1(KEY) ← 构造器吞 KEY + 3. UdbAESUtil::encrypt(IN, OUT) ← 加密 +``` +- lib 自带完整 AES 原语: KeyExpansion@0x24ebd4, Cipher@0x24f314, MixColumns/AddRoundKey/ + InvSubBytes/InvShiftRows/InvMixColumns/FFmul — **纯自研 AES (非 openssl!)** +- `UdbAESUtil::_encrypt@0x24f9f0` = 底层; `hyudb_otp_encrypt@0x32fa24` = OTP 封装 + +### 朴素 AES 爆破实验 (证伪) +24B 钥 × {ECB, CBC-zeroIV} × {md5(aid/mid/…), sha1, aid-bytes, cfg-b64…, 10 候选明文} +→ 与 ed0db8 零命中。**key 必经 UdbAESUtilC1 加工 (派生/置换) 或自研变异 AES**。 + +### 下步 (定位派生) +A. unidbg 调 encode_aes(in, key) → 输出对拍 (可控输入差分) +B. 静态读 UdbAESUtilC1/KeyExpansion(0x24ebd4) 取派生规则 → Python 复刻