From a4c8d580eb2df300eee54f2d094bc3ffda6d5cf5 Mon Sep 17 00:00:00 2001 From: H3CoF6 <1707889225@qq.com> Date: Sat, 28 Feb 2026 00:11:07 +0800 Subject: [PATCH] fix: return aes_key to frontend --- frontend/composables/useApi.js | 6 +++--- frontend/pages/decrypt.vue | 10 ++++------ src/wechat_decrypt_tool/key_service.py | 5 ++++- src/wechat_decrypt_tool/routers/keys.py | 8 ++++---- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/frontend/composables/useApi.js b/frontend/composables/useApi.js index fe84ac3..2064526 100644 --- a/frontend/composables/useApi.js +++ b/frontend/composables/useApi.js @@ -459,8 +459,8 @@ export const useApi = () => { } // 获取数据库密钥 - const getDbKey = async () => { - return await request('/get_db_key') + const getKeys = async () => { + return await request('/get_keys') } // 获取图片密钥 @@ -509,7 +509,7 @@ export const useApi = () => { getWrappedAnnual, getWrappedAnnualMeta, getWrappedAnnualCard, - getDbKey, + getKeys, getImageKey, getWxStatus, } diff --git a/frontend/pages/decrypt.vue b/frontend/pages/decrypt.vue index 874c4a9..4d60b64 100644 --- a/frontend/pages/decrypt.vue +++ b/frontend/pages/decrypt.vue @@ -434,7 +434,7 @@ import { ref, reactive, computed, onMounted, onBeforeUnmount } from 'vue' import { useApi } from '~/composables/useApi' -const { decryptDatabase, saveMediaKeys, getSavedKeys, getDbKey, getImageKey, getWxStatus } = useApi() +const { decryptDatabase, saveMediaKeys, getSavedKeys, getKeys, getImageKey, getWxStatus } = useApi() const loading = ref(false) const error = ref('') @@ -541,7 +541,7 @@ const handleGetDbKey = async () => { warning.value = '正在启动微信,请确保微信未开启“自动登录”,并在弹窗中正常登录。' - const res = await getDbKey() + const res = await getKeys() if (res && res.status === 0) { if (res.data?.db_key) { @@ -703,13 +703,13 @@ const handleDecrypt = async () => { if (!validateForm()) { return } - + loading.value = true error.value = '' warning.value = '' resetDbDecryptProgress() - + try { const canSse = process.client && typeof window !== 'undefined' && typeof EventSource !== 'undefined' @@ -730,7 +730,6 @@ const handleDecrypt = async () => { if (accounts.length > 0) mediaAccount.value = accounts[0] } catch (e) {} - clearManualKeys() currentStep.value = 1 await prefillKeysForAccount(mediaAccount.value) @@ -827,7 +826,6 @@ const handleDecrypt = async () => { loading.value = false if (data.status === 'completed') { - clearManualKeys() currentStep.value = 1 await prefillKeysForAccount(mediaAccount.value) diff --git a/src/wechat_decrypt_tool/key_service.py b/src/wechat_decrypt_tool/key_service.py index f5126a0..215003d 100644 --- a/src/wechat_decrypt_tool/key_service.py +++ b/src/wechat_decrypt_tool/key_service.py @@ -204,13 +204,16 @@ class WeChatKeyFetcher: logger.info("Cleaning up hook...") wx_key.cleanup_hook() + aes_key = None # gemini !!! ??? xor_key = None + if found_md5_data and "|" in found_md5_data: - _, xor_key_dec = found_md5_data.split("|") + aes_key, xor_key_dec = found_md5_data.split("|") xor_key = f"0x{int(xor_key_dec):02X}" return { "db_key": found_db_key, + "aes_key": aes_key, "xor_key": xor_key } diff --git a/src/wechat_decrypt_tool/routers/keys.py b/src/wechat_decrypt_tool/routers/keys.py index 4d86937..2a4da9a 100644 --- a/src/wechat_decrypt_tool/routers/keys.py +++ b/src/wechat_decrypt_tool/routers/keys.py @@ -53,14 +53,14 @@ async def get_saved_keys(account: Optional[str] = None): } -@router.get("/api/get_db_key", summary="自动获取微信数据库与图片密钥") +@router.get("/api/get_keys", summary="自动获取微信数据库与图片密钥") async def get_wechat_db_key(): """ 自动流程: 1. 结束微信进程 2. 启动微信 3. 根据版本注入双 Hook - 4. 抓取 DB 与 图片密钥并返回 + 4. 抓取 DB 与 图片密钥(AES + XOR)并返回 """ try: keys_data = get_db_key_workflow() @@ -68,7 +68,7 @@ async def get_wechat_db_key(): return { "status": 0, "errmsg": "ok", - "data": keys_data # 包含 db_key 和 xor_key + "data": keys_data # 现在完美包含了 db_key, aes_key, xor_key } except TimeoutError: @@ -84,7 +84,7 @@ async def get_wechat_db_key(): "data": {} } - + @router.get("/api/get_image_key", summary="获取并保存微信图片密钥") async def get_image_key(account: Optional[str] = None):