68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#include "framework.h"
|
|
|
|
#include "accept_new_friend.h"
|
|
#include "load_calls.h"
|
|
#include "log.h"
|
|
#include "util.h"
|
|
|
|
extern WxCalls_t g_WxCalls;
|
|
extern DWORD g_WeChatWinDllAddr;
|
|
|
|
int AcceptNewFriend(std::string v3, std::string v4, int scene)
|
|
{
|
|
int success = 0;
|
|
|
|
DWORD acceptNewFriendCall1 = g_WeChatWinDllAddr + g_WxCalls.anf.call1;
|
|
DWORD acceptNewFriendCall2 = g_WeChatWinDllAddr + g_WxCalls.anf.call2;
|
|
DWORD acceptNewFriendCall3 = g_WeChatWinDllAddr + g_WxCalls.anf.call3;
|
|
DWORD acceptNewFriendCall4 = g_WeChatWinDllAddr + g_WxCalls.anf.call4;
|
|
|
|
char buffer[0x40] = { 0 };
|
|
char nullbuffer[0x3CC] = { 0 };
|
|
|
|
LOG_DEBUG("\nv3: {}\nv4: {}\nscene: {}", v3, v4, scene);
|
|
WxString_t wxV3 = { 0 };
|
|
WxString_t wxV4 = { 0 };
|
|
std::wstring wsV3 = String2Wstring(v3);
|
|
std::wstring wsV4 = String2Wstring(v4);
|
|
|
|
wxV3.text = (wchar_t *)wsV3.c_str();
|
|
wxV3.size = wsV3.size();
|
|
wxV3.capacity = wsV3.capacity();
|
|
|
|
wxV4.text = (wchar_t *)wsV4.c_str();
|
|
wxV4.size = wsV4.size();
|
|
wxV4.capacity = wsV4.capacity();
|
|
|
|
__asm {
|
|
pushad;
|
|
pushfd;
|
|
lea ecx, buffer;
|
|
call acceptNewFriendCall1;
|
|
mov esi, 0x0;
|
|
mov edi, scene;
|
|
push esi;
|
|
push edi;
|
|
sub esp, 0x14;
|
|
mov ecx, esp;
|
|
lea eax, wxV4;
|
|
push eax;
|
|
call acceptNewFriendCall2;
|
|
sub esp, 0x8;
|
|
push 0x0;
|
|
lea eax, nullbuffer;
|
|
push eax;
|
|
lea eax, wxV3;
|
|
push eax;
|
|
lea ecx, buffer;
|
|
call acceptNewFriendCall3;
|
|
mov success, eax;
|
|
lea ecx, buffer;
|
|
call acceptNewFriendCall4;
|
|
popfd;
|
|
popad;
|
|
}
|
|
|
|
return success; // 成功返回 1
|
|
}
|