• v1.4.0 b89428bf35

    v1.4.0 Stable

    yuanyuanxiang released this 2026-10-07 12:06:38 +00:00 | 40 commits to main since this release

    v1.4.0 (2026.10.7)

    ⚠️ 安全提示

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

    SimplePlugins 功能迁移 & 远程交互增强 & MCP 扩展 & 国际化

    本次发布历时约 35 天,跨 23 次提交。核心是将 SimplePlugins 的三个常用功能(文件管理 / 隐私屏幕 / 远程画板)原生迁移进 YAMA 客户端,以在线主机右键「实验功能」子菜单的形式交付;同时带来远程交谈、TCP/UDP 连接管理、主机管理等远程交互增强,MCP 服务端扩展出设备管理控制工具(进程 / 窗口 / 服务 / 电源),授权失败触发器,以及德语支持与语言切换等国际化改进。


    新功能

    SimplePlugins 功能迁移(实验功能)

    • 文件管理:将 SimplePlugins 的 CFileManager / MasterEncoder / Info-Zip 源码迁入客户端(client/file/,隔离在 SimplePluginsFile 命名空间避免与原生 FileManager 冲突);新增 COMMAND_FILE_MANAGER_PLUGIN(163) 与 LoopFileManagerPlugin,经 KernelManager 派生子连接,复用既有 TOKEN_DRIVE_LIST_PLUGIN 对话框路径
    • 隐私屏幕(虚拟桌面):采集层重写而非照搬——CScreenHideSpy 改为继承 YAMA 的 ::CScreenSpy(vDesk=TRUE),采集与编码复用 YAMA 编码管线;新增 COMMAND_PRIVATE_SCREEN_PLUGIN(164) 与 LoopPrivateScreenPlugin,构造时发送 TOKEN_BITMAPINFO_HIDE 打开既有 HideScreenSpyDlg
    • 远程画板:DrawingBoardMgr 隔离在 SimplePluginsDrawingBoard 命名空间,在透明置顶分层窗口上绘制画笔路径与文字;服务端已有 CDrawingBoard 对话框与 TOKEN_DRAWING_BOARD(151),新增 COMMAND_DRAWING_BOARD_PLUGIN(165) 与 LoopDrawingBoardPlugin,构造时发送 TOKEN_DRAWING_BOARD
    • 菜单接线:在线主机右键菜单新增「实验功能」二级子菜单(文件管理 / 隐私屏幕 / 远程画板),并为三个菜单项配 16x16 图标(位图数组 66→69)

    MCP 设备管理控制工具

    • P7 管理控制工具:在单一 McpManage 开关(并需 McpReadonly=0)后新增 kill_process / operate_window / control_service / power_action 四个写工具
    • ready→confirm 生命周期:写工具在其子连接上执行 ready→confirm,以新增 followUp / followUpSent 字段区分同一 TOKEN_*LIST 的两次到达;写命令与后续刷新命令分两次 Send2Client 发出,之间以 WaitSendIdle()(context.h / Server.h)排空出站缓冲,避免同一缓冲被并发 WSASend
    • 配置与入口:McpSettingsDlg 新增「管理操作」勾选(IDC_MCP_MANAGE),主工具栏新增 MCP 入口按钮;power_action 走主连接 fire-and-forget(无确认)

    远程交互增强

    • 远程交谈(双向聊天):「远程交谈」工具栏按钮发送 COMMAND_CHAT(161),客户端派生子连接,CChatManager 回复 TOKEN_CHAT_START(62) 打开既有 CChat 对话框;客户端聊天窗口保持隐藏直到首条消息或屏幕锁命令,支持服务端触发屏幕锁 / 解锁
    • TCP/UDP 连接管理:工具栏按钮(MCP 之后)打开对话框列出受管主机 TCP/UDP 连接,右键强制断开 IPv4 TCP;客户端 CConnectionsManager 经 iphlpapi(GetExtendedTcpTable / GetExtendedUdpTable,IPv4+IPv6)枚举,服务端 CConnectionsDlg 提供排序列与右键菜单
    • 主机管理:迁移 SimplePlugins 的 CMachineManager(进程 / 窗口 / 网络 / 软件 / IE 历史 / 收藏夹 / 服务 / 任务 / hosts 枚举 + 进程注入,经 yapi.hpp);COMMAND_MACHINE_MANAGE(162),认证子连接派生;工具栏按钮(远程交谈之后,复用 IDI_MACHINE 图标)
    • 远程桌面剪贴板按钮:工具栏新增「获取剪贴板」(C) 与「设置剪贴板」(P) 按钮(截图之后、最小化之前),复用 IDM_GET_CLIPBOARD / IDM_SET_CLIPBOARD 系统菜单处理器,全屏模式下仍可达;按钮数 16→18,滑动动画宽度 640→720

    触发器系统

    • 授权失败触发:在现有「主机上线」触发之外新增 TRIGGER_AUTH_FAILED;主机授权失败时(V1 / V2,初始 TOKEN_AUTH 或后续心跳)服务端触发授权失败触发器并向客户端发送配置的插件 DLL,受既有 ShouldLogAuth 去重约束(持久失败主机每小时或状态变化时重触发一次);VerifyClientAuth 增加 sender 参数使失败分支能触达活跃连接上下文;设置对话框改为按当前选中触发类型回显插件勾选(ReflectPluginsForType + CBN_SELCHANGE)

    移动端音频

    • iPhone 远程音频:iOS WebKit 无 WebM/Opus 的 Media Source Extensions,远程音频在 iPhone Safari / Chrome 静音;新增 Web Audio API 回退路径,用 opus-decoder WASM 解码 Opus 包并调度到 AudioContext;解码包改为自托管(Go 与 C++ 服务端均在 /static/opus-decoder.min.js 提供),不再依赖 CDN

    画质与传输控制

    • 远程桌面质量等级:新增「高级」菜单(「其他」之后),「远程桌面质量等级」对话框编辑 6 档 QualityProfile(最大 FPS / 最大宽度 / 编码算法 / 码率),网格全字段校验 + 恢复默认,OK 持久化到 [quality];服务端权威(LoadQualityProfilesFromCfg 启动加载 + CMD_QUALITY_PROFILES 下发)
    • 屏幕预览质量等级:「高级」菜单「屏幕预览质量等级」编辑 6 档 PreviewProfile(目标编码宽度 / JPEG 质量),持久化到 [preview];ChooseScreenPreviewParams 改读配置
    • 文件传输速度对话框:「高级」菜单新增,双向控制文件传输速度(不触碰 SimplePlugins);7 档预设(~0.3 MB/s 到新增 10 MB/s 档)+ 无限档,存 [transfer] ChunkKb / DurationMs;下载经 CMD_FILE_SPEED(252) 下发到客户端

    协议与部署

    • Shine/HELL 协议选择:新增 ShareHostDlg「使用 Shine 协议」勾选(默认勾选),分享 / 传输主机时选择 Shine(0) 或 HELL(1);协议作为尾随冒号字段追加到载荷(IP:PORT:0/1 / IP:PORT:days:0/1);客户端解析并持久化,旧客户端忽略新增字段,旧载荷回退 -1(内置 HELL)
    • Go Web UI 子路径部署:可选 YAMA_WEB_BASE_PATH 将整个 Web UI(index / manifest / 静态资源 / /health / /api/devices / /ws)挂载到 URL 前缀(如 /remoter);__BASE_PATH__ 占位符服务时替换;MFC 服务端同步处理(剥离为 "");附 nginx / systemd / env-file 部署示例

    国际化

    • 德语(de_DE):第 4 种界面语言,de_DE.ini 与 en_US.ini 键逐字节一致(2028 行,零缺失、零错位);德语值用纯 ASCII 转写(ae / oe / ue / ss,因 GBK / CP936 架构无法编码变音符号);补齐 en_US 自身 7 处 value==key 漏翻
    • 语言切换工具栏按钮:第 15 个工具栏按钮「Lang/语言」(帮助之后),中文读者无需懂英文即可切换语言;对话框标题双语(「切换语言 / Switch Language」),标签 / 按钮用中文源串
    • 剩余字符串翻译补齐:最后一处未翻译中文界面串走 _TRF / _TR / _L(钱包校验、SOCKS 代理连接日志、文件管理器状态栏、机器信息进度),en_US / zh_TW 各 +24 条

    改进

    • 通知设置多行关键词输入:单行、分号分隔的关键词字段改为带垂直滚动条的多行编辑框,每行一个关键词;存储格式仍为分号分隔(兼容既有 notify.ini),加载 / 保存在新行与分号间互转并裁剪空行;加载时按 UTF-8 解码 matchPattern,修复非 ASCII 关键词往返

    Bug 修复

    • HTTP 分片续包状态机误判(进程列表 kill 后空列表):HeaderParser::Parse 对任意非 HTTP maskType 将 m_bShouldUnmask 重置为 FALSE,包括 HTTP 连接已越过 "POST " 头之后的续包;大包(>1460 字节进程列表)被 MSS 分片时,第二片将标志锁为 FALSE,导致后续新 HTTP 掩码包不再解掩码、被丢弃——表现为「首包成功、后续包消失」;仅在连接尚未确定为 HTTP 时清除标志
    • 即时消息弹窗标题乱码:IDD_DIALOG 标题存为 UTF-8 而 .rc 声明 #pragma code_page(936)(GBK),资源编译器误解码致标题乱码;转为 GBK 匹配声明
    • geo-IP 查询阻塞双击提示:双击主机时 IPConverter::GetGeoLocation 在 UI 线程同步发起最多 3 次 HTTP 请求(各 5s 超时),即使未加载本地 IP 库(默认配置)结果也不展示;改为仅本地库加载时查询,并在进程内按 IP 缓存结果(函数级 static 保持 ABI 兼容)
    • 主机管理 IE 历史泄漏:IEnumSTATURL 字符串(su.pwcsUrl / su.pwcsTitle)以 CoTaskMemFree 释放、释放枚举器、设置 STATURL.cbSize
    • 隐私屏幕 0xCC 乱码日志:GetTitle / szClass 缓冲区零初始化

    升级提示

    • 实验功能为客户端特性:文件管理 / 隐私屏幕 / 远程画板三个「实验功能」需客户端升级至 v1.4.0 才可用;服务端已具备对应对话框与命令(TOKEN_DRIVE_LIST_PLUGIN / TOKEN_BITMAPINFO_HIDE / TOKEN_DRAWING_BOARD)
    • MCP 管理控制工具默认关闭:kill_process / operate_window / control_service / power_action 需在「扩展 > MCP 设置」勾选「管理操作」并关闭只读、重启主控后启用
    • 授权失败触发器:需在触发器设置对话框为「授权失败」类型配置插件,与既有「主机上线」触发相互独立
    • 文件传输速度:上传速度在主控 InitFileUpload 读取配置,重启后生效;下载速度经 CMD_FILE_SPEED 下发到客户端
    • Shine/HELL 协议:默认勾选 Shine;旧客户端忽略新增字段回退内置 HELL,兼容旧服务端与 share_list 条目
    Downloads