Skip to content

Sidecar Helper Architecture Simplified

Mango Yen edited this page Aug 22, 2026 · 1 revision

Sidecar Helper 架构设计:如何控制反作弊游戏输入法并通过 Microsoft Store 审核

繁體中文 · English · 简体中文 · 日本語 · 한국어

在 Windows 的安全机制下,普通权限程序既无法干涉具备管理员权限的反作弊游戏,也不能向受沙盒保护的现代应用程序(如 Windows 11 记事本)发送窗口控制消息。

ImeModePersistence 在 v1.5.0+ 引入了 Sidecar Helper(侧车辅助服务) 机制,在不提权主程序、不使用 DLL 注入、不模拟按键的前提下,同时达成了:

  1. 控制《绝地潜兵 2 (Helldivers 2)》等高权限 / 反作弊游戏的输入法语言。
  2. 跨越 UIPI 屏障维持 Windows 11 记事本等现代 WinUI 窗口的输入模式。
  3. 完全符合微软商店安全规范,成功上架 Microsoft Store

这篇技术文档详细记录该架构的设计原理、安全边界与实现细节。


1. 面临的挑战:Windows UIPI 权限隔离

Windows 自 Vista 引入了 UIPI (User Interface Privilege Isolation) 机制。系统依照完整性级别 (Integrity Level) 隔离进程:

  • Low-IL:浏览器沙盒
  • Medium-IL:普通用户执行的桌面程序与 Microsoft Store 应用程序
  • High-IL:以管理员身份执行的程序、以及启动内核反作弊驱动的全屏游戏(例如 Helldivers 2 搭配 nProtect GameGuard)

为什么普通程序无法控制反作弊游戏?

当 ImeModePersistence 以普通权限(Medium-IL)执行时,即使能通过公开的 Win32 API 识别出游戏窗口(class:stingray_window),当尝试发送:

  • PostMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, 0, hkl)(切换键盘语言)
  • SendMessage(imeWnd, WM_IME_CONTROL, IMC_SETCONVERSIONMODE, ...)(切换中/英输入模式)

Windows 内核层的 UIPI 机制会直接拦截并丢弃这些消息,返回 ERROR_ACCESS_DENIED


2. Sidecar Helper 的核心架构

为了解决 UIPI 屏障,同时避免“把整个主程序以管理员身份开机常驻”所带来的安全风险,我们采用了 权限分离的 Sidecar Helper 架构

+-------------------------------------------------------------+
|  主程序 (ImeModePersistence.exe)                             |
|  - 权限:Medium-IL (普通用户 / Microsoft Store MSIX 容器)       |
|  - 职责:托盘 UI、窗口焦点监听、按键状态维护、规则比对              |
+-------------------------------------------------------------+
                              │
             命名管道 IPC (Named Pipe)
             安全 SDDL 访问控制 (仅限本机交互用户与管理员)
                              │
                              ▼
+-------------------------------------------------------------+
|  辅助服务 (ImeModePersistence.exe --helper <parent_pid>)    |
|  - 权限:High-IL (通过用户 UAC 授权提升)                       |
|  - 职责:代表主程序向 High-IL 游戏与焦点子窗口发送 Win32 消息      |
|  - 守护线程:监听父进程 PID,主程序退出时 Helper 立即自动结束   |
+-------------------------------------------------------------+
                              │
               Win32 标准窗口消息 (通过 UIPI)
                              │
                              ▼
+-------------------------------------------------------------+
|  目标窗口 (Helldivers 2 / Windows 11 现代记事本)               |
+-------------------------------------------------------------+

