"""Weapon ``W.pr(99999, 2, ...)`` 的纯 Python KAS 生成器。""" from __future__ import annotations import base64 import urllib.parse from dataclasses import dataclass from .weapon_vimg import _generate_ai_hex, _java_modified_utf8 # ``WeaponHI.g(context)`` 在 ``z_y_x_a`` 尚未下发时使用的 APK 内置值。 APK_DEFAULT_WEAPON_KAW = ( "MDAgOGjoRLeHCT6xRdsOAngNH4RQOdDTY7WVEbnxKJqLVJUDnvV26jVwacDZJjYLO8Uz" "N8PYNaiJslgA" ) def build_weapon_signature_input(url: str, kaw: str) -> str: """还原 ``WeaponSigInterceptor`` 传给 ``W.pr`` 的明文。""" parsed = urllib.parse.urlsplit(url) query = urllib.parse.parse_qs(parsed.query, keep_blank_values=True) sig3 = query.get("__NS_sig3", [""])[0] return f"{parsed.path}{sig3}{kaw}" def generate_weapon_kas(payload: str) -> str: """复现 ``W.pr(99999, 2, len(payload) * 2, payload)``。""" payload_base64 = base64.b64encode(_java_modified_utf8(payload)).decode("ascii") return "00" + _generate_ai_hex(payload_base64) @dataclass(frozen=True, slots=True) class WeaponProofProvider: """根据最终签名 URL 生成对应的 ``kaw`` / ``kas`` 请求头。""" kaw: str = APK_DEFAULT_WEAPON_KAW def __post_init__(self) -> None: if not self.kaw or self.kaw.strip() != self.kaw: raise ValueError("weapon kaw must be a non-empty value without outer whitespace") def __call__(self, url: str) -> dict[str, str]: payload = build_weapon_signature_input(url, self.kaw) return {"kaw": self.kaw, "kas": generate_weapon_kas(payload)}