Impl refresh login qrcode. Close #113.

This commit is contained in:
Changhua 2024-02-14 15:21:11 +08:00
parent a70582372a
commit 31c2058db1
4 changed files with 35 additions and 12 deletions

View File

@ -30,6 +30,7 @@ enum Functions {
FUNC_DOWNLOAD_ATTACH = 0x54;
FUNC_GET_CONTACT_INFO = 0x55;
FUNC_REVOKE_MSG = 0x56;
FUNC_REFRESH_QRCODE = 0x57;
FUNC_DECRYPT_IMAGE = 0x60;
FUNC_EXEC_OCR = 0x61;
FUNC_ADD_ROOM_MEMBERS = 0x70;

View File

@ -409,10 +409,17 @@ OcrResult_t GetOcrResult(string path)
return ret;
}
void RefreshLoginQrcode() {
string GetLoginUrl()
{
if (GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login) == 1) {
return ""; // 已登录直接返回空字符
}
DWORD refreshLoginQrcodeCall1 = g_WeChatWinDllAddr + g_WxCalls.rlq.call1;
DWORD refreshLoginQrcodeCall2 = g_WeChatWinDllAddr + g_WxCalls.rlq.call2;
DWORD loginUrlAddr = g_WeChatWinDllAddr + g_WxCalls.rlq.url;
// 刷新二维码
__asm {
pushad;
pushfd;
@ -422,16 +429,8 @@ void RefreshLoginQrcode() {
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;
// 获取二维码链接
string url = "http://weixin.qq.com/x/" + string(reinterpret_cast<char *>(*(DWORD *)loginUrlAddr));
return url;
}

View File

@ -9,3 +9,4 @@ int RefreshPyq(uint64_t id);
int DownloadAttach(uint64_t id, std::string thumb, std::string extra);
int RevokeMsg(uint64_t id);
OcrResult_t GetOcrResult(std::string path);
string GetLoginUrl();

View File

@ -689,6 +689,24 @@ bool func_revoke_msg(uint64_t id, uint8_t *out, size_t *len)
return true;
}
bool func_refresh_qrcode(uint8_t *out, size_t *len)
{
Response rsp = Response_init_default;
rsp.func = Functions_FUNC_REFRESH_QRCODE;
rsp.which_msg = Response_str_tag;
rsp.msg.str = (char *)GetLoginUrl().c_str();
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
if (!pb_encode(&stream, Response_fields, &rsp)) {
LOG_ERROR("Encoding failed: {}", PB_GET_ERROR(&stream));
return false;
}
*len = stream.bytes_written;
return true;
}
bool func_decrypt_image(DecPath dec, uint8_t *out, size_t *len)
{
Response rsp = Response_init_default;
@ -926,6 +944,10 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len
ret = func_revoke_msg(req.msg.ui64, out, out_len);
break;
}
case Functions_FUNC_REFRESH_QRCODE: {
ret = func_refresh_qrcode(out, out_len);
break;
}
case Functions_FUNC_DECRYPT_IMAGE: {
ret = func_decrypt_image(req.msg.dec, out, out_len);
break;