feat(dfp): 🏆 dfpReport 加密完全攻破 — RC4+gzip, 12/12 密文解密+逐字节回验 (R35-R37)

This commit is contained in:
yml2213
2026-08-29 10:13:08 +08:00
parent 12fad07385
commit 4868a3b0e8
28 changed files with 4110 additions and 0 deletions
+34
View File
@@ -1565,3 +1565,37 @@ full: 7c da | 11 | 69 c9 f5 28 9c 4d 46 | 95 6f 21 | 10 bb 80
### 交付
- hook_final.js / hook_brute.js: 密钥+POST 同刻捕获体系 (可复用!)
- 验证堆枚举法极大成功 — 后续抓任何 JVM 状态对象都可用此法!
## §11.66 R35-R37: 🏆🏆🏆 dfpReport 加密完全攻破 — RC4+gzip (2026-08-29)
### 破案三步 (离线配对 → 内存快照 → deflate 钩)
- R35 离线配对: Perseus 会话密钥 × 全部活体密文 XXTEA/TEA 全排列 = 全否 → 排除 XXTEA 路线!
- R35 内存快照 (hook_memshot.js): 全堆 rw- 扫描, 密文 5 处拷贝, 会话密钥 yHdK0y6F3GP9gbBo — 密钥≠会话密钥实锤
- R36 **libz deflate 钩 (hook_deflate.js)**: turingga.so 动态导入 deflate → 一击命中:
- deflate #9: in=7086B JSON → out=3625B **gzip (1f8b08!)** — XXTEA 假设全错的根源: 压缩是 gzip 不是 zlib-deflate
- **密文长度 == 明文长度 → 流密码, 不是分组密码!**
- bt: libhydeviceid.so!0x57e7c <- 0x58d38 <- 0x60e6c <- 0x5b1f4/0x69bc4 <- 0x5a938 <- 0x20e924 ← JNI
### 算法定论 (12/12 历史密文 100% 解密 + 3 轮逐字节回加密 IDENTICAL)
- 明文 = 指纹 JSON (~7-8KB: Athena + deviceinfo/Hebe_D1-D5 + ...) → **gzip** (zlib level9, 头 1f8b08 00 00000000 02 03)
- **C = RC4(key) keystream ⊕ gzip** (标准 KSA/PRGA, 无 drop-N, 逐字节长度保持)
- key = **32 字符 hex ASCII 串** (样例 865a4924a40897ac1fcfe6b4c2abc798), 每注册轮换, 非 md5 派生
- **magic 571882cf664bb39401ee = keystream[0:10] ⊕ gzip头[0:10]** — 根本不是魔数, 是密钥的影子!
- 头变体 7cda11/64bb/6cdb... = keystream ⊕ (gzip头尾+JSON开头) — 全部迷雾一次解开
- 密文尾部 10B = gzip 流后附加段 (decompressobj unused_data, 解码时忽略)
- 密钥捕获点: **libhydeviceid.so!0x60e6c onEnter x1 = 密钥串** (hook_hy.js, 一次注册命中 3 次)
### 45 函数零调用之谜 (R32-R34) 最终解释
- 加密在 **libhydeviceid.so** (turing SDK 静态链接进虎牙 wrapper 库), 非 turingmfa/turingga 的 JNI 方法族!
- 算法是 **RC4** 不是 XXTEA — mfa sub_24D58 / ga sub_1F1CC 的 XXTEA 属于 hdid 子系统, 与 dfpReport 无关
- 教训: bt ACCURATE 在 OLLVM/无帧指针下给假帧; libz deflate 这类"必经外部导出"才是可靠锚点
### 交付
- **tools/dfp_rc4.py**: 编解码器 (rc4_keystream/decrypt/encrypt/gzip_wrap), CLI `dec <bin> <key>`, 自测 3 轮密文逐字节还原
- tools/frida/hook_memshot.js + scripts/hook_memshot.py: R35 内存快照体系
- tools/frida/hook_deflate.js + scripts/hook_deflate.py: R36 deflate 钩 (只挂 libz.so! GL 驱动同名符号非 zlib ABI, hook 必崩; inflate 热路径禁挂 — 首屏卡死教训)
- tools/frida/hook_hy.js + scripts/hook_hy.py: R37 密钥捕获 (0x60e6c x1)
- evidence/dfp_live/r35_plain_gzip.bin / r35_wire_cipher.bin / r35_keystream.bin / r35_plain.json + dec_*.json (12 份明文)
### 端到端伪造路径 (已无阻塞)
JSON 构造 → gzip_wrap → RC4(捕获 key) → wire body → POST. 密钥每轮经 hook_hy.js 一挂即得.