ForwardMessage.cpp 1.1 KB
Newer Older
1 2 3 4 5 6 7 8 9
#include "pch.h"

#define ForwardMessageCall1Offset 0x771980
#define ForwardMessageCall2Offset 0x521760

#ifndef USE_SOCKET
struct ForwardMessageStruct
{
    wchar_t *wxid;
L
ljc545w 已提交
10
    unsigned long long msgid;
11 12 13 14 15
};

BOOL ForwardMessageRemote(LPVOID lpParameter)
{
    ForwardMessageStruct *fms = (ForwardMessageStruct *)lpParameter;
L
ljc545w 已提交
16
    return ForwardMessage(fms->wxid, fms->msgid);
17 18 19
}
#endif

20
BOOL __stdcall ForwardMessage(wchar_t *wxid, unsigned long long msgid)
21 22 23 24
{
    DWORD WeChatWinBase = GetWeChatWinBase();
    DWORD ForwardMessageCall1 = WeChatWinBase + ForwardMessageCall1Offset;
    DWORD ForwardMessageCall2 = WeChatWinBase + ForwardMessageCall2Offset;
25 26 27 28
    int dbIndex = 0;
    int localId = GetLocalIdByMsgId(msgid, dbIndex);
    if (localId == 0)
        return FALSE;
29 30 31 32 33
    WxString p_wxid(wxid);
    int isSuccess = 0;
    __asm {
		pushad;
		pushfd;
34
		mov eax, dword ptr ds:[dbIndex];
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
		push eax;
		mov ecx, dword ptr ds:[localId];
		push ecx;
		lea edi, p_wxid;
		sub esp, 0x14;
		mov ecx, esp;
		push edi;
		call ForwardMessageCall1;
		call ForwardMessageCall2;
		movzx eax,al;
		mov isSuccess,eax;
		add esp, 0x1C;
		popfd;
		popad;
    }
    return isSuccess == 0x1;
}