-
-
[原创]基于 Grok-4.5 的 X-Dynosaur 纯算还原分析
-
-
[原创]基于 Grok-4.5 的 X-Dynosaur 纯算还原分析
版本基准:webmssdk 2.0.0.507(sdkVersion=5.3.0, scmVersion=2.0.0.507)
形态特征:挂载于 URL Query 上的约 392 字符签名参数,通常与 X-Gnarly / X-Bogus 配合出现。
在完整的 API 请求流程中,SDK 通过拦截 HTTP 请求(如 fetch / XHR)并追加签名参数。整体架构可划分为三层:
X-Dynosaur 的外壳加密与 X-Gnarly 保持同构,主要分为 5 个步骤:
每次签名随机生成 48 字节密钥:
keyBytes=randomBytes(48)
拆分为 12 个 32 位小端无符号整数:keyWords[0..11]。
根据密钥低 4 位累加和动态推导 ChaCha 迭代轮次:
r=∑i=011(keyWords[i] & 0xF)(mod16)
rounds=r+5(取值范围 [5,20])
非标准 RFC 8439 ChaCha20 实现,核心差异如下:
注:state[12] 兼作 Counter,每消耗 64 字节密钥流时自动 +1。单轮 Quarter Round 旋转位移保持为 [16, 12, 8, 7],最终叠加初始状态(Feed-forward)。
cipher=plaintext⊕keystream(keyWords,rounds)
计算校验和确定密钥在密文中的嵌入位置:
mod=len(cipher)+1
sum=(∑i=047keyBytes[i]+∑j=0N−1cipher[j])(modmod)
insertPos=sum
拼接成中间二进制流:
wire=0x4B ∥ cipher[0…insertPos−1] ∥ keyBytes[48] ∥ cipher[insertPos…N−1]
采用映射表置换后的 Base64 编码:
明文由 25 个连续的 Tag-Length-Value (TLV) 段组成,Tag 范围从 0x20 递增至 0x38(无跳号):
部分字段包含尾部标志位(Trailer),格式通常为:[ Payload ] [ 0x00 ] [ Code ]
| 层级 |
名称 |
内容与作用 |
还原程度 |
| L1 |
业务输入层 |
业务 Query、Body、User-Agent、时间戳、计数器等 |
已知输入入口 |
| L2 |
逻辑字段层 |
25 个语义字段,经 VMP 混淆后序列化为自定义 TLV 明文(243~244 字节) |
TLV 结构已解开;部分 Value 混淆规则在 VMP 内 |
| L3 |
外壳加密层 |
48 字节随机密钥 + ChaCha 变体 XOR + 密钥动态嵌入 + 变异 Base64 |
已完全纯算还原,支持双向 Roundtrip |
| 特性 |
标准 ChaCha20 |
WebMSSDK 变体 |
| Sigma 常量 |
"expand 32-byte k" |
[0x475D03A6, 0x23CF0377, 0xE648A32B, 0x56891B76] |
| Key / Nonce |
8 词 Key + 3 词 Nonce |
12 词全部为动态 keyWords,无独立 Nonce |
| 轮次设定 |
固定 20 轮 |
动态推导 5∼20 轮 |
| 状态矩阵布局 |
`[SIGMA(4) |
KEY(8) |
| 结尾 Code |
观察含义 |
0x01 / 0x02 / 0x03 |
整型 / 枚举类型标志 |
0x05 / 0x07 / 0x09 / 0x0A |
字符串类型标志(数值多等于前置 Payload 长度) |
| 无后缀 |
裸 4 字节 uint32(大端序),如 0x2b / 0x2e / 0x30 / 0x38 |
| Tag |
典型长度 |
语义/观察 |
0x20 |
6 B |
随请求路径/接口变化,Trailer 常见 0x02 / 0x03 |
0x21–0x23 |
6 B |
固定的模式串(如 ...dfe00001) |
0x24 |
9 B |
与 SDK 版本相关(如 5.3.0 的混淆态) |
0x25 / 0x2F |
6 B |
随动态请求变化 |
0x27 / 0x2C / 0x34 |
11~12 B |
混淆后的长特征串 |
0x2A |
7 B |
短特征串 |
0x2B |
4 B |
GET 请求通常固定为 811c9dc4(空 Body FNV 哈希占位) |
0x2E |
4 B |
强时效/环境上下文相关(Query/时间戳) |
0x31 |
11 B |
固定为混淆后的 scmVersion=2.0.0.507 (e3a7cba7cbb7d73f3f0009) |
0x38 |
4 B |
校验/异或头字段,如 e207512b |
| 特性维度 |
X-Gnarly |
X-Dynosaur |
| 明文结构 |
16 个字段;[Count][Idx][Len_u16_BE][Val] |
25 个字段;[Tag][0x00][Len_u8][Val] |
| Value 混淆 |
多为明文 MD5 Hex / 版本字符串 |
先经 JSVMP 内部逻辑混淆再构建 TLV |
| 外壳加密 |
ChaCha 变体 + 密钥交织嵌入 + 魔数 0x4B |
完全相同 |
| Base64 字符表 |
变异 Base64 表 |
完全相同 |
| 输出串长度 |
~332 字符 |
~392 字符 |
[L1: 业务参数 / 环境信息]
│
▼
[L2: JSVMP 字段处理] ──► 25 段混淆字段 ──► 自定义 TLV 序列化 (243~244 B)
│
▼
[L3: 外壳加密] ───────► ChaCha-XOR 变体 ──► 嵌入 48B 动态 Key ──► 变异 Base64 ──► X-Dynosaur (~392 字符)
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!