Compare commits

...
Author SHA1 Message Date
hugy 3da32cce12 fix: login state cloase issue #149 2023-05-29 18:24:37 +08:00
hugy d1ce40c216 fix:还原 2023-05-29 17:53:15 +08:00
hugy 3cd6953920 feat: 撤回消息 2023-05-29 17:47:36 +08:00
hugy 83886fe464 fix: 修复错误 2023-05-29 09:35:08 +08:00
8 changed files with 54 additions and 5 deletions
+1 -1
View File
@@ -526,7 +526,7 @@ DWORD GetPIDForProcess(wchar_t* process)
if (!hSnapshot) {
return 0;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
pe32.dwSize = sizeof(PROCESSENTRY32W);
for (working = Process32FirstW(hSnapshot, &pe32); working; working = Process32NextW(hSnapshot, &pe32))
{
if (!wcscmp(pe32.szExeFile, process))
+1 -1
View File
@@ -186,7 +186,7 @@ int AccountMgr::CheckLogin() {
POPAD
}
if (service_addr) {
success = *(DWORD *)(service_addr + 0x4C8);
success = *(DWORD *)(service_addr + 0x4E0);
}
return success;
}
+1
View File
@@ -74,6 +74,7 @@ typedef enum HTTP_API_ROUTE {
WECHAT_GET_QRCODE,
WECHAT_INVITE_MEMBERS,
WECHAT_GET_MEMBER_PROFILE,
WECHAT_REVOKE_MSG,
} WECHAT_HTTP_APIS,
*PWECHAT_HTTP_APIS;
+7
View File
@@ -614,6 +614,13 @@ string Dispatch(struct mg_connection *c, struct mg_http_message *hm) {
break;
}
case WECHAT_REVOKE_MSG:{
ULONG64 msg_id = GetULong64Param(j_param, "msgId");
int success = g_context.misc_mgr->RevokeMsg(msg_id);
json ret_data = {{"code", success}, {"result", "OK"}};
ret = ret_data.dump();
break;
}
default:
json ret_data = {{"result", "ERROR"}, {"msg", "not support api"}};
ret = ret_data.dump();
+41
View File
@@ -415,4 +415,45 @@ int MiscMgr::SearchContactNetScene(wchar_t *keyword,UserInfo ** user) {
return success;
}
int MiscMgr::RevokeMsg(ULONG64 msg_id){
int success = -1;
char chat_msg[0x2D8] = {0};
DWORD new_chat_msg_addr = base_addr_ + WX_NEW_CHAT_MSG_OFFSET;
DWORD free_addr = base_addr_ + WX_FREE_CHAT_MSG_INSTANCE_COUNTER_OFFSET;
DWORD get_chat_mgr_addr = base_addr_ + WX_CHAT_MGR_OFFSET;
DWORD get_by_local_Id_addr = base_addr_ + WX_GET_MGR_BY_PREFIX_LOCAL_ID_OFFSET;
DWORD revoke_msg_addr = base_addr_ + WX_REVOKE_MSG_OFFSET;
int db_index = 0;
int local_id = DB::GetInstance().GetLocalIdByMsgId(msg_id, db_index);
if (local_id < 1) {
return -2;
}
__asm{
PUSHAD
PUSHFD
LEA ECX,chat_msg
CALL new_chat_msg_addr
CALL get_chat_mgr_addr
PUSH dword ptr [db_index]
LEA ECX,chat_msg
PUSH dword ptr [local_id]
CALL get_by_local_Id_addr
ADD ESP,0x8
CALL get_chat_mgr_addr
LEA ECX,chat_msg
PUSH ECX
MOV ECX,EAX
CALL revoke_msg_addr
MOV success,EAX
LEA ECX,chat_msg
PUSH 0x0
CALL free_addr
POPFD
POPAD
}
return success;
}
} // namespace wxhelper
+1
View File
@@ -18,6 +18,7 @@ class MiscMgr :public BaseMgr{
int GetVoice(ULONG64 msg_id, wchar_t* dir);
int GetImgByName(wchar_t* file_path,wchar_t* save_dir);
int SearchContactNetScene(wchar_t *keyword,UserInfo ** user);
int RevokeMsg(ULONG64 msg_id);
};
} // namespace wxhelper
-2
View File
@@ -37,8 +37,6 @@ int SendMessageMgr::SendText(wchar_t* wxid, wchar_t* msg) {
POPFD
POPAD
}
SPDLOG_INFO("SendText code = {}",success);
SPDLOG_INFO("global log with source info");
return success;
}
int SendMessageMgr::SendAtText(wchar_t* chat_room_id, wchar_t** wxids, int len,
+2 -1
View File
@@ -98,7 +98,8 @@
#define WX_DOWNLOAD_VIDEO_IMG_OFFSET 0xd46c30
// revoke
#define WX_REVOKE_MSG_OFFSET 0xbb6dc0
// pat