From 32a78318adb3e779e901c62edd545f002bff7050 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sun, 11 Oct 2026 21:51:06 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E8=B4=A6=E6=9C=AC):=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=20XTEA=20=E5=AF=86=E9=92=A5=E5=BD=A2=E6=80=81=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=8F=91=E7=8E=B0(ASCII=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E4=B8=B2=20/=20=E9=97=AD=E5=8C=85=E6=8D=95=E8=8E=B7=20/=20?= =?UTF-8?q?=E8=BD=AE=E5=8A=A0=E7=9B=90=E9=9A=8F=E6=9E=84=E5=BB=BA=E5=8F=98?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 做了什么: - PROGRESS.md §一 已知表新增 4 条: 10. XTEA 密钥字 = 4 个「ASCII 打包的 4 字符串」(大端拼 32bit) 11. 密钥既不是立即数也不是字面字符串(明文/大端字节/base64 都搜不到) 12. 密钥数组经闭包捕获传入: @09463 CREATE_CLOSURE caps=[r7=r8], XTEA 轮以 reg7[(sum>>>11)&3] 取用 13. 轮加盐随构建变化(本构建 723726/855311, 台账另一构建 2829068/328986), 但都是可见立即数 - PROGRESS.md §五 下一步新增第 0 条: 静态提取密钥(逐闭包符号执行) 为什么: - 这是"去掉最后一个 Node 依赖"的关键定位, 避免重复摸索 怎么验证: - 密钥字节解剖: 1818510928 -> 0x6c644650 "ldFP" 等 (core_js/tdc_sample.js) - 反汇编: .venv/bin/python tools/tdc_disasm.py tcaptcha/core_js/tdc_sample.js --- har/1ms_dianxuan/PROGRESS.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/har/1ms_dianxuan/PROGRESS.md b/har/1ms_dianxuan/PROGRESS.md index ba33e1b..d7b43ac 100644 --- a/har/1ms_dianxuan/PROGRESS.md +++ b/har/1ms_dianxuan/PROGRESS.md @@ -39,6 +39,10 @@ | 7 | tdc.js 至少两代明文布局,**新版字段序随构建变化** | 旧版首段 `{"cd":[[],...`;雨云实时 `{"cd":[1,[],...`;1ms 实时 `{"cd":[1791712995,0,...` | 确证 | | 8 | 宽松 aid 下服务端**不校验** `collect` 与 `eks` 的同源性 | 雨云 aid + 硬编码旧密钥 + 旧版明文 → `errorCode=0` + 真实 ticket | 确证(仅宽松 aid,勿外推) | | 9 | 「Node 跑密钥 + Python 全算法」端到端可用 | 雨云 aid 纯 Python 出包 → `errorCode=0` | 确证 | +| 10 | **XTEA 密钥字是 4 个「ASCII 打包的 4 字符串」**(每字 = 4 个可打印字符按大端拼成 32bit)| `core_js/tdc_sample.js` 的密钥 `[1818510928,1381395306,1245924197,1768384072]` 大端解码 = `ldFP`/`RVkj`/`JCKe`/`igfH`;root 样本 = `VWTQ`/`nMJk`/`gSRU`/`QVZR` | 确证 | +| 11 | 密钥字**既不是立即数、也不是字面字符串**(无论明文、大端字节序列、base64 都不在 tdc.js/字节码里)| 立即数 1.3e9~1.9e9 区间为空;`ldFPRVkjJCKeigfH` 及其 base64 均搜不到 | 确证 | +| 12 | 密钥数组在 XTEA 轮里通过**寄存器间接寻址**读取,且经闭包捕获传入 | 反汇编 `reg7[(sum>>>11)&3]`;`@09463 CREATE_CLOSURE target=@9109 caps=[r7=r8]` | 确证 | +| 13 | 轮加盐**每次构建都不同**(但都是可见立即数)| 本构建 = `723726`(j==2) / `855311`(j==3);台账另一构建 = `2829068` / `328986` | 确证 | --- @@ -87,8 +91,12 @@ TencentCaptchaClient(telemetry_mode="python_keyed") # 默认 ## 五、下一步(可被下一轮直接执行) +0. **静态提取 XTEA 密钥(去掉最后一个 Node 依赖)**:密钥字是 ASCII 打包串、且不是字面量, + 需对**正确反汇编**(`tools/tdc_disasm.py`)做一个小的**逐闭包符号执行/数据流**: + 从 `CREATE_CLOSURE caps=[r7=r8]` 反查父闭包 r8 的赋值表达式并常量折叠。 + 寄存器是「每闭包一份、经 `PUSH_IMM_ARRAY ` 引用间接访问」,所以需要真正的数据流而非模式匹配。 1. **拿下 1ms 的 12**:做账本 §7.5 的**单变量实验** —— - (a) 给 captcha 域带上成功样本里的 `uin/skey/qcmainCSRFToken/intl` cookie; + (a) 给 captcha 域带上成功样本里的 `uin/skey/qcmainCSRFToken/intl` cookie(已做,H3 已排除); (b) 登录态真页面触发 vs 未登录触发。二选一即可闭合。 2. **补齐新版明文字段语义**:对照 10+ 份实时模板做差分。 3. **实现 2408 图标点选**:按 1ms 图标类别重训 `yolo_detector` + `icon_classifier`。