AddFriendByWxid.cpp 2.5 KB
Newer Older
L
ljc545w 已提交
1 2 3
#include "pch.h"

// ӺCALL1ƫ
L
ljc545w 已提交
4
#define AddFriendByWxidCall1Offset 0x78784540 - 0x786A0000
L
ljc545w 已提交
5
// ӺCALL2ƫ
L
ljc545w 已提交
6
#define AddFriendByWxidCall2Offset 0x78E11890 - 0x786A0000
L
ljc545w 已提交
7
// ӺCALL3ƫ
L
ljc545w 已提交
8
#define AddFriendByWxidCall3Offset 0x78E11980 - 0x786A0000
L
ljc545w 已提交
9
// ӺCALL4ƫ
L
ljc545w 已提交
10
#define AddFriendByWxidCall4Offset 0x78B03970 - 0x786A0000
L
ljc545w 已提交
11
// ӺѲƫ
L
ljc545w 已提交
12
#define AddFriendByWxidParamOffset 0x7AA068F4 - 0x786A0000
L
ljc545w 已提交
13 14 15 16 17 18 19 20 21 22 23

struct AddFriendByWxidParamStruct {
	DWORD fill0 = 0x0;
	DWORD fill1 = 0x0;
	DWORD fill2 = -0x1;
	DWORD fill3 = 0x0;
	DWORD fill4 = 0x0;
	DWORD fill5 = 0xF;
	char nullbuffer[0xC] = { 0 };
};

24
#ifndef USE_SOCKET
L
ljc545w 已提交
25 26 27 28
struct AddFriendByWxidStruct {
	wchar_t* wxid;
	wchar_t* message;
};
29
#endif
L
ljc545w 已提交
30

31
#ifndef USE_SOCKET
L
ljc545w 已提交
32 33 34 35 36
BOOL AddFriendByWxidRemote(LPVOID lpParameter) {
	AddFriendByWxidStruct* afbws = (AddFriendByWxidStruct*)lpParameter;
	BOOL isSuccess = AddFriendByWxid(afbws->wxid, afbws->message);
	return isSuccess;
}
37
#endif
L
ljc545w 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

BOOL __stdcall AddFriendByWxid(wchar_t* wxid,wchar_t* message) {
	DWORD WeChatWinBase = GetWeChatWinBase();
	DWORD AddFriendByWxidCall1 = WeChatWinBase + AddFriendByWxidCall1Offset;
	DWORD AddFriendByWxidCall2 = WeChatWinBase + AddFriendByWxidCall2Offset;
	DWORD AddFriendByWxidCall3 = WeChatWinBase + AddFriendByWxidCall3Offset;
	DWORD AddFriendByWxidCall4 = WeChatWinBase + AddFriendByWxidCall4Offset;
	DWORD AddFriendByWxidParamAddr = WeChatWinBase + AddFriendByWxidParamOffset;

	WxBaseStruct pwxid(wxid);
	AddFriendByWxidParamStruct AddFriendParam;

	char* swxid = new char[wcslen(wxid) + 1];
	ZeroMemory(swxid, wcslen(wxid) + 1);
	WideCharToMultiByte(CP_ACP, 0, wxid, -1, swxid, wcslen(wxid), NULL, NULL);
	pwxid.fill1 = (DWORD)swxid;
	pwxid.fill2 = wcslen(wxid);
	wchar_t* pmessage = message ? message : (wchar_t*)L"";
	BOOL isSuccess = 0x0;

	__asm {
		pushad;
		pushfd;
		mov edi, 0x6;
		mov esi, 0x0;
		sub esp, 0x18;
		mov eax, esp;
		mov dword ptr[eax], 0x0;
		mov dword ptr[eax + 0x14], 0xF;
		mov dword ptr[eax + 0x10], 0x0;
		sub esp, 0x18;
		lea eax, AddFriendParam;
		mov ecx, esp;
		push eax;
		call AddFriendByWxidCall1;
		push esi;
		push edi;
		mov edi, pmessage;
		sub esp, 0x14;
		mov ecx, esp;
		push - 0x1;
		mov eax, edi;
		push eax;
		call AddFriendByWxidCall2;
		push 0x2;
		lea eax, pwxid;
		sub esp, 0x14;
		mov ecx, esp;
		push eax;
		call AddFriendByWxidCall3;
		mov eax, [AddFriendByWxidParamAddr];
		mov eax, [eax];
		mov ecx, eax;
		call AddFriendByWxidCall4;
		mov isSuccess, eax;
		popfd;
		popad;
	}
	return isSuccess;
}