淘四神究竟守哪道门 - 重读 SecurityGuard 与 MTOP 的公开证据

〇、摘要 笔者最初以为,这篇文章会围绕 x-sign、x-umt、x-mini-wua、x-sgext 分成四条线。名字已经替研究做好了分类,似乎只要继续找调用点,就能给四个字段各安排一种职责。 🧑‍🔬 读完现有材料后,这个写法被放弃了。公开的社区帖子能说明四类字段在 MTOP 请求构造阶段经过 SecurityGuard/Native 路径,却没有给出足以确认字段内部语义的版本化证据;淘宝官方政策则说明平台会把设备、应用、网络、账号和服务日志用于账户及交易安全,但它不是协议字段说明书。两份材料彼此有关,却没有严丝合缝地接上。 这次复核记录的正是这段没有接上的距离:客户端请求怎样形成,设备证据可能在哪一层被使用,以及一次接口返回为什么仍不能替代服务端的交易判断。文章不复刻签名,不提供 Hook、模拟请求或线上试探步骤。 Research Evidence Methodology Item Detail 文章类型 Type B:公开材料复核,不是一手逆向报告 研究方法 回读原始社区帖与官方原文,按时间和信任边界交叉核对 资料截止 2026-04-17;只采用此前已经发布的材料 证据标记 A:官方公开;B:受材料约束的架构判断;C:版本化社区观察 一手实验 无 APK、Hash、真机日志或服务端原因码 Sources & Evidence Grading 来源 等级 实际使用的部分 阿里巴巴集团季度业绩披露,2025-05-15 A 业务规模背景,不用于推断安全能力 淘宝网基本功能隐私政策,2026-02-12 生效 A 已披露的数据类别及账户、交易安全用途 《浅谈淘四神的坑点》,2025-10-23 C 历史样本中的字段名、协议构建调用关系和 Native 边界 Scope Limitations 社区帖子没有提供可推广到当前淘宝客户端的完整版本范围,笔者不把它写成 2026 年现行实现。 隐私政策确认处理类别与目的,不能反推某个 x-* 字段的输入、权重或服务端阈值。 文中的服务端部分是 B 级职责模型,不是淘宝内部拓扑。 初稿检索到的后续综述晚于资料截止日,已经删除;后文直接引用原始来源。 一、路线总览:那条断开的链 真正改变路线的不是多找到一个函数,而是发现四个字段都落在同一段协议构建语境里。继续按字段名猜用途,文章会很热闹,证据却不会变多。 🧑‍🔬 图左侧是公开样本能够触及的客户端范围:业务参数进入 MTOP,安全能力参与封装,随后得到一组协议字段。右侧从协议校验开始,已经是外部无法直接观察的服务端范围。设备历史、账号状态和交易关系被画在右侧,不是因为笔者知道淘宝内部怎样实现,而是因为这些状态不可能从一份客户端调用链里读出来。 ...

April 17, 2026 · 2 min · 262 words · +5

驯服六头蛇:驾驭希腊诸神 - 抖音六神签名算法的 unidbg 逆向全记录

