commit
f59cdd9816
@ -408,3 +408,30 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
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<char*>(*(DWORD*)loginUrlAddr));
|
||||
return qrcodeLoginUrl;
|
||||
}
|
||||
|
@ -41,7 +41,9 @@ WxCalls_t wxCalls = {
|
||||
/* call1, call2, call3 */
|
||||
{0x80A800, 0x80F270, 0x13DA3E0},
|
||||
/* call1, call2 */
|
||||
{0xF59E40, 0xCE6730}
|
||||
{0xF59E40, 0xCE6730},
|
||||
/* call1, call2, url */
|
||||
{0xAE9DB0, 0xCDA6F0, 0x3040DE8}
|
||||
};
|
||||
|
||||
int LoadCalls(const wchar_t *version, WxCalls_t *calls)
|
||||
|
@ -156,6 +156,12 @@ typedef struct CallFm {
|
||||
DWORD call2;
|
||||
} CallFm_t;
|
||||
|
||||
typedef struct CallRfLoginQr {
|
||||
DWORD call1;
|
||||
DWORD call2;
|
||||
DWORD url;
|
||||
} CallRfLoginQr_t;
|
||||
|
||||
typedef struct WxCalls {
|
||||
DWORD login; // 登录状态
|
||||
UserInfoCall_t ui; // 用户信息
|
||||
@ -179,6 +185,7 @@ typedef struct WxCalls {
|
||||
CallInviteCM_t irm; // 邀请群成员
|
||||
CallOcr_t ocr; // OCR
|
||||
CallFm_t fm; // 转发消息
|
||||
CallRfLoginQr_t rlq; // 刷新登录二维码
|
||||
} WxCalls_t;
|
||||
|
||||
struct WxString {
|
||||
|
Loading…
Reference in New Issue
Block a user