From 1dc476fb5b455ba824572830ea400f4ebc73c859 Mon Sep 17 00:00:00 2001 From: Changhua Date: Thu, 27 Jun 2024 21:08:37 +0800 Subject: [PATCH] Impl delete chatroom members --- WeChatFerry/spy/chatroom_mgmt.cpp | 46 ++++++++++--------------------- WeChatFerry/spy/rpc_server.cpp | 4 +-- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/WeChatFerry/spy/chatroom_mgmt.cpp b/WeChatFerry/spy/chatroom_mgmt.cpp index 58df716..0c01ccd 100644 --- a/WeChatFerry/spy/chatroom_mgmt.cpp +++ b/WeChatFerry/spy/chatroom_mgmt.cpp @@ -47,22 +47,17 @@ int AddChatroomMember(string roomid, string wxids) return status; } -#if 0 int DelChatroomMember(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 drmCall1 = g_WeChatWinDllAddr + g_WxCalls.drm.call1; - DWORD drmCall2 = g_WeChatWinDllAddr + g_WxCalls.drm.call2; - DWORD drmCall3 = g_WeChatWinDllAddr + g_WxCalls.drm.call3; - - DWORD temp = 0; - wstring wsRoomid = String2Wstring(roomid); - WxString wxRoomid(wsRoomid); + funcGetChatRoomMgr_t GetChatRoomMgr = (funcGetChatRoomMgr_t)(g_WeChatWinDllAddr + g_WxCalls.drm.call1); + funcDelMemberFromChatRoom_t DelMembers = (funcDelMemberFromChatRoom_t)(g_WeChatWinDllAddr + g_WxCalls.drm.call2); vector vMembers; vector vWxMembers; @@ -71,32 +66,19 @@ int DelChatroomMember(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("Deleting {} members[{}] from {}", vWxMembers.size(), wxids.c_str(), roomid.c_str()); - __asm { - pushad; - pushfd; - call drmCall1; - sub esp, 0x14; - mov esi, eax; - mov ecx, esp; - lea edi, wxRoomid; - push edi; - call drmCall2; - mov ecx, esi; - lea eax, vWxMembers; - push eax; - call drmCall3; - mov rv, eax; - popfd; - popad; - } - return rv; + WxString *pWxRoomid = NewWxStringFromStr(roomid); + QWORD pMembers = (QWORD) & ((RawVector_t *)&vWxMembers)->start; + + QWORD mgr = GetChatRoomMgr(); + status = (int)DelMembers(mgr, pMembers, (QWORD)pWxRoomid); + return status; } +#if 0 int InviteChatroomMember(string roomid, string wxids) { wstring wsRoomid = String2Wstring((roomid)); diff --git a/WeChatFerry/spy/rpc_server.cpp b/WeChatFerry/spy/rpc_server.cpp index cd248cd..6756362 100644 --- a/WeChatFerry/spy/rpc_server.cpp +++ b/WeChatFerry/spy/rpc_server.cpp @@ -794,7 +794,6 @@ 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; @@ -819,6 +818,7 @@ bool func_del_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len) return true; } +#if 0 bool func_invite_room_members(char *roomid, char *wxids, uint8_t *out, size_t *len) { Response rsp = Response_init_default; @@ -980,11 +980,11 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len 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; } +#if 0 case Functions_FUNC_INV_ROOM_MEMBERS: { ret = func_invite_room_members(req.msg.m.roomid, req.msg.m.wxids, out, out_len); break;