Skip to content

Sidecar Helper Architecture

Mango Yen edited this page Aug 21, 2026 · 2 revisions

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