Files
hunyuan3dweb/UNIVERSALITY_ANALYSIS.md
2026-05-24 21:47:44 +08:00

5.8 KiB
Raw Permalink Blame History

腾讯混元3D 签名算法泛用性分析

核心结论

该签名算法具有"有限泛用性" —— 只能在腾讯混元3D产品线内复用不能直接用于其他腾讯产品或第三方平台。


一、算法特征分析

1. 硬编码密钥派生

C = bytes([122, 59, 92, 165, 30, 79, 166, 139, 142, 129, 139, 89, 219, 131, 101, 204])
D = bytes([122, 59, 92, 45, 30, 79, 106, 139, 156, 13, 46, 63, 74, 91, 108, 125])
U = [3, 5, 2, 7, 1, 4, 6, 2, 5, 3, 1, 4, 2, 6, 3, 5]
M = [14, 11, 13, 9, 15, 10, 12, 8, 6, 3, 5, 1, 7, 2, 4, 0]

特征:

  • 使用 16 字节硬编码种子 C
  • 通过 XOR + 循环左移 + 置换 派生密钥
  • 最终密钥: Hf6d6KFB3D

泛用性: — 这是腾讯混元3D特有的密钥派生方案其他产品使用不同的密钥。

2. 签名范围

签名只包含 URL 查询参数,不包含请求体

特征:

  • 仅对 timestamp + nonce 签名
  • 请求体数据不参与签名计算
  • 使用 HMAC-SHA256输出 Hex

泛用性: ⚠️ 中等 — 这种"轻量级签名"模式在腾讯部分产品中有复用,但具体实现不同。

3. 参数排序规则

# 过滤空值
# 按键名字母顺序排序
# 列表/字典使用 JSON 格式

泛用性: ⚠️ 中等 — 这是常见的签名参数处理模式,但不同产品的过滤规则和序列化方式可能不同。


二、可复用场景

可直接复用

场景 说明
腾讯混元3D所有API 同一套签名算法适用于所有端点
混元3D的不同环境 dev/pre/prod 使用相同算法(可能密钥不同)
同一账号的不同请求 签名算法与账号无关

⚠️ 需要修改后复用

场景 需要修改的内容
腾讯其他产品(如混元大模型) 硬编码常量 C/D/U/M 不同
其他公司的类似产品 整套算法可能完全不同
混元3D的移动端API 可能使用不同的密钥或签名方式

无法复用

场景 原因
标准 OAuth/JWT 接口 完全不同的认证机制
使用 AK/SK 签名的云服务 使用 HMAC-SHA256 但密钥和消息格式不同
无签名的公开 API 不需要签名

三、方法论的可复用性

虽然具体算法不能泛用,但逆向方法论可以复用:

1. webpack 模块提取

// 适用于所有 webpack 打包的前端应用
const chunks = self.webpackChunk<app_name>;
for (const chunk of chunks) {
    const modules = chunk[1];
    // 搜索包含关键词的模块
}

复用价值: — 所有 webpack 应用都适用

2. 签名定位技巧

// Hook Math.random 和 Date.now
Math.random = () => { console.trace(); return 0.123; };
Date.now = () => { console.trace(); return 1779599999000; };

复用价值: — 适用于所有前端签名逆向

3. 请求拦截分析

// 拦截 fetch/XHR
const origFetch = fetch;
fetch = (...args) => {
    console.log('Fetch:', args);
    return origFetch(...args);
};

复用价值: — 通用的前端请求分析技术

4. 密钥派生分析

# 从字节数组派生密钥的模式
def derive_key(c, d, u, m):
    # XOR -> 移位 -> 置换 -> 截断
    ...

复用价值: — 密钥派生是常见模式,但具体变换不同


四、与其他腾讯产品的对比

产品 签名方式 密钥来源 与混元3D的相似度
腾讯混元3D HMAC-SHA256 硬编码派生 100%(基准)
腾讯云 API HMAC-SHA256 用户 SecretKey 低(密钥不同)
微信小程序 SHA256 固定字符串+token 中(算法类似)
QQ 音乐 未知 未知 未知
腾讯视频 未知 未知 未知

五、实际应用建议

场景1: 开发混元3D的自动化工具

适用性:

直接使用本项目的代码,无需修改。

场景2: 逆向其他腾讯产品

适用性:

可以复用方法论,但需要:

  1. 重新提取 webpack 模块
  2. 重新定位签名函数
  3. 重新分析密钥派生逻辑

场景3: 学习前端逆向技术

适用性:

本项目是完整的前端逆向案例,涵盖:

  • JS Bundle 分析
  • webpack 模块提取
  • 签名算法逆向
  • 浏览器自动化测试
  • Python 重写验证

场景4: 构建通用签名破解框架

适用性:

可以构建半自动化工具:

class SignatureCracker:
    def extract_webpack_modules(self, url): ...
    def locate_sign_function(self, modules, keywords): ...
    def analyze_key_derivation(self, func_code): ...
    def verify_signature(self, params, expected_sign): ...

但每个产品仍需要人工分析和调整。


六、技术价值评估

维度 评分 说明
算法复杂度 中等XOR+移位+置换)
逆向难度 较高webpack混淆
代码质量 清晰可维护
文档完整性 详细文档
泛用性 仅限混元3D
方法论价值 可复用的逆向流程

七、总结

算法本身

  • 不可泛用: 硬编码常量和密钥派生方案是混元3D特有的
  • 不可迁移: 不能直接用于其他产品

方法论

  • 高度可复用: 逆向流程、工具、技巧适用于所有前端应用
  • 学习价值高: 完整展示了从 JS 混淆代码到 Python 实现的完整过程

建议

  1. 直接使用: 如果你需要调用混元3D API
  2. 参考学习: 如果你需要逆向其他前端应用
  3. 扩展改进: 可以构建更通用的前端逆向工具链