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. Microsoft Store 보안 정책을 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. 안티치트에서 제재나 오탐이 발생하지 않는 이유

게이머들이 안티치트(GameGuard, Easy Anti-Cheat, BattlEye, Vanguard 등)의 오탐을 우려하는 것은 당연합니다. Sidecar Helper는 "비침투적(Zero-Intrusion)" 원칙을 철저히 준수하므로 완전히 안전합니다:

변조/치트 도구의 방식 본 도구의 방식 안전한 이유
메모리 읽기/쓰기 (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는 "최고 수준의 사용자 보안""안정적인 저수준 입력 제어" 사이의 완벽한 균형을 달성했습니다: