• v1.3.7 92f6683fe1

    v1.3.7 Stable

    yuanyuanxiang released this 2026-06-26 15:11:10 +00:00 | 12 commits to main since this release

    v1.3.7 (2026.6.26)

    ⚠️ 安全提示

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

    Android 客户端 & 窗口捕获增强 & 安全加固

    本次发布历时约 12 天,跨 17 次提交,最重要的里程碑是首个 Android 受控端正式落地,打通安卓设备远程管理的完整链路。其余改动围绕三条副线:前台窗口精准捕获(PrintWindow + HWND 路由)、服务端安全加固(TOKEN_AUTH 签名 / 反破解版本绑定 / 子授权连接数限制),以及多项性能与稳定性修复。


    新功能

    Android 客户端(全新平台支持)

    • 屏幕实时推流:MediaProjection + MediaCodec H.264 硬件编码,推流至服务端;支持 arm64-v8a / armeabi-v7a,最低 Android 5.0 (API 21)
    • 触控 / 按键注入:基于 AccessibilityService,支持点击、长按、滑动、文本输入
    • TV / 机顶盒 D-pad 导航:利用 AccessibilityService 焦点导航机制,方向键精准控制焦点移动与确认,无需 root 即可完整操控 Android TV
    • 设备分组:分组名支持编译期 APK binary patch 预置,服务端可通过 CMD_SET_GROUP 动态修改;分组名持久化至应用私有目录 filesDir/yama_group,App 重启后仍保留
    • APK 生成与重签:主控 BuildDlg「生成」对话框新增 ghost - Google Android 选项,填入服务端 IP / 端口一键生成可部署 APK,流程与 Linux / macOS ghost 完全一致;配套 android/sign_apk.bat 自动检测本机 Android SDK 完成重签,支持读取 YAMA_PWD 环境变量免交互
    • 服务端删除客户端:服务端发起删除(BYE 指令)后,Android Service 通过 JNI 回调 onNativeExit() 正常停止,不留僵尸进程

    生成流程说明ghost.apk 模板文件提交到仓库;BuildDlg 在 APK 的 .so 中定位 FLAG_GHOST,直接 patch szServerIP / szPort / szGroupName,无需重新编译;patch 后需用 sign_apk.bat 重签才能安装。

    前台窗口精准捕获

    • PrintWindow 窗口捕获:客户端新增对服务端 HWND 路由指令的支持,可针对指定窗口句柄调用 PrintWindow 捕获,即便目标窗口被其他窗口遮挡也能获取完整画面;避免了原来 BitBlt 方案被遮挡时只能捕到背景的问题
    • 服务端 HWND 路由:服务端按 clientID 管理 HWND,精准将窗口捕获指令发送到持有该窗口的客户端连接
    • 在线主机右键查看活动窗口:主机列表右键菜单新增「查看活动窗口」,实时查询并显示当前目标机器前台窗口标题

    安全加固

    • TOKEN_AUTH 响应 ECDSA 签名:服务端持有 V2 私钥时,对 "SN|valid(0/1)" 以 ECDSA P-256 签名,将 sig:<base64> 写入响应 reserved 字段;客户端可验证服务端身份,防止中间人伪造授权响应,且不改变请求格式(向前兼容)
    • TOKEN_SERVER_VERIFY(cmd 251)commands.h 新增常量,配合服务端 Challenge-Response 身份校验路径
    • 反破解版本绑定:主控二进制与核心库建立版本绑定关系,检测到版本不匹配时拒绝加载,阻断替换 DLL 的破解路径;同步更新依赖库版本
    • 子授权连接数限制licenses.ini 新增 LicenseLimit 字段(0 = 不限制);超管向子级发出 TOKEN_AUTH 响应时附带 |lic:N,子级超出上限后拒绝新连接;CLicenseDlg 右键菜单支持实时查看和设置限额(1–9999,清空 = 不限制),修改后在子级下次鉴权时生效

    改进

    • H264 模式跳过首帧巨帧:H264 模式连接建立时,客户端之前会先发送一帧 ~8MB 的 ARGB 原始帧作为「首帧」;现已跳过该发送,服务端改为在收到首个 IDR 帧后自动解锁画面显示,减少约 8MB 的冗余初始传输
    • 自适应尺寸渲染改进:优化自适应分辨率模式下的渲染逻辑,减少尺寸切换时的画面抖动
    • ScanScreen 窗口捕获重构:将 ScanScreen 中的窗口捕获逻辑拆分为 3 个独立私有方法,提高可读性与后续维护性

    Bug 修复

    • ARGBToNV12 堆溢出ARGBToNV12 转换时未对输入维度做偶数对齐,奇数尺寸的窗口(如尺寸为奇数宽 / 高的应用)会导致写越界堆溢出;修复为将维度钳制到上下文的偶数对齐宽高
    • 连接初始化时多余屏幕重启(双端修复)
      • 客户端(ScreenManager.cpp):用本地保存的质量配置初始化 CScreenSpy 比特率,使服务端下发相同比特率的 CMD_QUALITY_LEVEL 时命中 SetBitRate 无变化分支,跳过重启
      • 服务端(ScreenSpyDlg.cpp):仅在自适应模式下且有缓存 maxWidth 时才发送 CMD_SCREEN_SIZE,避免固定质量等级连接时触发第二次重启
    • 启动时恢复内存 DLL:客户端程序启动时,内存 DLL 未被正确还原,导致依赖该 DLL 的功能不可用;修复初始化顺序
    • 授权客户端键盘日志目录冲突:多个授权客户端共享同一键盘日志目录时互相覆盖;现为每个授权客户端分配独立目录

    升级提示

    • Android 客户端为全新功能:已有 Windows / Linux / macOS 客户端不受影响;Android 客户端通过独立 APK 分发,需在 Android 设备上单独安装
    • APK 每次更新后须重新 patch + 重签:APK 中的 IP / 端口 / 分组是编译期写死的,服务端迁移后需重新用 BuildDlg 生成并用 sign_apk.bat 签名
    • TOKEN_AUTH 签名向前兼容:旧版客户端无法验证签名字段,但不会报错(保留字段被忽略);新版客户端对旧服务端签名缺失同样静默兼容,不强制校验
    • LicenseLimit 默认不限制:不设置 LicenseLimit 字段(或置 0)则行为与以往完全一致,不影响现有子授权部署
    Downloads
  • v1.3.6 5757ec7965

    v1.3.6 Stable

    yuanyuanxiang released this 2026-06-14 07:41:11 +00:00 | 30 commits to main since this release

    v1.3.6 (2026.6.14)

    ⚠️ 安全提示

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

    ROI 区域捕获 & Web 音频流 & 主界面可用性全面提升

    本次发布历时约 14 天,跨 25 次提交,围绕四条主线:服务端 ROI 区域捕获(Z 按钮拖选 + 客户端限定捕获区域,大幅节省带宽)、Web 远程桌面音频流(客户端 PCM 实时推送给浏览器,工具栏音频开关)、主控界面可用性全面补强(可拖拽分割条、消息日志面板开关、多处 CSV 导出)以及许可证工具链issue-token CLI + 匿名试用配额模式)。同期累积了 9 项 Bug 修复,涵盖 RTT 计算虚高、残留图像、缩略图误清、macOS 触控等多个长期痛点。


    新功能

    ROI 区域捕获(Z 按钮)

    • 服务端 Z 按钮:工具栏新增 Z 按钮,点击后进入 ROI 待选状态;在远程画面上拖选矩形即可向客户端发送 COMMAND_SCREEN_ROI,将捕获区域限定在选框内——仅传输感兴趣区域,远端带宽按比例下降
    • 客户端 ROI 捕获ScreenCapturerDXGI / CScreenSpy 均已适配 COMMAND_SCREEN_ROI;收到后重启屏幕采集,仅裁剪并传输指定矩形;发送 {0,0,0,0} 即清除 ROI、恢复全屏采集
    • 状态机设计:Z 按钮三状态管理——Inactive(初始)→ Armed(Z 已点击,等待拖选)→ Active(ROI 已激活,Z 高亮蓝色);拖选框小于 20px 则自动回到 Armed 状态要求重新拖选
    • 蓝色虚线选框:拖选过程中以 RGB(0, 120, 215) 蓝色虚线实时绘制矩形,与红色缩放框(Q 按钮)、绿色截图框(S 按钮)视觉明确区分
    • 坐标安全:ROI 坐标经 ScreenRectToImageRect() 映射到原始分辨率空间,含 max/min 边界钳制,保证发出的坐标始终在 [0, srcW] × [0, srcH] 内;客户端收到 w ≤ 0 || h ≤ 0 的 ROI 时直接跳过裁剪,不调用 applyROICrop,不会崩溃

    与控制模式的交互:点击 Z 按钮时如果当前处于控制模式,系统自动先退出控制模式再进入 ROI 选择;已激活的 ROI 在进入控制模式后依然保持,不受影响

    Web 远程桌面:音频流

    • 客户端 PCM 音频转发:捕获客户端桌面音频,通过 WebSocket 实时推送给所有 Web 观察者,前端 Web Audio API 维持连续无中断播放缓冲
    • 工具栏音频开关:Web 全屏工具栏新增 🔊 音频切换按钮,可即时开启 / 关闭音频接收;默认关闭,用户主动授权后开启,规避浏览器自动播放限制

    Web 远程桌面:界面增强

    • 实时带宽读出:Web 全屏页面右上角显示当前接收带宽(KB/s),辅助判断当前网络质量与编码效率
    • 可折叠全屏工具栏:工具栏支持一键折叠 / 展开,折叠后画面可用区域最大化,适合单手操作场景(手机 / 平板)
    • 主机备注随主机名显示:在线主机列表中主机名旁边同步展示备注(remark)字段,无需悬停或展开详情即可识别机器用途

    服务端主界面可用性提升

    • 可拖动分割条:主界面主机列表区域与消息日志区域之间新增可拖动分割条,拖动后布局实时响应,偏好自动持久化;替代之前固定比例的静态布局
    • 消息日志面板一键切换(HideMsg):菜单新增 HideMsg 选项(带 checkmark 状态指示),一键隐藏 / 显示消息日志面板,方便只关注主机列表时释放垂直空间
    • 在线主机信息 CSV 复制:右键选中一或多台在线主机后,可一键将 IP、机器名、备注等字段以 CSV 格式复制到剪贴板,直接粘贴 Excel 统计
    • 消息日志 CSV 复制:消息日志面板支持选中任意多行后一键复制为 CSV,方便批量导出日志行做离线分析

    Go 许可证工具链

    • issue-token CLI 子命令yama-server issue-token 直接在命令行签发包含权限声明的 JWT,运营人员无需访问 Web 界面即可快速为客户铸造授权 Token,输出可直接导入主控
    • 匿名试用模式 + 服务端配额强制:新增匿名试用路径,用户无需注册账号即可在全局配额内体验;服务端跟踪配额余量并在超额后拒绝新的试用申请,防止滥用

    授权与安全

    • AuthKernel 绑定机器 ID:AuthKernel 鉴权改用客户端机器 ID(Machine ID)作为唯一识别标识,解决多客户端部署场景下依赖 IP 识别不准确的问题
    • 主控 / 服务端一键卸载菜单:主控界面菜单新增"卸载 Master / Server 软件"入口,可直接从主控触发受管端软件卸载流程,无需登录远端手动操作

    改进

    • macOS 质量配置文件适配:macOS 客户端现在正确读取质量配置(FPS / 比特率),并在分辨率超出限制时自动触发硬件降级缩放(HW resolution downscaling),与 Windows 端行为对齐
    • 客户端构建特性开关宏:新增预处理器宏,可在构建期精细控制启用 / 禁用特定客户端模块,简化为不同合规场景或产品形态定制 binary

    Bug 修复

    • RTT 计算排除服务端 UI 队列延迟:之前 RTT 统计包含了服务端 UI 事件队列的调度等待时间,导致显示数值虚高;现在 RTT 仅统计纯网络往返时延
    • 非自适应滚动模式下残留图像:在非自适应滚动模式下,远程帧边界外区域偶尔留有上一帧的残影;本版本在每次帧更新后主动清除帧外区域
    • 子连接断开不再误清主机缩略图:RDP 等子连接断开时,主连接仍在线的主机缩略图被错误清除;已修正为仅在主连接真正断线时才清空缩略图
    • Shellcode+AES 加载器构建修复:带 Shellcode+AES 加载器路径的 ServerDll / TinyRun 编译失败;已修复构建流程
    • macOS 触控双击恢复 & 滚动速度修正:MAC 触控双击在特定操作后失效;同时将滚动步长从 10px 修正为 40px(与鼠标滚轮单格移动量一致)
    • 单显示器捕获误触黑屏检测:单显示器配置下黑屏检测逻辑被误触发,导致捕获无端重启;单显示器路径现在跳过该检测
    • 键盘输入日志定期落盘:键盘记录器每 10 分钟自动将缓冲区写入文件,防止进程意外退出时丢失尚在内存中的日志内容
    • 重连时 share_list 出现重复子客户端:连接重建时未及时清理旧的共享列表条目,导致同一客户端在列表中出现多次;已在 share_list 入口处加守卫
    • 主界面列表列标题空白InitControl() 调用时机晚于 PostMessage,导致列宽初始化失败、列标题显示为空;已将调用移到 PostMessage 之前

    升级提示

    • ROI 功能为纯增量:无需客户端升级即可使用基础 ROI 发送功能(COMMAND_SCREEN_ROI = 152);但要使客户端实际执行裁剪,客户端也需升级到 v1.3.6
    • Web 音频默认关闭:音频流默认不推送,需要用户在工具栏点击开启——规避浏览器的自动播放策略;服务端无需额外配置
    • issue-token 依赖 Go 主控issue-token 子命令仅在 Go 主控二进制中可用,MFC 主控无此命令行入口
    • 匿名试用配额:试用配额上限在服务端 config.ini 中配置(TrialQuota);从 v1.3.5 升级时默认配额为 0(即关闭试用),需显式配置后生效
    Downloads
  • v1.3.5 da024fb3fb

    v1.3.5 Stable

    yuanyuanxiang released this 2026-05-31 15:38:52 +00:00 | 56 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 | 77 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 | 111 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 | 150 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