-
Notifications
You must be signed in to change notification settings - Fork 0
Sidecar Helper Architecture Korean
繁體中文 · English · 简体中文 · 日本語 · 한국어
Windows의 보안 모델에서 일반 권한(비상승) 프로그램은 관리자 권한으로 실행되는 안티치트 게임에 간섭할 수 없으며, 샌드박스로 보호되는 모던 애플리케이션(예: Windows 11 메모장)에 UIPI(User Interface Privilege Isolation) 경계를 넘어 창 제어 메시지를 보낼 수도 없습니다.
ImeModePersistence(v1.5.0+)는 Sidecar Helper(사이드카 헬퍼) 아키텍처를 도입하여, 메인 프로그램을 관리자 권한으로 실행하지 않고, DLL 주입이나 키 합성 없이 다음 3가지를 동시에 달성했습니다:
- Helldivers 2(헬다이버즈 2) 등 안티치트로 보호되는 전체 화면 게임의 입력 언어 고정.
- Windows 11 메모장 등 모던 WinUI 창에서 한/영 및 자국어/영숫자 입력 모드 유지.
- Microsoft Store 보안 정책을 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는 "비침투적(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 알림으로 처리합니다. |
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
简体中文
日本語
한국어