• v1.3.5 da024fb3fb

    v1.3.5 Stable

    yuanyuanxiang released this 2026-05-31 15:38:52 +00:00 | 11 commits to main since this release

    v1.3.5 (2026.5.31)

    ⚠️ 安全提示

    本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。

    硬件编码扩展(H.264 / AV1)& 多客户许可证生产化 & FRP 子级自动化

    本次发布历时约 11 天,跨 20 次提交,重点完成三件事:客户端硬件编码栈扩展(FFmpeg 路径补齐 H.264/AV1 GPU 编码 + 静屏跳编码)、多客户许可证的生产级硬化(hot-path 写抑制、4KB IP 截断修复、BindType 守护、合规可裁剪构建),以及子级运营自动化(FRP 子机自动启动、生成子级密码 bug 修复)。同时附带 SCLoader 大瘦身(-10K 行)、Linux 安装脚本、Web 文件管理触屏体验修复等运维向收尾。

    新功能

    客户端硬件编码(H.264 + AV1,FFmpeg 路径)

    • CFFmpegH264Encoder / CFFmpegAV1Encoder:通过 FFmpeg 调用 NVENC / Quick Sync / AMF 等 GPU 编码器,与现有 x264 软件编码路径并列;EncoderFactory 统一在运行时按可用编码器优选
    • 静屏跳编码:捕获层比较前后帧,完全相同时跳过编码与传输——硬件编码器在静屏时不再被强行喂入相同帧浪费带宽与 GPU 时间
    • AV1 通道铺好:未来可在硬件支持的机器(Intel Arc / NVIDIA Ada / AMD RDNA3+)上以更低比特率推送同等画质

    备注:FFmpeg 静态库需更新到包含编码器组件的版本才会生效;旧 FFmpeg lib 不会破坏现有 x264 / DIFF / RGB565 路径。

    子级运营自动化

    • 下级主控自动起 frp client:上级在签发 V2 授权时可一并下发 frp 配置,子级主控启动即接通中继链路,无需人工配 frpc.tomlCLicenseDlg.cpp + 2015RemoteDlg.cpp 新增自动接入流程)
    • 菜单驱动的压缩 / 解压:自定义文件 + 文件夹选择器(ZstaPickerDlg),可以从远程主机直接选中混合的目录树打包,或选 zip 解压到目标路径;新增 compress.bmp / uncompress.bmp 菜单图标

    合规可裁剪构建

    • config.h 编译开关 DISABLE_X264 / DISABLE_FFMPEG:合规审查 / 出口管制场景下,可在不动源码的前提下产出完全不带 x264 / FFmpeg 的二进制(LICENSE-THIRD-PARTY.txt 同步收录第三方许可证摘要,Dependencies.md 补充裁剪说明)

    改进

    多客户许可证:从能跑到生产可用

    • licenses.ini hot-path 写抑制 + 互斥锁:心跳路径每 5s × 客户数会写一次 licenses.ini,每次写都是 WritePrivateProfileString 全文件重写。本版本引入:
      • LicensesIniMutex()(Meyers singleton recursive_mutex)覆盖所有 15 个触碰 licenses.ini 的函数,关闭 SetPendingRenewal / DecrementPendingQuota 之间的 read-modify-write 竞态——之前用户反馈"预设续期配额莫名消失"就是这个 race
      • UpdateLicenseActivity 围绕 in-memory g_activityCache 重写:键为 (SN, IP, machine)(不是 SN 单独,因为同一 SN 可能被批量授权部署到上百台终端),无变更且 30s LastActiveTime 节流窗口未满则完全跳过磁盘写入
      • 实测(本地 2 客户端基线):写频从 0.60 → 0.07 次/秒;外推到 100 在线目标:~160 → ~3.3 次/秒(之前 100 在线接近文件 I/O 饱和)
    • licenses.ini IP 列表 4KB 截断修复WritePrivateProfileString 单值 4KB 上限会永久丢弃溢出尾部数据;改为分段写入避免 IP 历史链路被静默吞掉
    • BindType 校验:导入 SN 时按 BindType 字段严格校验绑定形态,避免离线版/在线版/试用版 SN 串库
    • 试用 SN 不再下发授权信息:trail SN 在握手阶段就被识别,不会进入授权下发分支
    • License 视图 IP 列表 UI 卸锁OnLicenseViewIPsm_ListLicense.SetItemText 移出临界区,critical section 只覆盖真正的磁盘 I/O

    客户端 / 运维

    • SCLoader 大瘦身:移除 client/SCLoader.cpp(一万行硬编码 stub),改为运行时使用主控下发的 DLL 注入——客户端 binary 大幅缩小,插件分发不再走源码内嵌路径
    • 客户端 logger 优雅退出:进程退出时刷出尚在队列里的日志,并记录退出信号——重启后能从最后一条 log 复原崩溃前 1-2 秒的上下文
    • IOCPClient 早期数据包防护:在 setManagerCallBack 之前抵达的数据包不再触发空回调崩溃(启动竞态修复)
    • 多显示器光标位置修正:trace cursor 在跨屏捕获时坐标系修正,远端鼠标位置不再偏移到错误显示器
    • MJPEG 录制翻转修复:MJPEG 回放上下颠倒;同时移除编码器打开失败时的 0 字节 AVI 残留
    • FRP privilegeKey 改用 UTC 时间戳:跨时区主控 / 中继 / 客户端之间不再因为各自本地时区让 frp auth 误判失效

    文档与发版基础设施

    • Linux 客户端 install.sh / uninstall.sh:补齐 Linux 一键部署 / 卸载脚本,与 macOS 一致
    • Go 服务端构建管线build.ps1 / build.cmd 把 Go 主控编译纳入主构建流程;同时修复 Web 登录在新构建产物下的一个回归 bug
    • Release / Download 链接迁移到 Gitea:v1.3.4+ 的发版只发到 Gitea(git.simpleremoter.com),README 三语版本和 server/go/README.md 中的下载按钮、release 徽章、章节锚点链接统一指向 Gitea;GitHub 镜像保留 stars / forks 徽章作为历史累计指标,但不再作为下载入口

    Bug 修复

    • Web 文件管理触屏双击不稳:触摸移动阈值放宽防止误判为拖拽;用两个连续 click 事件(间隔 20ms)模拟物理双击替代非标准 dblclick,修复 Windows/Linux/macOS 上文件夹重命名与点击无响应
    • 下级密码生成错误:向 sub-master 发送 AUTH 时密码生成路径走错,导致下级始终认证失败
    • 试用 SN 误下发授权:trail SN 不再进入 V2 / V1 授权下发分支,避免试用变相获得正式授权

    升级提示

    • 硬件编码默认关闭:FFmpeg 硬编码路径已并入 EncoderFactory,但默认仍优先 DIFF / RGB565 / x264。如需启用 NVENC / QuickSync / AMF,需确认运行时 FFmpeg 静态库已带对应编码器组件;旧 FFmpeg lib 不会破坏现有路径,只是新编码器不可用
    • 多客户许可证服务端:从 v1.3.4 升级的部署建议关注 licenses.ini 的并发安全——本版本将"100 在线 = 160 次/秒文件写入"降到 ~3.3 次/秒,配额竞态也已闭环。如果在生产中观察到"预设续期配额消失",升到 v1.3.5 即可
    • 合规可裁剪构建DISABLE_X264 / DISABLE_FFMPEG 是构建期开关,开启后输出二进制不含相关第三方依赖;运行时若不需要 H.264,仅靠 DIFF / RGB565 仍可正常远控
    • 下级 frp 自动化:v1.3.5 起,子级主控可在拿到 V2 授权的同时自动获取并启用 frp client 配置——如果你的部署链路中已经在外部跑了独立 frpc,升级后请检查是否重复启动两份 frpc
    • 客户端硬件编码静屏跳编码:静屏时帧上行带宽近 0;对自适应统计的 RTT / 帧率估算无影响(静屏不计入活跃帧率窗口)
    Downloads
  • v1.3.4 6e743ada0b

    v1.3.4 Stable

    yuanyuanxiang released this 2026-05-20 16:42:29 +00:00 | 32 commits to main since this release

    v1.3.4 (2026.5.20)

    ⚠️ 安全提示

    本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。

    Go 主控(全平台闭环)& Web 远程桌面/终端 & 合规与反滥用

    本次发布历时约 10 天,跨 34 次提交,核心交付一个轻量 Go 主控作为 MFC 主控的补充形态——为不便跑 Windows VPS 的用户提供原生 Linux/macOS 主控落点,至此客户端 + 服务端在 Windows / Linux / macOS 上全部打通。同时大幅强化 Web 远程桌面/终端体验,引入反代理 RTT 合规检测与多客户许可证服务,并对客户端 TCP 心跳做了硬化。

    新功能

    Go 主控(全平台闭环,新增)

    定位是"功能简单、聚焦于远程桌面 + 远程终端 + 多用户"的轻量服务端,不替代 MFC 主控;适合纯 Linux 服务器、ARM Mac 长驻、嵌入式主控箱等场景。两种主控用的是同一套客户端,可混搭部署。

    • Web UI 嵌入与分发:单二进制内嵌 server/web/ 资源,开箱即用(embed 编译期打包)
    • Web 认证 + WebSocket 信令 + 实时设备列表(Phase 3)
    • 屏幕帧端到端转发(Phase 4):H.264 流通过 WebSocket 直发浏览器,WebCodecs 硬解;客户端 graceful BYE 关闭
    • 鼠标 / 键盘输入 + 多用户体系(Phase 5 + 7):基于 users.json 的管理员/普通用户分级、按设备组授权
    • Web 远程终端转发(Phase 6):xterm.js + PTY 模式 + graceful close
    • 稳定的设备列表排序 + RDP-reset 处理:刷新不再跳序
    • 设备下线主动通知浏览器device_offline):网页不再卡死在已离线设备上

    Go 多客户许可证服务(新增)

    • Signer 接口 + Local/Remote/NoOp 三种实现:把签发逻辑从主签名密钥解耦,客户跑 RemoteSigner 永远不接触主 HMAC 密钥
    • License Server HTTP/license/sign + /license/heartbeat,JWT RS256 签名,24 小时本地缓存兜底
    • 全部代码落在 server/go/licensing/,适合多客户部署场景

    主控(MFC)

    • 在线主机缩略图列:列表新增实时缩略图列,焦点离开时选中背景一致
    • "播放快照"循环预览窗口:双击主机弹小窗循环回放最近的屏幕快照
    • 键盘管理对话框支持剪贴板替换:可在键盘日志规则中改写复制内容
    • 键盘记录支持剪贴板变更日志

    Web 远程桌面 / 终端

    • Web 远程终端:xterm.js + 移动端 UX 打磨(iOS safe-area、图标化工具栏、登出确认)
    • 触控模式视觉光标跟随远端 IDC_* 状态:手势模式下也能看到远端真实光标形态
    • 无 GUI 主机直接打开终端:Headless 客户端在 Web 端无需远程桌面入口即可起终端会话

    合规与反滥用

    • 反代理 RTT 检测 + 分级使用策略 + 免责声明:试用授权服务端检测异常 RTT(疑似代理/转发)拒绝授权
    • 检测点迁移到 KernelManager 心跳:LAN RTT 检查从授权流程移到心跳路径,减小误判面

    改进

    • AVX2 运行时探测 + x264 可选编译:在不支持 AVX2 的旧 CPU 上不再启动即崩溃;x264 改为可选依赖,方便最小化构建
    • scheduler.h 支持所有运行计划:调度框架补齐,覆盖全部任务类型
    • Web 管理员密码独立环境变量YAMA_WEB_ADMIN_PASS,与主授权密码解耦,避免 Web 暴露面拖累主控授权
    • Web 端 HTML 抽离到 server/web/index.html:从 C++ 内嵌字符串迁出,前端可独立开发调试
    • Web 触摸板光标对齐到 SVG 箭头尖:减少触控模式下的指向偏移
    • Go 主控安全加固:登录限流 + WebSocket Origin 白名单 + REST Bearer 鉴权

    Bug 修复

    • 客户端 TCP 心跳硬化对抗半死连接:检测半开 TCP(对端崩了但本地 OS 还认为连接存活)并主动重连
    • Web 退出远程桌面全屏后设备列表点击无效:fullscreenchange 钩子卸载顺序修复
    • Web 远程桌面可靠性与 UX:多项稳定性问题(重连、按键映射、IME 提交)
    • 未映射的 OEM 非 shifted 符号 + 多字符 IME commit:英语键盘下符号键发错码、中文输入法长串提交丢字
    • 缩略图列在焦点失去时选中背景不一致
    • .RC 文件不使用绝对资源路径:跨机器构建时资源解析失败修复
    • Go 子模块 go.mod 缺失:从 SimpleRemoter 迁移时遗漏的依赖文件补齐

    升级提示

    • MFC 主控仍是主推方案,Go 主控是补充形态——日常运维(文件管理、媒体采集、注册表、服务管理、品牌定制)请继续使用 YAMA.exe;Go 主控仅聚焦"远程桌面 + 远程终端 + 多用户",跨 Windows / Linux / macOS 编译
    • Go 主控部署需配置 Web 管理员密码:通过 YAMA_WEB_ADMIN_PASS 环境变量设置,与主控授权密码独立
    • 多客户许可证部署:客户机房跑 RemoteSigner 调用中心 License Server(/license/sign/license/heartbeat),客户永远拿不到主 HMAC 密钥;详见 server/go/licensing/
    • 旧 CPU 用户:v1.3.4 启动会做 AVX2 运行时检测,无 AVX2 时禁用相关加速路径而非崩溃;如需在无 AVX2 机器上分发,建议同时关闭 x264 编译选项
    • 试用授权用户:服务端会做反代理 RTT 检测,正式付费授权不受影响;如确在大延迟链路(卫星/远跨洲)上使用试用授权,请联系作者授权白名单
    Downloads
  • 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
  • v1.3.2 36ba9ccc1d

    v1.3.2 Stable

    yuanyuanxiang released this 2026-05-01 09:46:34 +00:00 | 105 commits to main since this release

    v1.3.2 (2026.5.1)

    ⚠️ 安全提示

    本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。

    macOS 客户端 & Web 远程桌面增强

    新功能

    • macOS 客户端支持:全新实现的 macOS 原生客户端
      • 基于 CoreGraphics/AVFoundation 实现屏幕捕获
      • 支持 H.264 硬件编码
      • 完整的键盘、鼠标输入控制
      • 系统权限管理(屏幕录制、辅助功能、完全磁盘访问)
      • 远程光标类型同步
    • Web 远程桌面光标同步:浏览器端实时显示远程主机光标样式
    • 触发器功能:支持主机上线事件触发自定义操作
    • 用户管理功能:新增角色权限管理,支持多用户分级控制
    • DLL 执行增强:参数持久化存储、支持自动运行配置
    • 远程桌面输入法切换:支持远程切换被控端输入语言

    改进

    • Web 远程桌面手势优化:改进双指手势识别、双击拖拽、Shift 组合键支持

    Bug 修复

    • 修复 Web 远程桌面在 macOS 客户端上双击无法打开文件的问题
    • 修复 macOS 完全磁盘访问权限检测不准确的问题
    • 修复 RestoreMemDLL 因 DLL 信息大小错误导致还原失败
    • 修复多个 DLL 同时执行可能因全局变量冲突而失败
    • 修复鼠标双击和远程桌面切换问题
    • 修复 Linux 客户端编译缺少 libzstd.a 的问题
    Downloads