ksjsb/docs/weapon_kas.md
2026-07-30 20:25:56 +08:00

72 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Weapon KAW/KAS 纯 Python 还原
## 静态调用链
APP 的 Weapon 请求拦截器按以下顺序构造请求头:
1. `kaw = WeaponHI.g(context)`,对应配置项 `z_y_x_a`
2. `payload = encodedPath + (__NS_sig3 or "") + kaw`
3. `kas = WeaponHI.a(payload, "")`
4. `WeaponHI.a` 调用 `W.pr(99999, 2, payload.length() * 2, payload)`
KAW 是版本/远端配置材料不按账号计算。KAS 绑定最终 URL必须在
`sig/__NS_sig3` 完成后逐请求生成。
## mode=2 公式
`core.weapon_kas.generate_weapon_kas` 复现以下 native 流程:
1. 按 JNI modified UTF-8 编码 payload。
2. 对 payload 做标准 Base64。
3. 使用 Weapon 自定义 IV 的 BLAKE2s 分块逻辑生成 8 个 uint32。
4. 将 8 个字格式化为小写十六进制文本。
5. 对前 16 个字符执行 `$AI_` 同源的固定加法/XOR 变换。
6. 在 16 字节结果前加 `00`,输出 34 个十六进制字符。
四组 APP 抓取向量已同时由纯 Python 实现和 `libw.so` Unicorn oracle 验证。
## KAW 来源
CLI 优先级如下:
1. `--weapon-kaw`
2. `KS_WEAPON_KAW`
3. 本次显式加载的 app-fields 中的 `weapon_kaw``kaw`
4. `out/app_login_fields_latest.json` 中独立缓存的 `weapon_kaw``kaw`
5. APK 内置 `z_y_x_a` 回退值
从已有稳定探针日志提取一次当前版本 KAW
```powershell
uv run python -m tools.extract_app_login_fields `
--log out/probe_login_stable_20260726_214809.log `
--out out/app_login_fields_latest.json
```
之后 CLI 会独立读取 latest 文件里的 KAW不会顺带复用其中的手机号、
设备或 passport 字段。KAW 可跨账号复用KAS 会按各请求的 path 和
`__NS_sig3` 现场计算。新日志没有 KAW 时,提取器会保留现有 latest
文件中的版本级 KAW避免退回 APK 内置值。
## 验证
纯 Python 向量:
```powershell
uv run python -m unittest tests.test_weapon_kas -v
```
本地 native 对照:
```powershell
uv run --with pyelftools --with unicorn `
python -m unittest tests.test_libw_pr_oracle -v
```
只测手机号预检时,终端应出现 `KAS 纯 Python 已启用`,请求元数据中的
`has_kaw``has_kas` 应均为 true。
KAW/KAS 只补齐 APP 的 Weapon 请求证明。服务端返回 705 时给出的
`captchaToken` 和 Cookie 绑定属于后续交互式验证链,不是 KAS 的返回值。