#include "accept_new_friend.h" #include "load_calls.h" typedef struct NewFriendParam { DWORD handle; DWORD *status; DWORD statusEnd1; DWORD statusEnd2; char buffer[0x3C]; } NewFriendParam_t; extern WxCalls_t g_WxCalls; extern DWORD g_WeChatWinDllAddr; BOOL AcceptNewFriend(std::wstring v3, std::wstring v4) { BOOL isSucceeded = false; DWORD acceptNewFriendCall1 = g_WeChatWinDllAddr + g_WxCalls.anf.call1; DWORD acceptNewFriendCall2 = g_WeChatWinDllAddr + g_WxCalls.anf.call2; DWORD acceptNewFriendHandle = g_WeChatWinDllAddr + g_WxCalls.anf.handle; char buffer[0x94] = { 0 }; NewFriendParam_t param = { 0 }; DWORD status[9] = { 0xB2, (DWORD)¶m, 0xB5, (DWORD)¶m, 0xB0, (DWORD)¶m, 0xB1, (DWORD)¶m, 0x00 }; param.handle = acceptNewFriendHandle; param.status = status; param.statusEnd1 = (DWORD)&status[8]; param.statusEnd2 = (DWORD)&status[8]; NewFriendParam_t *pParam = ¶m; __asm { pushad; pushfd; push 0x0; push 0x6; sub esp, 0x14; mov ecx, esp; lea eax, v4; push eax; call acceptNewFriendCall1; sub esp, 0x8; push 0x0; lea eax, buffer; push eax; lea eax, v3; push eax; mov ecx, pParam; call acceptNewFriendCall2; mov isSucceeded, eax; popfd; popad; } return isSucceeded; }