-
Notifications
You must be signed in to change notification settings - Fork 0
Sidecar Helper Architecture Japanese
繁體中文 · English · 简体中文 · 日本語 · 한국어
Windows のセキュリティモデルでは、通常権限(非昇格)のプログラムは、管理者権限で実行されているアンチチートゲームに干渉できず、サンドボックスで保護されたモダンアプリ(Windows 11 のメモ帳など)へ UIPI (User Interface Privilege Isolation) の境界を越えてウィンドウメッセージを送信することもできません。
ImeModePersistence (v1.5.0+) では Sidecar Helper(サイドカーヘルパー) アーキテクチャを導入し、メインアプリを昇格させず、DLL インジェクションやキーストローク合成を行わない まま、以下の 3 つを達成しました:
- 『Helldivers 2(ヘルダイバー2)』など、アンチチートで保護されたフルスクリーンゲームの入力言語固定。
- Windows 11 メモ帳などのモダン WinUI ウィンドウをまたいだ入力モード(かな/英数)の維持。
- マイクロソフトのセキュリティ基準に 100% 準拠した Microsoft Store への公式公開。
このドキュメントでは、このアーキテクチャの設計思想、セキュリティ境界、および実装詳細について解説します。
Windows Vista で導入された UIPI (User Interface Privilege Isolation) は、整合性レベル (Integrity Level / IL) に基づいてプロセスを隔離します:
- Low-IL: ブラウザのサンドボックス
- Medium-IL: 通常のデスクトップアプリおよび Microsoft Store (MSIX) アプリ
- High-IL: 管理者として実行されたプロセス、およびカーネルアンチチートドライバを起動するフルスクリーンゲーム(例: nProtect GameGuard を使用する Helldivers 2)
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 が返されます。
システム全体の自動起動を管理者権限で行うことによるセキュリティリスク(およびアンチウイルスソフトによる誤検知)を回避するため、権限を分離した 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 モダンメモ帳) |
+-------------------------------------------------------------+
-
オンデマンド起動: トレイメニューで「モダンウィンドウ (WinUI) サポートを有効化…」をクリックすると、
ShellExecuteExW(動詞runas)経由で--helper <parent_pid>が起動します。ユーザーは Windows 標準の UAC ダイアログを 1 回許可するだけです。 -
安全な名前付きパイプ (Named Pipe IPC):
- パイプ名:
\\.\pipe\ImeModePersistence.Sidecar - セキュリティ記述子 (SDDL):
D:(A;;GA;;;BA)(A;;GA;;;IU)S:(ML;;NW;;;ME) - ローカルの対話型ユーザー (Interactive User) と管理者 (Builtin Administrators) にのみアクセスを制限し、クロスセッションや不正プロセスからのアクセスを完全に遮断します。
- パイプ名:
-
安全な同期転送: メッセージ指向パイプ(
PIPE_TYPE_MESSAGE | PIPE_WAIT)を使用し、正確なデータ境界を保証します。 -
ライフサイクルの自動監視 (Watchdog):
- ヘルパー側で独立したウォッチドッグスレッドが
{ hParentProcess, hShutdownEvent }を監視します。 - メインアプリが終了・クラッシュした場合、またはトレイメニューでヘルパーをオフにした場合、ウォッチドッグが即座に検知してリソースを解放し、ゾンビプロセスを残さずに安全に終了します。
- ヘルパー側で独立したウォッチドッグスレッドが
プレイヤーがアンチチート(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 通知として処理します。 |
Microsoft Store はアプリのセキュリティに対して極めて厳しい基準を設けています:
- Microsoft Store に提出するマニフェスト(
AppxManifest.xml)ではrequireAdministratorの宣言が禁止されており、メインアプリは必ず通常権限(asInvoker)で動作しなければなりません。 - 本ツールの Store 版は 100%
asInvokerに準拠しています。
- アプリが高特権の操作を行う場合、ユーザーが明示的に操作を開始し、OS 標準の同意ダイアログ(UAC)を経由する必要があります(サイレント昇格や脆弱性悪用は禁止)。
- Sidecar Helper はトレイメニューでのユーザーの明示的なクリックにより、Windows 標準の
ShellExecuteEx(runas) を呼び出して起動するため、Store の審査基準を完全に満たしています。
- 過去の一部のツールでは実行ファイルを
%Temp%等にコピーしてから昇格していたため、権限昇格 (LPE) やファイル改ざん (TOCTOU) の脆弱性を生んでいました。 - 本ツールは登録された正規の読み取り専用モジュールパス(
autostart::module_path())から直接昇格を行うため、改ざんリスクを完全に排除しています。
Sidecar Helper により、ImeModePersistence は 「最大限のユーザーセキュリティ」 と 「確実な低レイヤー入力制御」 の両立に成功しました:
- 🎮 ゲーマー: メインアプリを管理者として再起動することなく、アンチチートゲームで英語入力を自動固定できます。
- 📝 一般ユーザー: Windows 11 のモダンメモ帳などでも、入力モードが勝手に日本語に戻るストレスから解放されます。
- 🛡️ 安全第一: ゼロインジェクション、ゼロキーシミュレーション、完全オープンソース、そして Microsoft Store と OpenSSF の安全基準をクリアしています。
ImeModePersistence · 下載 / Releases · 問題回報 / Issues · README · 設計筆記 / Design notes · MIT
本 Wiki 是操作說明;實作理由與被否決的做法記在設計筆記。發佈的檔案未經簽章。 This wiki is the how-to; implementation reasoning and rejected approaches live in the design notes. Released files are unsigned.
繁體中文
English
简体中文
日本語
한국어