Sidecar Helper アーキテクチャ設計:アンチチートゲームの IME 制御と Microsoft Store 審査通過の仕組み

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

Windows のセキュリティモデルでは、通常権限(非昇格)のプログラムは、管理者権限で実行されているアンチチートゲームに干渉できず、サンドボックスで保護されたモダンアプリ(Windows 11 のメモ帳など)へ UIPI (User Interface Privilege Isolation) の境界を越えてウィンドウメッセージを送信することもできません。

ImeModePersistence (v1.5.0+) では Sidecar Helper(サイドカーヘルパー) アーキテクチャを導入し、メインアプリを昇格させず、DLL インジェクションやキーストローク合成を行わない まま、以下の 3 つを達成しました:

  1. 『Helldivers 2(ヘルダイバー2)』など、アンチチートで保護されたフルスクリーンゲームの入力言語固定。
  2. Windows 11 メモ帳などのモダン WinUI ウィンドウをまたいだ入力モード(かな/英数)の維持。
  3. マイクロソフトのセキュリティ基準に 100% 準拠した Microsoft Store への公式公開。

このドキュメントでは、このアーキテクチャの設計思想、セキュリティ境界、および実装詳細について解説します。


1. 課題:Windows UIPI による権限分離

Windows Vista で導入された UIPI (User Interface Privilege Isolation) は、整合性レベル (Integrity Level / IL) に基づいてプロセスを隔離します:

通常のプログラムがアンチチートゲームを制御できない理由

ImeModePersistence が通常権限(Medium-IL)で動作している場合、公開 Win32 API でゲームのウィンドウクラス(class:stingray_window)を識別できたとしても、以下のメッセージ送信:

は、Windows カーネルの UIPI 機構によってブロックされ破棄され、ERROR_ACCESS_DENIED が返されます。


2. Sidecar Helper のコアアーキテクチャ

システム全体の自動起動を管理者権限で行うことによるセキュリティリスク(およびアンチウイルスソフトによる誤検知)を回避するため、権限を分離した Sidecar Helper アーキテクチャ を採用しています:

+-------------------------------------------------------------+
|  メインアプリ (ImeModePersistence.exe)                      |
|  - 権限: Medium-IL (通常ユーザー / Microsoft Store MSIX)    |
|  - 役割: トレイ UI、フォーカス監視、ルール管理、状態管理    |
+-------------------------------------------------------------+
                              │
             名前付きパイプ IPC (\\.\pipe\ImeModePersistence.Sidecar)
             厳格な SDDL: 対話型ユーザーおよび管理者のみアクセス可能
                              │
                              ▼
+-------------------------------------------------------------+
|  昇格ヘルパー (ImeModePersistence.exe --helper <pid>)       |
|  - 権限: High-IL (標準 UAC ダイアログを通じてオンデマンド昇格) |
|  - 役割: UIPI を越えて High-IL ゲームや子ウィンドウへメッセージ中継 |
|  - ウォッチドッグ: 親プロセスの終了を検知して即座に終了     |
+-------------------------------------------------------------+
                              │
               標準 Win32 ウィンドウメッセージ (UIPI を通過)
                              │
                              ▼
+-------------------------------------------------------------+
|  対象ウィンドウ (Helldivers 2 / Windows 11 モダンメモ帳)    |
+-------------------------------------------------------------+

動作の流れ:

  1. オンデマンド起動: トレイメニューで「モダンウィンドウ (WinUI) サポートを有効化…」をクリックすると、ShellExecuteExW(動詞 runas)経由で --helper <parent_pid> が起動します。ユーザーは Windows 標準の UAC ダイアログを 1 回許可するだけです。
  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):
    • ヘルパー側で独立したウォッチドッグスレッドが { hParentProcess, hShutdownEvent } を監視します。
    • メインアプリが終了・クラッシュした場合、またはトレイメニューでヘルパーをオフにした場合、ウォッチドッグが即座に検知してリソースを解放し、ゾンビプロセスを残さずに安全に終了します。

3. なぜアンチチートで BAN やフラグ対象にならないのか

プレイヤーがアンチチート(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) 唯一採用する手法 ユーザーが Win+Space を押したりウィンドウを切り替えたときに Windows 自身が送る標準通知と同じです。ゲームや IME フレームワークはこれを正規の OS 通知として処理します。

4. なぜ Microsoft Store に公開できるのか

Microsoft Store はアプリのセキュリティに対して極めて厳しい基準を設けています:

1. MSIX パッケージと asInvoker 準拠

2. Microsoft Store ポリシー 10.2(ユーザーの明示的同意)への適合

3. 正規モジュールパスからの昇格(LPE / TOCTOU 脆弱性の排除)


5. まとめ

Sidecar Helper により、ImeModePersistence は 「最大限のユーザーセキュリティ」「確実な低レイヤー入力制御」 の両立に成功しました: