Fix: reissue client_id on clone collision and harden V1 file-transfer command
撞 ID 的克隆机(同镜像 MachineGuid 相同导致 client_id 相同)此前会被服务端暂存为 替补、永远无法转正,从而不显示在主机列表。现在服务端检测到「client_id 相同但主机名 不同」时,主动下发 COMMAND_REGEN_CLIENT_ID,客户端在旧 ID 基础上掺随机 UUID 重算后 重连,以新 ID 正常上线;触发条件仅看主机名,排除 IP 漂移与纯用户名变化,避免误伤 正常重连的机器。 同时加固 V1 服务端→客户端文件传输:COMMAND_GET_FILE 指令的一次性 md5 令牌绑定登记 时的客户端源 IP(PutCmd/PopCmd 均带 peerIP),防止异常客户端冒用;并对指令包增加边界 校验(len 与 NUL 结尾),杜绝无 NUL 包导致的越界读。 Co-Authored-By: deepseek-v4-pro
This commit is contained in:
1 parent
d3a339247b
commit
e6b4fe3a85
7 files changed
+96
-13
No files matched your search
@@ -3643,7 +3643,7 @@ void CScreenSpyDlg::OnDropFiles(HDROP hDropInfo)
|
||||
memcpy((char*)szBuffer + 1 + masterId.length(), hmac.c_str(), hmac.length());
|
||||
memcpy(szBuffer + 1 + 80, str.data(), str.size());
|
||||
auto md5 = CalcMD5FromBytes((BYTE*)str.data(), str.size());
|
||||
m_pParent->m_CmdList.PutCmd(md5);
|
||||
m_pParent->m_CmdList.PutCmd(md5, m_ContextObject->GetPeerName());
|
||||
m_ContextObject->Send2Client(szBuffer, 81 + str.size());
|
||||
Mprintf("【拖拽】 [本地 -> 远程] V1 传输: %s\n", md5.c_str());
|
||||
SAFE_DELETE_ARRAY(szBuffer);
|
||||
|
||||
Reference in new issue
Block a user