读完本文,你将获得: 掌握 unidbg 仿真 Android native SO 的完整工作流:从环境搭建到签名输出 学会应对 OLLVM + VM + JIT 三层防护的实战策略:不硬逆混淆,用仿真绕过 理解字节跳动 MetaSec 签名体系(六神)的架构设计和初始化依赖链 获得一套排查"仿真器崩溃"的系统方法:自毁处理器识别、环境变量门、配置字段逆向 〇、摘要 本文记录了对抖音(Douyin)v37.5.0 libmetasec_ml.so 的完整逆向工程过程,目标是通过 unidbg 仿真提取六神签名算法。笔者在两个完整周末内完成了以下突破: 三层防护突破:识别并绕过了 OLLVM 控制流平坦化 + 自定义 VM 字节码解释器 + 运行时 JIT 代码生成的三重保护 自毁处理器中和:定位并 patch 了 3 个自毁处理器(覆盖 ~71 个调用点),防止仿真器跳转到未映射地址导致崩溃 环境变量门发现:通过 JADX 反编译发现了隐藏的环境变量 28d7fdd567361198183fa7b8e=a7,这是 Phase 2 初始化的硬性前置条件 配置 JSON 逆向:还原了 17 字段的配置 JSON 格式,其中 sdkVersion 字段必须使用 Java 层静态字段值(v06.05.40-dy)而非 native 解密值,这是整个研究的核心突破点 六神签名完整提取:X-Gorgon、X-Khronos、X-Argus、X-Ladon、X-Helios、X-Medusa 全部成功生成 难度评估:9/10——笔者遇到的最复杂的商业 Android 保护方案之一。 研究证据概览 (Research Evidence) 实验环境 项目 配置 目标应用 抖音 (Douyin) v37.5.0 (com.ss.android.ugc.aweme) 目标库 libmetasec_ml.so (3.8 MB, ELF64 ARM64) 主机 Ubuntu 22.04 LTS, x86_64, Dual Intel Xeon E5-2673 v4 (80 threads), 96GB RAM 仿真框架 unidbg + Unicorn2 后端, Java 11 (Temurin) 反编译 JADX (DEX → Java), radare2 5.8.9 (SO 静态分析) 辅助工具 Capstone (JIT 反汇编), 自定义 Java hook (指令 trace + CAS 分析) 分析周期 2026-03-27 ~ 2026-03-29 (2 个完整周末) 假设清单 ID 假设 章节 结果 H1 RegisterNatives 注册在 Object 而非 MS 类上是故意的 JNI 混淆手法 §4.2 ✓ 确认 — JADX 追踪发现 MS → i2 → Object 超类遍历逻辑 H2 Phase 2 失败源于缺少某个环境前置条件 §4.5 ✓ 确认 — JADX 发现 Os.setenv("28d7fdd567361198183fa7b8e", "a7") H3 时间戳相关的路径选择是刻意的 anti-analysis 设计 §4.6 ✓ 确认 — 两条路径功能等价,仅在调试环境中表现为非确定性 H4 配置 field[4] sdkVersion 应使用 native 解密出的 SDK 版本字符串 §4.7 ✗ 推翻 — 正确值来自 Java 静态字段 d4.a = "v06.05.40-dy" H5 JIT 中的 CAS (ldaxrh/stxrh) 循环是 anti-emulation 陷阱 §4.8 ✗ 推翻 — 单线程仿真器中 4 次迭代自然收敛 实验记录 ID 实验 步骤 结果 关键证据 E01 JNI 入口定位 RegisterNatives 日志 + JADX 追踪超类遍历 ✓ 入口 SO+0x271938, MS → i2 → Object E02 自毁处理器中和 反汇编 3 个 handler → 统一 patch adr x0, #0; ret ✓ ~71 个调用点全部中和 (0x266a38/0x266b0c/0x266be0) E03 Vtable 校验绕过 cbz → 无条件 b patch ✓ Phase 1 JNI_OnLoad 正常返回 E04 环境变量门发现 JADX 追踪 n3.a() → Os.setenv 调用 ✓ 28d7fdd567361198183fa7b8e=a7 E05 非确定性分发诊断 Phase 2 连续运行 5 次 ✗ 3/5 3 次返回 0 (成功), 2 次返回 -1 (失败) E06 时间戳固定 → 确定性分发 固定 currentTimeMillis + UUID.randomUUID ✓ Phase 2 连续 5 次 100% 返回 0 E07 配置 field[4] = native 解密值 sdkVersion = "v04.09.09.07-bugfix" ✗ VM 进入 ms_config.h:254 无限循环 E08 配置 field[4] = Java 静态字段值 sdkVersion = "v06.05.40-dy" (来自 d4.a) ✓ VM 执行 3173 条指令 → Boolean.TRUE E09 完整 17 字段配置验证 所有字段语义正确 → Phase 3 ✓ Phase 3 → true, Phase 4 → handle 0x12731000 E10 JIT CAS 循环收敛 观察 ldaxrh/stxrh 迭代次数 ✓ 4 次迭代, w20=w12=0x2000 时收敛 E11 六神签名生成 getFeatureHash(0x2000006) ✓ 6 个签名头全部输出 E12 设备注册端到端 TTEncrypt + 六神签名 → POST device_register ✓ HTTP 200, device_id_str + install_id_str 返回 E13 API 验证 Feed + Search API 请求携带六神签名 ✓ HTTP 200, 正常数据返回 一、路线总览 先用一张图说清楚整个初始化到签名输出的完整序列: ...

March 29, 2026 · 18 min · 3685 words · +5
CC BY-NC-SA 4.0 © 2026 +5 · Repost with attribution, non-commercial only
All research is for academic and security purposes only. No functional exploit code or keys provided. For takedown requests contact overkazaf@gmail.com.
本站总访问量 次  ·  访客数 人