diff --git a/src/wechat_decrypt_tool/key_service.py b/src/wechat_decrypt_tool/key_service.py index 04842cf..e2dec04 100644 --- a/src/wechat_decrypt_tool/key_service.py +++ b/src/wechat_decrypt_tool/key_service.py @@ -208,8 +208,7 @@ NEXT_ACTION_ID = "7c8f99280c70626ccf5960cc4a68f368197e15f8e9" def get_wechat_internal_global_config(wx_dir: Path, file_name1) -> bytes: """ - 获取 Blob 1: 微信内部的 global_config 文件 - 路径逻辑: account_dir (wxid_xxx) -> parent (xwechat_files) -> all_users -> config -> global_config + 读微信目录下的主配置文件 """ xwechat_files_root = wx_dir.parent @@ -253,7 +252,6 @@ def get_wechat_internal_global_config(wx_dir: Path, file_name1) -> bytes: async def fetch_and_save_remote_keys(account: Optional[str] = None) -> Dict[str, Any]: - # 1. 确定账号目录和 WXID account_dir = _resolve_account_dir(account) wx_id_dir = _resolve_account_wxid_dir(account_dir) wxid = wx_id_dir.name @@ -272,11 +270,8 @@ async def fetch_and_save_remote_keys(account: Optional[str] = None) -> Dict[str, except Exception as e: raise RuntimeError(f"读取微信内部文件失败: {e}") - # Blob 3: 空 (联系人) blob3_bytes = b"" - - # 3. 构造请求 headers = { "Accept": "text/x-component", "Next-Action": NEXT_ACTION_ID, @@ -338,17 +333,15 @@ async def fetch_and_save_remote_keys(account: Optional[str] = None) -> Dict[str, xor_raw = str(result_data["xor_key"]) aes_val = str(result_data["aes_key"]) - # 转换 XOR Key (服务器返回的是十进制字符串 "178") try: if xor_raw.startswith("0x"): xor_int = int(xor_raw, 16) else: xor_int = int(xor_raw) - xor_hex_str = f"0x{xor_int:02X}" # 格式化为 0xB2 + xor_hex_str = f"0x{xor_int:02X}" except: - xor_hex_str = xor_raw # 转换失败则原样保留 + xor_hex_str = xor_raw - # 保存到数据库/Store upsert_account_keys_in_store( account=wxid, image_xor_key=xor_hex_str, diff --git a/src/wechat_decrypt_tool/routers/keys.py b/src/wechat_decrypt_tool/routers/keys.py index be538c2..101f9e5 100644 --- a/src/wechat_decrypt_tool/routers/keys.py +++ b/src/wechat_decrypt_tool/routers/keys.py @@ -94,7 +94,7 @@ async def get_image_key(account: Optional[str] = None): 通过模拟 Next.js Server Action 协议,利用本地微信配置文件换取 AES/XOR 密钥。 1. 读取 [wx_dir]/all_users/config/global_config (Blob 1) - 2. 计算 本地 global_config (JSON) 的 SHA3-224 (Blob 2) + 2. 读 同上目录下的global_config.crc 3. 构造 Multipart 包发送至远程服务器 4. 解析返回流,自动存入本地数据库 """