Skip to content

Sidecar Helper Architecture Korean

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

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)에 따라 프로세스를 격리합니다:

  • 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가 반환됩니다.


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 준수

  • Microsoft Store 매니페스트(AppxManifest.xml)에서는 requireAdministrator 선언이 금지되어 있으며, 메인 앱은 반드시 일반 권한(asInvoker)으로 실행되어야 합니다.
  • 본 도구의 Store 버전은 100% asInvoker를 준수합니다.

2. Microsoft Store 정책 10.2(사용자의 명시적 동의) 충족

  • 앱이 고권한 작업을 수행할 경우, 사용자가 명시적으로 작업을 시작하고 OS 표준 UAC 대화상자를 거쳐야 합니다(무단 자동 승격이나 취약점 악용 금지).
  • Sidecar Helper는 트레이 메뉴에서 사용자가 명시적으로 클릭할 때 Windows 표준 ShellExecuteEx (runas)를 호출하여 실행되므로 Store 심사 기준을 완벽히 충족합니다.

3. 인증된 모듈 경로에서의 권한 상승 (LPE / TOCTOU 취약점 제거)

  • 과거 일부 도구는 실행 파일을 %Temp% 등에 복사한 후 승격하여 로컬 권한 상승(LPE)이나 파일 변조(TOCTOU) 취약점을 야기했습니다.
  • 본 도구는 등록된 읽기 전용 모듈 경로(autostart::module_path())에서 직접 승격을 수행하여 코드 변조 위험을 원천 차단했습니다.

5. 결론

Sidecar Helper를 통해 ImeModePersistence는 "최고 수준의 사용자 보안""안정적인 저수준 입력 제어" 사이의 완벽한 균형을 달성했습니다:

  • 🎮 게이머: 메인 앱을 관리자로 다시 시작할 필요 없이 안티치트 게임에서 영어 입력을 자동으로 고정할 수 있습니다.
  • 📝 일반 사용자: Windows 11 모던 메모장 등에서도 입력 모드가 의도치 않게 기본 모드로 되돌아가는 불편함이 없습니다.
  • 🛡️ 보안 최우선: 무주입, 무키합성, 완전한 오픈 소스이며 Microsoft Store 및 OpenSSF 보안 기준을 통과했습니다.

Clone this wiki locally