v1.3.7
Android 客户端 & 窗口捕获增强 & 安全加固
历时约 12 天,跨 17 次提交。本版本最重要的里程碑是首个 Android 受控端正式落地,打通安卓设备的完整管理链路。其余改动围绕三条副线:前台窗口精准捕获(PrintWindow + HWND 路由)、服务端安全加固(TOKEN_AUTH ECDSA 签名 / 反破解版本绑定 / 子授权连接数限制),以及多项性能与稳定性修复。
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 窗口捕获逻辑拆分为 3 个独立私有方法,提升可读性
Bug 修复
- ARGBToNV12 堆溢出:奇数尺寸窗口导致写越界堆溢出;修复为将维度钳制到上下文的偶数对齐宽高
- 连接初始化时多余屏幕重启(双端修复):
- 客户端(
ScreenManager.cpp):用本地保存的质量配置初始化比特率,使相同比特率的CMD_QUALITY_LEVEL跳过重启 - 服务端(
ScreenSpyDlg.cpp):仅在自适应模式且有缓存maxWidth时才发送CMD_SCREEN_SIZE,避免固定质量等级连接时触发第二次重启
- 客户端(
- 启动时内存 DLL 未正确还原:修复初始化顺序,确保依赖该 DLL 的功能可用
- 授权客户端键盘日志目录冲突:多实例共享目录导致互相覆盖;现为每个授权客户端分配独立目录
升级提示
- Android 客户端为全新功能:已有 Windows / Linux / macOS 客户端不受影响;Android 客户端通过独立 APK 分发,需在 Android 设备上单独安装
- APK 每次更新后须重新 patch + 重签:APK 中的 IP / 端口 / 分组是编译期写死的,服务端迁移后需重新用 BuildDlg 生成并用
sign_apk.bat签名 - TOKEN_AUTH 签名向前兼容:旧版客户端忽略签名字段,不报错;新版客户端对旧服务端签名缺失同样静默兼容
- LicenseLimit 默认不限制:不设置
LicenseLimit(或置 0)行为与以往完全一致,不影响现有子授权部署