diff --git a/WeChatFerry/spy/funcs.cpp b/WeChatFerry/spy/funcs.cpp index 870662b..33d9ccf 100644 --- a/WeChatFerry/spy/funcs.cpp +++ b/WeChatFerry/spy/funcs.cpp @@ -408,3 +408,18 @@ OcrResult_t GetOcrResult(string path) return ret; } + +void RefreshLoginQrcode() { + DWORD refreshLoginQrcodeCall1 = g_WeChatWinDllAddr + g_WxCalls.rlq.call1; + DWORD refreshLoginQrcodeCall2 = g_WeChatWinDllAddr + g_WxCalls.rlq.call2; + + __asm { + pushad; + pushfd; + call refreshLoginQrcodeCall1; + mov ecx, eax; + call refreshLoginQrcodeCall2; + popfd; + popad; + } +} diff --git a/WeChatFerry/spy/load_calls.cpp b/WeChatFerry/spy/load_calls.cpp index 77f8105..d1a9cbb 100644 --- a/WeChatFerry/spy/load_calls.cpp +++ b/WeChatFerry/spy/load_calls.cpp @@ -41,7 +41,9 @@ WxCalls_t wxCalls = { /* call1, call2, call3 */ {0x80A800, 0x80F270, 0x13DA3E0}, /* call1, call2 */ - {0xF59E40, 0xCE6730} + {0xF59E40, 0xCE6730}, + /* call1, call2 */ + {0xAE9DB0, 0xCDA6F0} }; int LoadCalls(const wchar_t *version, WxCalls_t *calls) diff --git a/WeChatFerry/spy/spy_types.h b/WeChatFerry/spy/spy_types.h index 23436b0..6e56f9d 100644 --- a/WeChatFerry/spy/spy_types.h +++ b/WeChatFerry/spy/spy_types.h @@ -156,6 +156,11 @@ typedef struct CallFm { DWORD call2; } CallFm_t; +typedef struct CallRfLoginQr { + DWORD call1; + DWORD call2; +} CallRfLoginQr_t; + typedef struct WxCalls { DWORD login; // 登录状态 UserInfoCall_t ui; // 用户信息 @@ -179,6 +184,7 @@ typedef struct WxCalls { CallInviteCM_t irm; // 邀请群成员 CallOcr_t ocr; // OCR CallFm_t fm; // 转发消息 + CallRfLoginQr_t rlq; // 刷新登录二维码 } WxCalls_t; struct WxString {