diff --git a/WeChatFerry/spy/message_sender.cpp b/WeChatFerry/spy/message_sender.cpp index 103ea27..b92d639 100644 --- a/WeChatFerry/spy/message_sender.cpp +++ b/WeChatFerry/spy/message_sender.cpp @@ -51,7 +51,7 @@ Sender::Sender() func_free_mmreader = reinterpret_cast(g_WeChatWinDllAddr + OsSend::FREE_MM_READER); func_send_rich_text = reinterpret_cast(g_WeChatWinDllAddr + OsSend::RICH_TEXT); func_send_pat = reinterpret_cast(g_WeChatWinDllAddr + OsSend::PAT); - func_forward = reinterpret_cast(g_WeChatWinDllAddr + OS_FORWARD_MSG); + func_forward = reinterpret_cast(g_WeChatWinDllAddr + OsSend::FORWARD); func_get_emotion_mgr = reinterpret_cast(g_WeChatWinDllAddr + OsSend::EMOTION_MGR); func_send_emotion = reinterpret_cast(g_WeChatWinDllAddr + OsSend::EMOTION); func_send_xml = reinterpret_cast(g_WeChatWinDllAddr + OsSend::XML); @@ -295,9 +295,10 @@ int Sender::forward(QWORD msgid, const std::string &receiver) LARGE_INTEGER l; l.HighPart = dbIdx; l.LowPart = static_cast(localId); - auto wxReceiver = new_wx_string(receiver); - return static_cast(func_forward(reinterpret_cast(wxReceiver.get()), l.QuadPart, 0x4, 0x0)); + WxStringHolder holderReceiver(receiver); + + return static_cast(func_forward(&holderReceiver.wx, l.QuadPart, 0x4, 0x0)); } // RPC 方法 diff --git a/WeChatFerry/spy/message_sender.h b/WeChatFerry/spy/message_sender.h index 1f509fd..44cc4ce 100644 --- a/WeChatFerry/spy/message_sender.h +++ b/WeChatFerry/spy/message_sender.h @@ -52,7 +52,7 @@ private: QWORD, QWORD); using SendRichText_t = QWORD (*)(QWORD, WxString *, char *); using SendPat_t = QWORD (*)(WxString *, WxString *); - using Forward_t = QWORD (*)(QWORD, QWORD, QWORD, QWORD); + using Forward_t = QWORD (*)(WxString *, QWORD, QWORD, QWORD); using GetEmotionMgr_t = QWORD (*)(); using SendEmotion_t = QWORD (*)(QWORD, WxString *, QWORD *, WxString *, QWORD, QWORD *, QWORD, QWORD *); using XmlBufSign_t = QWORD (*)(QWORD, QWORD, QWORD); diff --git a/WeChatFerry/spy/rpc_server.cpp b/WeChatFerry/spy/rpc_server.cpp index 74afb5f..0c5224c 100644 --- a/WeChatFerry/spy/rpc_server.cpp +++ b/WeChatFerry/spy/rpc_server.cpp @@ -255,7 +255,7 @@ const std::unordered_map RpcServer::rpcFu { Functions_FUNC_SEND_EMOTION, [](const Request &r, uint8_t *out, size_t *len) { return RpcServer::getInstance().sender_.rpc_send_emotion(r.msg.file, out, len); } }, { Functions_FUNC_SEND_RICH_TXT, [](const Request &r, uint8_t *out, size_t *len) { return RpcServer::getInstance().sender_.rpc_send_rich_text(r.msg.rt, out, len); } }, { Functions_FUNC_SEND_PAT_MSG, [](const Request &r, uint8_t *out, size_t *len) { return RpcServer::getInstance().sender_.rpc_send_pat(r.msg.pm, out, len); } }, - // { Functions_FUNC_FORWARD_MSG, [](const Request &r, uint8_t *out, size_t *len) { return sender.rpc_forward(r.msg.fm, out, len); } }, + { Functions_FUNC_FORWARD_MSG, [](const Request &r, uint8_t *out, size_t *len) { return RpcServer::getInstance().sender_.rpc_forward(r.msg.fm, out, len); } }, // { Functions_FUNC_EXEC_DB_QUERY, [](const Request &r, uint8_t *out, size_t *len) { return db::rpc_exec_db_query(r.msg.query, out, len); } }, // { Functions_FUNC_ACCEPT_FRIEND, [](const Request &r, uint8_t *out, size_t *len) { return contact::rpc_accept_friend(r.msg.v, out, len); } }, // { Functions_FUNC_RECV_TRANSFER, [](const Request &r, uint8_t *out, size_t *len) { return misc::rpc_receive_transfer(r.msg.tf, out, len); } },