清理虎牙登录旧数据依赖并统一动态环境
This commit is contained in:
@@ -18,7 +18,7 @@ MAP, LIST = 0x08, 0x09
|
||||
STRUCT_BEGIN, STRUCT_END = 0x0A, 0x0B
|
||||
ZERO, SIMPLE_LIST = 0x0C, 0x0D
|
||||
|
||||
DEFAULT_QURL_B64 = (
|
||||
PROTOCOL_QURL_TEMPLATE_B64 = (
|
||||
"AAAD5hADLDxCAFpBBVYMaHV5YXVkYndlYnVpZgdkZWZhdWx0fQABA7gIAAIGCV93dXBfZGF0YR0AAQOKCgoMFgMxLjAm"
|
||||
"ynsiYXNzb2NpYXRpb25JZCI6MTg0NTQ5MzkyLCJmdW5jTmFtZSI6IiIsImdyb3VwIjowLCJpZCI6MTg0NTQ5MzkyLCJz"
|
||||
"ZXNzaW9uIjo1OTE0ODg1LCJzdGVwIjowLCJzdGlsbExvZ2luIjpmYWxzZSwidHJhY2VJZCI6IjBiOGYwOThmZjY0YTVi"
|
||||
@@ -135,7 +135,7 @@ class Envelope:
|
||||
return cls._load_from_path(candidate)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
logger.debug(f"加载证书信封候选文件失败: {candidate}: {exc}")
|
||||
return cls(base64.b64decode(DEFAULT_QURL_B64))
|
||||
return cls(base64.b64decode(PROTOCOL_QURL_TEMPLATE_B64))
|
||||
|
||||
@classmethod
|
||||
def _load_from_path(cls, p: Path) -> Envelope:
|
||||
@@ -258,6 +258,7 @@ class Envelope:
|
||||
return self
|
||||
|
||||
def patch_session(self, session: int) -> Envelope:
|
||||
"""Patch the outer WUP session and its request copy."""
|
||||
if self.tag4_span:
|
||||
struct.pack_into(">I", self.raw, self.tag4_span[0], session & 0xFFFFFFFF)
|
||||
d = self.raw
|
||||
@@ -268,5 +269,33 @@ class Envelope:
|
||||
struct.pack_into(">I", d, j, session & 0xFFFFFFFF)
|
||||
return self
|
||||
|
||||
def patch_meta(self, session: int, trace_id: str) -> Envelope:
|
||||
"""Replace QR metadata values without carrying the capture's old state.
|
||||
|
||||
The captured envelope keeps a fixed-size JSON string. Keeping the
|
||||
replacement the same size lets us update only the value bytes and
|
||||
preserve all TAF length prefixes and offsets.
|
||||
"""
|
||||
if self.meta_json_span is None:
|
||||
raise ValueError("信封缺少元数据 JSON")
|
||||
start, end = self.meta_json_span
|
||||
current = bytes(self.raw[start:end])
|
||||
try:
|
||||
meta = json.loads(current.decode("utf-8"))
|
||||
except (UnicodeDecodeError, json.JSONDecodeError) as exc:
|
||||
raise ValueError("信封元数据 JSON 无法解析") from exc
|
||||
meta["session"] = int(session)
|
||||
meta["traceId"] = str(trace_id)
|
||||
updated = json.dumps(meta, ensure_ascii=False, separators=(",", ":")).encode(
|
||||
"utf-8"
|
||||
)
|
||||
if len(updated) != len(current):
|
||||
raise ValueError(
|
||||
f"信封元数据长度变化: {len(updated)} != {len(current)}; "
|
||||
"请使用固定长度 session/traceId"
|
||||
)
|
||||
self.raw[start:end] = updated
|
||||
return self
|
||||
|
||||
def wup_b64(self) -> str:
|
||||
return base64.b64encode(bytes(self.raw)).decode()
|
||||
|
||||
Reference in New Issue
Block a user