运作流程:

  1. 按需启动 (On-Demand):用户在托盘菜单点击「启用现代窗口 (WinUI) 支持…」,主程序调用 ShellExecuteExW(动词指定 runas)启动 --helper <parent_pid>。用户只需通过一次 Windows 原生 UAC 确认对话框。
  2. 安全命名管道 (Named Pipe IPC)
    • 管道名称:\\.\pipe\ImeModePersistence.Sidecar
    • 安全描述符 (SDDL):D:(A;;GA;;;BA)(A;;GA;;;IU)S:(ML;;NW;;;ME)
    • 严格限制只有本机交互用户 (Interactive User)管理员 (Builtin Administrators) 可以连接,杜绝跨网络或未授权进程的访问。
  3. 无锁同步转发:管道采用同步双向消息模式(PIPE_TYPE_MESSAGE | PIPE_WAIT),确保数据封包精确无误。
  4. 生命周期自动守护 (Watchdog)
    • Helper 服务端启动一条独立的 Watchdog 线程,通过 OpenProcess(SYNCHRONIZE, ...) 监听主程序的进程句柄,同时监听内部的 hShutdownEvent
    • 一旦主程序结束、崩溃或用户在菜单关闭 Helper,Watchdog 会即时触发结束流程并释放所有系统资源,绝不残留后台僵尸进程。

3. 为什么反作弊系统不会封禁?

许多玩家担心使用第三方工具会被反作弊系统(如 GameGuard、Easy Anti-Cheat、BattlEye、Vanguard)判定为外挂而封号。Sidecar Helper 之所以安全,是因为它完全遵循 “零侵入” 原则:

常见外挂手段 本工具的做法 为什么安全
内存读写 (ReadProcessMemory, WriteProcessMemory) 完全不使用 不读写游戏任何内存地址,不触碰游戏状态。
DLL 注入 / 线程创建 (CreateRemoteThread, SetWindowsHookEx) 完全不使用 不注入任何代码到游戏进程内。
模拟按键 (SendInput, keybd_event) 完全不使用 不模拟玩家键盘输入(避免被反作弊判定为宏/按键精灵)。
全局键盘监听 (WH_KEYBOARD_LL, GetAsyncKeyState) 完全不使用 不侧录玩家按键,无安全顾虑。
Win32 标准消息 (WM_INPUTLANGCHANGEREQUEST, WM_IME_CONTROL) 唯一采用的机制 这是 Windows 系统本身在用户按下 Win+Space 或切换窗口时发送的标准通知,游戏窗口与输入法框架将其视为合法的操作系统通知。

4. 为什么可以顺利在 Microsoft Store 上架?

Microsoft Store 对应用程序的安全性有极高要求:

1. MSIX 封装与 asInvoker 要求

  • 微软商店规定上架的封装应用程序清单(AppxManifest.xml严禁声明 requireAdministrator,主应用程序必须在普通用户权限(asInvoker)下启动。
  • 本工具的商店版主程序维持 100% 合规的 asInvoker,完全符合沙盒安全规范。

2. 符合 Microsoft Store 政策 10.2(用户控制与授权)

  • 依据微软商店规范,应用程序若需要执行高权限操作,必须由用户明确主动发起,并通过操作系统标准的 UAC 提示取得同意,严禁静默提权或利用漏洞绕过 UAC。
  • Sidecar Helper 是由用户在右键菜单明确点击后,调用 Windows 原生 ShellExecuteEx(runas) 触发标准 UAC 对话框,完全符合微软商店安全审核标准。

3. 原生模块路径防护(消除 LPE / TOCTOU 漏洞)

  • 过去某些提权辅助工具会将可执行文件复制到 %LocalAppData%%Temp% 等可写目录后再提权执行,这会引入严重的本地权限提升 (LPE) 与 TOCTOU 劫持漏洞。
  • ImeModePersistence 坚持直接对已注册的只读模块路径(autostart::module_path())发起提权,彻底杜绝代码被篡改的风险。

5. 总结

通过 Sidecar Helper 架构,ImeModePersistence 成功在 “极致的用户安全性”“强大的底层输入控制能力” 之间取得了完美的平衡:

  • 🎮 玩家:可以在不以管理员身份重开主程序的情况下,顺畅游玩反作弊游戏并享受自动锁定英文。
  • 🏢 日常用户:在 Windows 11 现代记事本与各类 WinUI 窗口中,输入法模式不再擅自跳回中文。
  • 🛡️ 安全至上:零注入、零按键模拟、全开放源代码,并通过微软商店与 OpenSSF 双重安全检验。

Clone this wiki locally