From d5487cec0fa6992e35750b157fcb8b8f64e26b30 Mon Sep 17 00:00:00 2001 From: Jinwei Huang Date: Thu, 25 Jan 2024 22:39:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WeChatFerry/spy/funcs.cpp | 12 ++++++++++++ WeChatFerry/spy/load_calls.cpp | 4 ++-- WeChatFerry/spy/spy_types.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/WeChatFerry/spy/funcs.cpp b/WeChatFerry/spy/funcs.cpp index 33d9ccf..ad74649 100644 --- a/WeChatFerry/spy/funcs.cpp +++ b/WeChatFerry/spy/funcs.cpp @@ -423,3 +423,15 @@ void RefreshLoginQrcode() { popad; } } + +string GetLoginUrl() { + // 判断是否登录, 已登录直接返回空字符 + int isLogin = (int)GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login); + if (isLogin) { + return ""; + } + + DWORD loginUrlAddr = g_WeChatWinDllAddr + g_WxCalls.rlq.url; + string qrcodeLoginUrl = "http://weixin.qq.com/x/" + string(reinterpret_cast(*(DWORD*)loginUrlAddr)); + return qrcodeLoginUrl; +} diff --git a/WeChatFerry/spy/load_calls.cpp b/WeChatFerry/spy/load_calls.cpp index d1a9cbb..4c0cbfe 100644 --- a/WeChatFerry/spy/load_calls.cpp +++ b/WeChatFerry/spy/load_calls.cpp @@ -42,8 +42,8 @@ WxCalls_t wxCalls = { {0x80A800, 0x80F270, 0x13DA3E0}, /* call1, call2 */ {0xF59E40, 0xCE6730}, - /* call1, call2 */ - {0xAE9DB0, 0xCDA6F0} + /* call1, call2, url */ + {0xAE9DB0, 0xCDA6F0, 0x3040DE8} }; int LoadCalls(const wchar_t *version, WxCalls_t *calls) diff --git a/WeChatFerry/spy/spy_types.h b/WeChatFerry/spy/spy_types.h index 6e56f9d..08fa4ae 100644 --- a/WeChatFerry/spy/spy_types.h +++ b/WeChatFerry/spy/spy_types.h @@ -159,6 +159,7 @@ typedef struct CallFm { typedef struct CallRfLoginQr { DWORD call1; DWORD call2; + DWORD url; } CallRfLoginQr_t; typedef struct WxCalls {