From 02030a4af06bea18fd9d81a602c9f34834c4b560 Mon Sep 17 00:00:00 2001 From: Changhua Date: Wed, 26 Jun 2024 22:37:52 +0800 Subject: [PATCH] Impl add chatroom member --- WeChatFerry/spy/chatroom_mgmt.cpp | 58 +++++++++++-------------------- WeChatFerry/spy/rpc_server.cpp | 4 +++ 2 files changed, 24 insertions(+), 38 deletions(-) diff --git a/WeChatFerry/spy/chatroom_mgmt.cpp b/WeChatFerry/spy/chatroom_mgmt.cpp index 7a6e4b9..5bcb35e 100644 --- a/WeChatFerry/spy/chatroom_mgmt.cpp +++ b/WeChatFerry/spy/chatroom_mgmt.cpp @@ -10,23 +10,22 @@ using namespace std; extern WxCalls_t g_WxCalls; -extern UINT64 g_WeChatWinDllAddr; -#if 0 +extern QWORD g_WeChatWinDllAddr; + +typedef QWORD (*funcGetChatRoomMgr_t)(); +typedef QWORD (*funcAddMemberToChatRoom_t)(QWORD, QWORD, QWORD, QWORD); + int AddChatroomMember(string roomid, string wxids) { + int status = -1; + if (roomid.empty() || wxids.empty()) { LOG_ERROR("Empty roomid or wxids."); - return -1; + return status; } - int rv = 0; - DWORD armCall1 = g_WeChatWinDllAddr + g_WxCalls.arm.call1; - DWORD armCall2 = g_WeChatWinDllAddr + g_WxCalls.arm.call2; - DWORD armCall3 = g_WeChatWinDllAddr + g_WxCalls.arm.call3; - - DWORD temp = 0; - wstring wsRoomid = String2Wstring(roomid); - WxString wxRoomid(wsRoomid); + funcGetChatRoomMgr_t funcGetChatRoomMgr = (funcGetChatRoomMgr_t)(g_WeChatWinDllAddr + g_WxCalls.arm.call1); + funcAddMemberToChatRoom_t funcAddMemberToChatRoom = (funcAddMemberToChatRoom_t)(g_WeChatWinDllAddr + g_WxCalls.arm.call2); vector vMembers; vector vWxMembers; @@ -35,37 +34,20 @@ int AddChatroomMember(string roomid, string wxids) wstring wstr; getline(wss, wstr, L','); vMembers.push_back(wstr); - WxString txtMember(vMembers.back()); - vWxMembers.push_back(txtMember); + WxString wxMember(vMembers.back()); + vWxMembers.push_back(wxMember); } - LOG_DEBUG("Adding {} members[{}] to {}", vWxMembers.size(), wxids.c_str(), roomid.c_str()); - __asm { - pushad; - pushfd; - call armCall1; - sub esp, 0x8; - mov temp, eax; - mov ecx, esp; - mov dword ptr[ecx], 0x0; - mov dword ptr[ecx + 4], 0x0; - test esi, esi; - sub esp, 0x14; - mov ecx, esp; - lea eax, wxRoomid; - push eax; - call armCall2; - mov ecx, temp; - lea eax, vWxMembers; - push eax; - call armCall3; - mov rv, eax; - popfd; - popad; - } - return rv; + QWORD temp[2] = { 0 }; + WxString *pWxRoomid = NewWxStringFromStr(roomid); + QWORD pMembers = (QWORD) & ((RawVector_t *)&vWxMembers)->start; + + QWORD mgr = funcGetChatRoomMgr(); + status = (int)funcAddMemberToChatRoom(mgr, pMembers, (QWORD)pWxRoomid, (QWORD)temp); + return status; } +#if 0 int DelChatroomMember(string roomid, string wxids) { if (roomid.empty() || wxids.empty()) { diff --git a/WeChatFerry/spy/rpc_server.cpp b/WeChatFerry/spy/rpc_server.cpp index 92a6e00..cd248cd 100644 --- a/WeChatFerry/spy/rpc_server.cpp +++ b/WeChatFerry/spy/rpc_server.cpp @@ -768,6 +768,7 @@ bool func_exec_ocr(char *path, uint8_t *out, size_t *len) *len = stream.bytes_written; return true; } +#endif bool func_add_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len) { @@ -793,6 +794,7 @@ bool func_add_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len) return true; } +#if 0 bool func_del_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len) { Response rsp = Response_init_default; @@ -973,10 +975,12 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len ret = func_exec_ocr(req.msg.str, out, out_len); break; } +#endif case Functions_FUNC_ADD_ROOM_MEMBERS: { ret = func_add_room_members(req.msg.m.roomid, req.msg.m.wxids, out, out_len); break; } +#if 0 case Functions_FUNC_DEL_ROOM_MEMBERS: { ret = func_del_room_members(req.msg.m.roomid, req.msg.m.wxids, out, out_len); break;