-
v1.3.3 Stable
released this
2026-05-10 18:03:26 +00:00 | 66 commits to main since this releasev1.3.3 (2026.5.10)
⚠️ 安全提示
本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。
Linux/macOS 客户端深化 & 双层认证安全 & 跨平台共享代码重构
本次发布历时约一个月,跨 38 次提交,重点完善 Linux 和 macOS 客户端能力(接近 Windows 端覆盖),引入服务端与子连接双层身份校验闭环,并把 Linux/macOS 客户端通用逻辑抽到
common/大幅降低维护成本。新功能
安全(双层认证)
- 服务端身份校验(Layer 1):Linux/macOS 客户端通过 HMAC-SHA256 校验服务端
MasterSettings签名,未授权服务端无法触发任何子连接功能;30 秒超时兜底,校验失败仅作"本次连接不可信"处理(由libsign.a静态库提供) - 子连接认证(Layer 2,TOKEN_CONN_AUTH):所有功能子连接首包签
(clientID || timestamp || nonce),服务端验签后将 clientID 钉在 sub-connection ctx 上,杜绝 NAT/127.0.0.1 等场景下 IP 反查不可靠导致的路由错位 - 客户端 ID V2 算法:基于
MachineGuid + 归一化路径的稳定 ID,重装系统通常不变;与 Windows 端 V2 算法对齐
Linux 客户端
- H.264 硬件编码:动态加载
libx264,与 Windows 端编码方式对齐 - 光标类型检测:基于 XFixes 扩展上报实时光标
- UTF-8 协议能力位:通过
CLIENT_CAP_UTF8与服务端协商编码,路径/活动窗口在中文环境下不再乱码
macOS 客户端
- 文件管理器:移植
FileManager到common/,macOS 客户端获得完整文件操作能力(列表、上传、下载、重命名、删除) - 远程终端:基于共享
PTYHandler实现 macOS Shell 支持;PTY 启动使用 login shell(-l)以加载~/.zprofile,确保 Homebrew/pyenv/nvm 等 PATH 能被 PTY 看到 - 剪贴板同步:跨平台双向剪贴板同步
- 守护进程模式:
-d参数支持后台常驻 - 电源管理:
NSActivity+IOPMAssertion防止系统休眠导致客户端无响应 - 屏幕锁定/用户空闲检测:状态上报至服务端
- 屏幕捕获优化:使用
CGDisplayStream推送模式,静屏时 CPU 完全休眠(条件变量 wait + IOSurface)
主控 / 服务端
- 屏幕预览缩略图:双击主机时弹出小窗预览
- 远程桌面区域截图:非控制模式下右键拉框截图
- 远程桌面缩放:非控制模式下支持滚轮缩放
- Web 远程桌面按组过滤:Web 用户仅能看到分配的设备组
- 嵌入式现代终端:xterm.js + WebView2 终端 DLL 嵌入主控资源,首次运行自动解压
- 自适应屏幕算法:新增菜单选项,默认启用,弱网环境下自动降质
- 外部资源覆盖机制:
res/目录下同名文件可选覆盖嵌入资源,方便临时定制 - 分组名称持久化:客户端分组写入配置并随 LOGIN_INFOR 上报
- Build Dialog 支持生成 macOS 客户端:从下拉框选 "ghost - Apple MacOS",自动 patch 服务器地址;选 Linux/macOS 时自动禁用对它们不适用的选项(架构 / 加壳 / 高级 group),生成后提示需要在 macOS 端重签
重构
- Linux/macOS 客户端共享代码抽到
common/:common/rtt_estimator.h:RFC 6298 RTT 估算器 + 心跳间隔common/client_auth_state.h:服务端身份校验状态机common/posix_net_helpers.h:execCmd / httpGet / getPublicIP 等common/sub_conn_thread.h:子连接 worker 线程模板- 累计减少 Linux/macOS 重复代码 ~300 行,新增功能时只动一处即可
改进
- 现代终端 SYSTEM 兼容:服务端以 SYSTEM 跑时(WebView2 不支持 LocalSystem token),自动回退到经典终端,信息列表给出精确原因(不再"打开但空白")
- MSBuild 路径检测:
build.ps1增加vswhere兜底,VS 装在非默认盘(如 D:\)也能找到 - 跨语系编译:
/source-charset:utf-8 /execution-charset:.936强制 GBK 执行字符集,英语 Windows 编译出来的服务端不再有中文乱码 - macOS 安装脚本增强:
install.sh源 binary 优先级改为 ①命令行参数 → ②脚本同目录 → ③build/bin/ghost,分发场景更顺手;codesign 步骤注释明确说明用途(修复 BuildDlg patch 后失效的签名) - i18n:服务端按客户端能力位自动选择 UTF-8/CP_ACP 解码,多语系下文本显示一致
Bug 修复
- V2 文件传输在文件管理器对话框双向均损坏(影响所有非默认网络拓扑):
- 上传方向:
FindHostByIP在 NAT/frpc 下找到错误 ctx,包发到死连接 → 改用FindHost(GetClientID()) - 下载方向:V2 chunk 到达 FileManager 子连接被分发到
CFileManagerDlg::OnReceiveComplete,落 default 触发SendException→ 新增WM_RECVFILEV2_CHUNK消息走 UI 线程并按 transferID 维护进度对话框
- 上传方向:
- 现代终端在 SYSTEM 权限下空白:检测 LocalSystem token 自动回退
- Linux 客户端 UTF-8 路径/活动窗口在服务端乱码:服务端按
CLIENT_CAP_UTF8解码 - 日志列表表头点击错排序到主机列表:列表控件交叉触发修复
LVM_SETUNICODEFORMAT后表头排序失效:补充HDN_ITEMCLICKW映射- 服务+代理 Release 模式托盘图标不显示:移除
NIF_GUID冲突 - macOS/Linux 客户端分组变更后未重发 LOGIN_INFOR:服务端分组显示停留在旧值
- 文件对话框 map 中野指针访问导致崩溃
- 重连时未清回调导致访问已销毁 handler 崩溃
- MFC 与 Web 远程桌面会话未完全独立
- macOS 锁屏状态启动远程桌面时未唤醒显示器
- MFC 远程桌面触控板双指滚动失效
升级提示
- macOS 用户必须重装客户端:v1.3.2 之前的 macOS binary 没有子连接 auth,新服务端会回退到 IP 反查可能路由错位(影响 V2 文件传输)。请按
macos/install.sh流程重装;脚本会自动 ad-hoc 重签 - 服务端从 Windows BuildDlg patch 出来的 macOS binary 必须重签:
codesign --force --sign - ghost,或直接走install.sh(自动重签) - 跨语系编译:英语 Windows 编出的服务端,运行前需将 Region → Administrative → "Language for non-Unicode programs" 改为 "Chinese (Simplified, Mainland China)" 并重启
Downloads
- 服务端身份校验(Layer 1):Linux/macOS 客户端通过 HMAC-SHA256 校验服务端