-
v1.3.9 Stable
released this
2026-09-02 17:16:59 +00:00 | 1 commits to main since this releasev1.3.9 (2026.9.2)
⚠️ 安全提示
本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。
MCP 服务端集成(AI 远程管理)& 远程控制与文件传输闭环 & 主控增强
本次发布历时约 28 天,跨 39 次提交,核心是引入 MCP(Model Context Protocol)服务端,为 YAMA 主控补齐一套完整的 AI 远程管理能力。MCP 服务端在本地
127.0.0.1:6544暴露 JSON-RPC 2.0 接口,通过 Bearer Token 鉴权,向任意 MCP 客户端(Claude、Cursor 等)提供 23 个工具,覆盖「观测 → 执行 → 控制 → 传输」全链路:主机搜索与只读观测(进程 / 窗口 / 文件 / 服务 / 注册表 / 截图 / 审计日志 / 客户端日志)、远程终端执行、屏幕操控注入(键盘 / 鼠标 / 剪贴板)、文件双向传输(download_file / upload_file)。同时带来客户端活动历史、日志右键菜单(在线通知 / 拉黑 / 解封)、列表排序记忆等主控增强,以及多项稳定性修复。
新功能
MCP 服务端集成(AI 远程管理框架)
- 本地 MCP 服务端:新增
McpServer,基于 httplib 实现 JSON-RPC 2.0 分派(initialize/ping/tools/list/tools/call),监听http://127.0.0.1:6544/mcp,通过Authorization: Bearer <token>鉴权;默认关闭 - MCP 设置对话框:主菜单「扩展 > MCP 设置」新增
McpSettingsDlg,运行时动态创建,可配置启用开关、端口、绑定地址与 Token;相关改动需重启主控生效 - 分级开关:
McpReadonly(默认开,隐藏执行类工具)、McpCmdWhitelist(命令白名单)、McpTerminal(持久终端,默认关)、McpRemoteControl(远程控制,默认关,需关闭只读)、McpFileTransfer(文件传输,默认关)逐项门控,操作全面审计记录 - FRP 端口暴露:绑定
0.0.0.0时,MCP 端口并入监听 / Web 端口联合暴露 - i18n:en_US / zh_TW 翻译同步补齐
安全边界:MCP 服务端默认关闭且仅本地回环监听,建议启用 Token 鉴权;执行类与操控类工具(终端 / 远程控制 / 文件传输)均为可选开关、默认关闭,请仅在信任的环境下开启。
MCP 观测类工具(只读)
- search_hosts / get_host_detail:按名称 / 备注、IP、分组、OS 组合过滤在线主机(纯内存实现,ASCII 大小写不敏感子串匹配);按 id 获取单台主机详情,非法 id 返回 -32602、离线或未知返回 -32002
- list_processes / list_windows:经
COMMAND_SYSTEM/COMMAND_WSLIST主连接请求,一次性子链路接收TOKEN_PSLIST/TOKEN_WSLIST;窗口标题按客户端 UTF-8 能力位解码 - list_files / get_screenshot:
COMMAND_LIST_DRIVE→TOKEN_DRIVE_LIST列驱动器,COMMAND_LIST_FILES→TOKEN_FILE_LIST列目录;截图复用屏幕预览 RPC 并按 host 的 reqId 关联;get_screenshot新增可选max_width参数(钳制 64..1920) - list_services:
COMMAND_SERVICES→TOKEN_SERVERLIST,5 字段解析(显示名 / 服务名 / 路径 / 状态 / 启动类型);非 Windows 主机直接返回 -32005 - get_client_log:
COMMAND_QUERY_LOG→TOKEN_REPORT_LOG,取首个全量包后即取消子链路;日志按 clientType 解码(Windows = 936) - list_registry:三阶段流程(
COMMAND_REGEDIT/COMMAND_REG_FIND/ PATH + KEY),空路径返回五个根键;客户端以KEY_READ枚举,完整映射值类型(REG_SZ / DWORD / BINARY / EXPAND_SZ / MULTI_SZ / QWORD / NONE),路径钳制 MAX_PATH 防栈溢出 - get_audit_log:主控审计日志(上线 / 离线 / 操作结果 / 告警)以线程安全镜像
m_MessageLog暴露,最多返回 1000 条、最新在前 - 单飞请求注册表:每 host 一个
m_Pending一次性挂起注册表,20s 超时,同 host 并发请求拒绝返回 -32003;解析器遇到首个空记录即停止以忽略尾部零填充 - 编码修正:进程名 / 路径 / 文件名在 Windows 客户端经 ANSI(A) 接口读取,按 clientType(LNX/MAC = UTF-8,Windows = 936)解码;窗口标题按 clientID 而非 peer IP 定位主连接,修复 FRP / NAT 反代下 UTF-8 标题乱码
MCP 远程终端工具
- exec_command(一次性执行):复用 Web 终端链路(主连接
COMMAND_SHELL+ shell 子连接 + 哨兵命令行),返回 stdout 与退出码;哨兵前置换行判定避免 ConPTY 回显误判;shell 元字符(& | < > ^)拒绝后再走白名单 - terminal_open / terminal_exec / terminal_close(持久终端):每台 Windows 主机可保持一个 shell 会话,cwd 与环境变量跨命令保留;
&/|及控制字符拒绝;空闲 300s 清扫;命令完成后刷新 lastActiveAt - 健壮性修复:
timeout_ms由GetStringArg改为GetIntArg(同时接受数字与数字字符串,1..600000 范围);哨兵同时接受\n与\r起始,修复无输出命令(ping > nul、Start-Sleep)误超时;shell 突发断线后悬空 subCtx 清理
MCP 远程控制工具(屏幕操控注入)
- remote_open / remote_close:复用
WebService::StartRemoteDesktop隐藏建立屏幕子连接(COMMAND_SCREEN_SPY→CScreenSpyDlg→RegisterScreenContext),轮询子连接与物理分辨率(TOKEN_BITMAPINFO→NotifyResolutionChange),记录会话并返回{session_id, screen_w, screen_h};单设备单会话,close 幂等;多显示器主机阶段一拒绝(-32008) - remote_keyboard:key_down / key_up / key_press(键名 → VK,支持 CTRL / ALT / SHIFT / WIN 修饰)与 type(逐字符
VkKeyScanA,仅 ASCII);提取共享BuildKeyMsg64与 Web 路径同源,杜绝漂移;非 ASCII 文本拒绝(-32602),CJK 走剪贴板 + Ctrl+V - remote_mouse:move / down / up / click / right_click / middle_click / drag / scroll;0..1 归一化坐标映射到会话捕获分辨率并钳制到屏幕边界;滚轮沿用 Web 控制台符号约定(正值向下);共享
BuildMouseMsg64 - remote_clipboard:经屏幕子连接
COMMAND_SCREEN_SET_CLIPBOARD写剪贴板;输入 UTF-8 转 GBK(ToAnsi 936)匹配客户端 CF_TEXT / ANSI 路径;非 GBK 字符(如 emoji)替换为 '?'(已在工具描述标注) - 会话状态机加固:
ScreenCtrlSession增加 busy / closed 标志与BeginScreenCtrlAction/EndScreenCtrlAction,注入进行中不擦除会话,与终端忙态纪律一致,杜绝注入与拆除竞争 - 双向互斥:MCP 远程控制会话与人工 Web 查看双向互斥——
m_McpTriggeredDevices标记在所有会话擦除点清除,防止标记滞留永久阻断人工查看
MCP 文件传输工具(V2 协议)
- download_file:经
COMMAND_LIST_DRIVE打开文件管理子链路,发送CMD_DOWN_FILES_V2,客户端在自有认证子连接上推送COMMAND_SEND_FILE_V2分块与逐文件COMMAND_FILE_COMPLETE_V2SHA-256 校验;每设备一个FileTransferSession,headless 路径不弹 GUI 进度框;文件名解析并校验始终落在 local_dir 内阻断..穿越;overwrite=false跳过已存在文件 - upload_file:服务端在主连接上同步驱动
FileBatchTransferWorkerV2(headless 回调),复用 list_files 链路做覆盖预检;McpFileTransfer=1且McpReadonly=0门控;返回files[{path,size,sha256}]与total_bytes / skipped,sha256 恒为空(V2 无接收方回执,完整性由客户端本地校验、失败仅记日志) - 客户端侧懒初始化:客户端主连接此前未初始化文件传输模块导致
g_status恒为 0、上传分块被静默丢弃(截断为 0 字节);在COMMAND_SEND_FILE_V2分支新增一次性InitFileUpload(与 FileManager 初始化一致,非阻塞、幂等、引用计数)
主控功能增强
- 客户端活动历史:客户端记录活跃窗口历史(开始时间、标题、驻留时长,跳过 <5s,空闲打断计时,上限 500 条,最新在前);主机「客户端管理」子菜单新增「活动历史」项,经主连接请求快照并在新对话框展示;对话框以 Unicode 窗口重建编辑控件,UTF-8 标题正确渲染
- 日志右键菜单三连:消息日志右键菜单新增「在线通知」(提取 IPv4 加入通知关键字,
NotifyManager::ShouldNotify增加 IP 列回退匹配)、「拉黑 IP」(校验白名单后加入黑名单并持久化,IOCPServer::OnAccept即时生效)、「解封 IP」(移出黑名单并将该 IP 的AUTH_FORBIDDEN主机恢复为待授权) - 列表排序记忆:主控主机列表、进程 / 窗口列表分别持久化排序列与方向(
list\OnlineListSort/ProcessListSort/WindowListSort),下次启动默认沿用;主机上下线时按排序位插入 - 在线主机右键图标:三个原无图标的菜单项(活动历史 / 浏览窗口 / 代理端口-自启动)新增 16x16 位图,主对话框位图数组 63→66
改进
- 重复连接 standby 处理:重复登录共享同一 clientID 时,新连接不再循环重连替换旧连接,而是暂存为 standby,待旧连接心跳超时或断线后晋升;修正心跳归属与晋升路径,避免误报「主机离线」
- 主机备注显示:远程桌面(「远程桌面控制」)与虚拟屏幕(「远程虚拟屏幕」)对话框标题在主机设有备注时显示备注而非 IP,无备注回退 IP
- 三态排序:主机列表点击同一列头循环「升序 → 降序 → 恢复默认」,默认序按在线时间(存活时长降序)重建,空值持久化以跨重启保留
- get_screenshot max_width:新增可选宽度参数覆盖缩略图档位(默认 1024),配合 RTT 自适应 jpegQuality,支持近原生分辨率截图
Bug 修复
- 客户端屏幕控制批解析错误:
ProcessCommand以%28==0优先判定 MSG 记录尺寸,48 字节批次的记录数是 7 的倍数时(28 / 48 最小公倍 336)被误判为 MSG32,字段整体错位导致注入输入被丢弃或错乱;改为%48==0优先,28 字节路径仅用于旧 32 位主控兼容 - 心跳延迟更新 use-after-free:重复 standby 频繁切换下,心跳处理器
PostMessageA裸传CONTEXT_OBJECT指针,RemoveStaleContext可能先回收复用导致 UI 线程读取陈旧对象,Authorization无界 memcpy 溢出 200 字节 HeartbeatACK 触发 0xC0000409(栈 cookie 覆盖);跨延迟消息持有 IoRefCount(fetch_add / fetch_sub 配对)保证对象存活,并对三处 memcpy 加显式截断 - ONLINELIST_PRIVILEGE 枚举错位损坏历史数据:权限列插入枚举值 9 后 INSTALLTIME / PATH 顺延,而 FileUpload_Lib 以旧枚举值读取
sClientInfo[],导致历史主机库读错权限 / 类型;权限列移至 16(MAX 前),恢复全部原始枚举值 - 远程桌面光标跨对话框污染:视图模式「禁止」光标用
SetClassLongPtr(GCLP_HCURSOR)作用于整个窗口类,打开第二个对话框即污染已控制对话框;改为OnSetCursor逐窗口路由,并清理死代码与 GetIconInfo 泄漏 - 客户端日志对话框停止刷新:Win32 EDIT 控件默认 ~32K / 64K 字符上限使日志静默停止追加,
SetLimitText(0)解除;统一Logger换行处理(每条源端恰一个\n),修复 TCP 日志查询环形缓冲分片错误;修复CClientLog::OnInitDialogCFont 泄漏 - 窗口管理器视图检查读取陈旧状态:右键显示 / 隐藏 / 最大化 / 最小化只更新
SetItemText未同步Data[2],恢复最小化窗口后仍报「该窗口已最小化」;四处处理器同步Data[2] - terminal_exec 误超时:数值型
timeout_ms被字符串解析器丢弃回落到 20s,且哨兵仅接受\n前缀导致无输出命令等待至超时(见远程终端章节) - 进程列表架构列排序无效:架构字符串仅存于
ItemData::Arch,Data[3]为空导致按架构列排序为空比较无效果;补填Data[3] - FRP / NAT 下窗口标题乱码:子连接按 peer IP 定位主连接失败(FRP 反代下 peer 为 127.0.0.1),UTF-8 窗口标题被按 GBK 解码乱码;改为优先按 clientID 定位(TOKEN_CONN_AUTH 后 SetID),peer IP 回退仅用于旧客户端
升级提示
- MCP 默认关闭:MCP 服务端及全部执行 / 操控 / 传输工具默认关闭,需在「扩展 > MCP 设置」手动开启并重启主控;开启后可在本地 127.0.0.1:6544 被任意 MCP 客户端调用,请妥善保管 Token
- MCP 为服务端特性:MCP 工具通过现有协议链路驱动客户端,绝大多数观测类工具无需客户端升级;
get_client_log、活动历史等依赖客户端侧实现,旧版客户端无数据(版本兼容差异,非 bug) - 文件传输需 V2 协议客户端:download_file / upload_file 走 V2 文件传输协议,需客户端支持
CMD_DOWN_FILES_V2/COMMAND_SEND_FILE_V2;建议客户端升级至 v1.3.9 - 远程控制仅支持单显示器:MCP remote_open 阶段一仅支持单显示器主机(多显示器返回 -32008),且与人工 Web 查看互斥;屏幕操控(键鼠 / 剪贴板)注入依赖已建立的 remote_open 会话
- 拉黑 / 解封即时生效:日志右键「拉黑 IP」写入黑名单后,新连接即被
OnAccept拒绝;「解封 IP」将被拉黑主机恢复为待授权状态(需重新授权),仅影响当前服务端
Downloads
- 本地 MCP 服务端:新增
-
v1.3.8 Stable
released this
2026-08-03 16:33:20 +00:00 | 41 commits to main since this releasev1.3.8 (2026.8.3)
⚠️ 安全提示
本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。
SYSTEM 权限客户端 & 主控可用性增强 & Bug 修复
本次发布历时约 16 天,跨 12 次提交,围绕三条主线:客户端以 SYSTEM 权限运行并完整支持远程控制(突破桌面交互隔离,双模式自动适配)、主控可用性全面增强(日志搜索栏 / 客户端运行日志对话框 / 远程窗口管理菜单 / 违禁用户拉黑 / 调试菜单)、以及多项关键 Bug 修复(32/64 位切换崩溃、Safari 移动端卡死、隐私壁纸切换等)。
新功能
客户端 SYSTEM 权限运行与远程控制
- 双模式自动适配:客户端启动时检测自身进程权限等级(SYSTEM / Admin / User),注册表启动项 (
reg_startup.c) 新增User和Session字段,Winlogon/Run双路径注册,适配从服务启动(SYSTEM)和用户登录启动两种场景 - SYSTEM 下远程桌面完整支持:
ScreenManager在无用户会话时跳过 GDI 捕获改用 DXGI,KernelManager绕过SHGetFolderPath等用户态 API 以 NT 路径直接操作;ClientDll根据运行时权限动态选择用户会话或 SYSTEM 会话路径 - 会话隔离与注入:新增
session.cpp/session.h(176 行),跨会话 DLL 注入与消息通讯;客户端支持从 SYSTEM 会话向用户会话注入控制模块,解决 SYSTEM 进程无法直接操作用户桌面交互的历史难题 - 主控端适配:BuildDlg 生成客户端时新增 SYSTEM 权限相关配置选项;
ScreenSpyDlg兼容 SYSTEM 客户端桌面流
安全边界:以 SYSTEM 权限运行的客户端拥有操作系统最高权限,请确保仅部署在受信任的受管设备上,并配合授权体系的连接数限制与审计日志使用。
在线主机权限等级列
- 权限列显示:在线主机列表新增「权限」列,实时展示每台主机的运行权限等级——SYSTEM(蓝色高亮)、Admin(管理员)、User(普通用户),一眼识别受控端权限上下文
- 通知配置适配:
NotifyConfig/NotifySettingsDlg同步更新,权限字段纳入筛选与通知规则
远程窗口管理菜单(View Windows)
- 远程桌面「查看窗口」菜单:远程桌面界面新增 View Windows 菜单项,可枚举并管理目标机器上的所有顶层窗口
- 窗口操作:支持最大化、最小化、隐藏、关闭等操作,无需离开远程桌面视图即可管理远端窗口布局
违禁用户拉黑
- 一键拉黑:主机列表右键菜单新增「禁止连接」(Forbidden),服务端向目标客户端发送
COMMAND_FORBIDDEN指令 - 客户端响应:
KernelManager收到拉黑指令后断开连接并记录日志;被拉黑客户端无法再次连接同一服务端 - 视觉标识:菜单项附带 Forbidden 图标 bitmap,被拉黑主机在列表中显示特殊状态标识
客户端运行日志对话框
- 增量日志推送:
ClientLogManager每 3 秒将客户端运行日志增量推送到主控端(TOKEN_REPORT_LOG),服务端CClientLog对话框自动刷新显示 - 线程安全退出:推送线程使用
join()替代detach(),避免对话框关闭时访问已释放内存的 use-after-free 崩溃 - IOCP 线程安全处理:
OnReceiveComplete通过PostMessage将日志数据从 IOCP 线程调度到 UI 线程,修复增量包静默丢失问题 - 界面细节:对话框自带图标(
ClientLog.ico),菜单项附带位图标识(ClientLog.bmp);右键主机列表「运行日志」即可打开
消息日志搜索栏
- 搜索栏 UI:消息日志面板底部新增搜索栏(
LogSearchBar),包含搜索输入框、上一个/下一个按钮、清除按钮 - 搜索功能:输入关键字后高亮匹配行;Prev / Next 按钮在匹配项之间导航跳转;Clear 按钮一键清除搜索与高亮
- 独立组件:
LogSearchBar.cpp/LogSearchBar.h(共 286 行)作为独立 UI 组件实现,可复用于其他列表视图
调试菜单
- YAMA_DBG 输入菜单:主菜单新增调试入口,可输入
YAMA_DBG环境变量值;方便开发与测试场景下动态开启调试输出,无需重启主控 - 菜单图标:附带 Debug 位图(
Debug.bmp),与普通菜单项视觉区分
改进
- 远程桌面光标设置持久化:用户在远程桌面中自定义的光标设置(光标样式 / 大小 / 颜色等)保存到注册表,下次打开远程桌面时自动恢复偏好,无需每次重新调整
Bug 修复
- 32 位 / 64 位主控切换崩溃:
KeyboardManager中键盘钩子回调的参数类型对 32/64 位不兼容,切换位数后主控崩溃;修复为使用WPARAM/LPARAM标准类型;服务端2015Remote.cpp增加位数兼容性初始化检查 - Safari 移动端切回卡死:iOS Safari 切换 App 再切回后 Web 远程桌面画面冻结;修复为前台切回时强制清理并重建 WebSocket 连接;服务端新增 30 秒宽限期(grace period),快速切回场景下保留会话避免冷启动,同时兼容长时间离线的断线重连
- 文件传输结束误杀主屏幕会话:
RunFileReceiver错误注册了ReconnectProcess回调,导致文件传输完成时触发重连流程,意外终止正在进行的屏幕远程会话;修复为跳过该注册 - 隐私壁纸已设置时切换菜单行为修正:当隐私壁纸已经设置时,菜单项「切换隐私壁纸」再次点击应执行清除而非重新弹框选择;修复菜单逻辑为检测当前状态后执行相反操作
升级提示
- SYSTEM 权限客户端为可选功能:传统以用户权限运行的客户端行为完全不变;仅在需要 SYSTEM 级权限(如锁屏界面控制、无用户会话操作)时才需升级客户端并配置服务启动方式
- 客户端运行日志增量推送:需要客户端升级到 v1.3.8 才能向主控推送日志;旧版客户端右键菜单「运行日志」无数据显示
- 32/64 位兼容性修复:如果当前部署中混合使用 32 位和 64 位主控管理同一批客户端,建议将两端都升级到 v1.3.8 以消除崩溃风险
- Safari 移动端修复:服务端和 Web 前端(
index.html)均有更新,Go 主控用户需重新编译并部署以获得完整修复 - 违禁拉黑不可逆:被拉黑客户端无法通过常规方式重新连接同一服务端,需管理员手动解除限制;拉黑状态仅影响当前服务端,不阻止客户端连接其他服务端
Downloads
- 双模式自动适配:客户端启动时检测自身进程权限等级(SYSTEM / Admin / User),注册表启动项 (
-
v1.3.7 Stable
released this
2026-06-26 15:11:10 +00:00 | 54 commits to main since this releasev1.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,直接 patchszServerIP/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 Stable
released this
2026-06-14 07:41:11 +00:00 | 72 commits to main since this releasev1.3.6 (2026.6.14)
⚠️ 安全提示
本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。
ROI 区域捕获 & Web 音频流 & 主界面可用性全面提升
本次发布历时约 14 天,跨 25 次提交,围绕四条主线:服务端 ROI 区域捕获(Z 按钮拖选 + 客户端限定捕获区域,大幅节省带宽)、Web 远程桌面音频流(客户端 PCM 实时推送给浏览器,工具栏音频开关)、主控界面可用性全面补强(可拖拽分割条、消息日志面板开关、多处 CSV 导出)以及许可证工具链(
issue-tokenCLI + 匿名试用配额模式)。同期累积了 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-tokenCLI 子命令: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
- 服务端 Z 按钮:工具栏新增 Z 按钮,点击后进入 ROI 待选状态;在远程画面上拖选矩形即可向客户端发送
-
v1.3.5 Stable
released this
2026-05-31 15:38:52 +00:00 | 98 commits to main since this releasev1.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.toml(CLicenseDlg.cpp+2015RemoteDlg.cpp新增自动接入流程) - 菜单驱动的压缩 / 解压:自定义文件 + 文件夹选择器(
ZstaPickerDlg),可以从远程主机直接选中混合的目录树打包,或选 zip 解压到目标路径;新增compress.bmp/uncompress.bmp菜单图标
合规可裁剪构建
config.h编译开关DISABLE_X264/DISABLE_FFMPEG:合规审查 / 出口管制场景下,可在不动源码的前提下产出完全不带 x264 / FFmpeg 的二进制(LICENSE-THIRD-PARTY.txt同步收录第三方许可证摘要,Dependencies.md补充裁剪说明)
改进
多客户许可证:从能跑到生产可用
licenses.inihot-path 写抑制 + 互斥锁:心跳路径每 5s × 客户数会写一次licenses.ini,每次写都是WritePrivateProfileString全文件重写。本版本引入:LicensesIniMutex()(Meyers singleton recursive_mutex)覆盖所有 15 个触碰licenses.ini的函数,关闭SetPendingRenewal/DecrementPendingQuota之间的 read-modify-write 竞态——之前用户反馈"预设续期配额莫名消失"就是这个 raceUpdateLicenseActivity围绕 in-memoryg_activityCache重写:键为(SN, IP, machine)(不是 SN 单独,因为同一 SN 可能被批量授权部署到上百台终端),无变更且 30sLastActiveTime节流窗口未满则完全跳过磁盘写入- 实测(本地 2 客户端基线):写频从 0.60 → 0.07 次/秒;外推到 100 在线目标:~160 → ~3.3 次/秒(之前 100 在线接近文件 I/O 饱和)
licenses.iniIP 列表 4KB 截断修复:WritePrivateProfileString单值 4KB 上限会永久丢弃溢出尾部数据;改为分段写入避免 IP 历史链路被静默吞掉BindType校验:导入 SN 时按BindType字段严格校验绑定形态,避免离线版/在线版/试用版 SN 串库- 试用 SN 不再下发授权信息:trail SN 在握手阶段就被识别,不会进入授权下发分支
- License 视图 IP 列表 UI 卸锁:
OnLicenseViewIPs中m_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 Stable
released this
2026-05-20 16:42:29 +00:00 | 119 commits to main since this releasev1.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
- Web UI 嵌入与分发:单二进制内嵌
-
v1.3.3 Stable
released this
2026-05-10 18:03:26 +00:00 | 153 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 校验服务端
-
v1.3.2 Stable
released this
2026-05-01 09:46:34 +00:00 | 192 commits to main since this releasev1.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
- macOS 客户端支持:全新实现的 macOS 原生客户端