• v1.3.3 95946e0e6a

    v1.3.3 Stable

    yuanyuanxiang released this 2026-05-10 18:03:26 +00:00 | 66 commits to main since this release

    v1.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 客户端

    • 文件管理器:移植 FileManagercommon/,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