TECH 으로 돌아가기
TECH HACKER NEWS 2026.10.23 10:07 8분 읽기 24 READS

30년 된 윈도우 NT 3.x에 마우스 통합을 붙인 드라이버, 가상머신과 게스트 OS는 어떻게 대화할까

30년 된 윈도우 NT 3.x에 마우스 통합을 붙인 드라이버, 가상머신과 게스트 OS는 어떻게 대화할까
SOURCE IMAGE · HACKER NEWS
30년 된 윈도우 NT 3.x에 마우스 통합을 붙인 드라이버, 가상머신과 게스트 OS는 어떻게 대화할까

가상머신에서 마우스가 갇혀 본 적 있나요

VirtualBox나 VMware를 처음 쓰면 꼭 겪는 일이 있어요. 가상머신 창을 클릭하는 순간 마우스가 그 안에 갇혀서 밖으로 나오지 않고, Ctrl+Alt 같은 단축키를 눌러야 겨우 풀려나죠. 반대로 게스트 도구(Guest Additions, VMware Tools)를 설치하면 마우스가 호스트와 게스트 사이를 자연스럽게 오가요. 이 기능을 마우스 통합(mouse integration)이라고 해요.

이번에 공개된 vmmouse-nt3는 이 기능을 무려 윈도우 NT 3.x에 붙여 주는 드라이버예요. NT 3.1이 1993년에 나왔으니 30년이 넘은 OS죠. QEMU나 VMware에서 NT 3.x를 돌릴 때 마우스가 갇히지 않고 자연스럽게 움직이게 해 주는 오픈소스 프로젝트예요.

레트로 컴퓨팅 취미 프로젝트처럼 보이지만, 하이퍼바이저와 게스트 OS가 어떻게 대화하는지를 엿볼 수 있는 좋은 교재이기도 해요.

마우스가 갇히는 이유: 상대 좌표와 절대 좌표

핵심은 좌표 방식의 차이예요. 전통적인 PS/2 마우스는 상대 좌표를 보내요. “오른쪽으로 3칸, 위로 2칸 움직였어” 같은 식이죠. 커서가 지금 화면 어디에 있는지는 OS가 움직임을 쌓아서 계산해요.

가상머신에서는 이게 꼬여요. 호스트의 커서 위치와 게스트 OS가 생각하는 커서 위치가 따로 놀게 되거든요. 그래서 하이퍼바이저는 아예 마우스를 붙잡아(grab) 두고 움직임만 게스트에 전달해요. 이게 마우스가 갇히는 이유예요.

해결책은 절대 좌표예요. “지금 커서는 화면의 (512, 384) 위치야”라고 직접 알려 주면 호스트 커서와 게스트 커서를 맞출 수 있죠. 요즘 QEMU에서는 USB 태블릿 장치(-device usb-tablet)를 붙여서 해결하는 경우가 많은데, NT 3.x에는 USB 지원 자체가 없어요. 그래서 다른 방법이 필요했던 거예요.

VMware 백도어 포트라는 비밀 통로

여기서 등장하는 게 VMware 백도어(backdoor) 인터페이스예요. 게스트 OS가 하이퍼바이저에게 말을 걸 수 있는 일종의 비밀 통로라고 보면 돼요.

동작 원리는 이래요. x86 CPU에는 in, out이라는 I/O 포트 명령어가 있어요. 게스트가 특정 포트(0x5658, ASCII로 'VX')에 매직 넘버(0x564D5868, ASCII로 'VMXh')를 담아 in 명령을 실행하면, 실제 하드웨어 대신 하이퍼바이저가 이걸 가로채서 응답해 줘요. 레지스터에 넣는 명령 번호에 따라 버전 확인, 절대 좌표 모드 켜기, 마우스 데이터 읽기 같은 일을 할 수 있어요.

재밌는 건 이 인터페이스를 VMware만 쓰는 게 아니라 QEMU도 호환 구현(vmport, vmmouse)을 갖고 있다는 거예요. 그래서 드라이버 하나로 두 하이퍼바이저를 모두 지원할 수 있어요.

리눅스가 vmmouse를 지원하는 방식을 보면 구조가 꽤 영리해요. 마우스가 움직이면 기존 PS/2 인터럽트는 그대로 발생하는데, 드라이버는 이걸 '데이터가 왔다'는 신호로만 쓰고 실제 좌표는 백도어 포트에서 절대값으로 읽어 와요. 기존 하드웨어 경로는 그대로 두고 새 정보만 끼워 넣는 방식이죠.

NT 3.x용으로 만든다는 것의 난이도

요즘 윈도우 드라이버 개발에는 WDK, KMDF 같은 프레임워크와 풍부한 문서가 있어요. NT 3.x 시절은 사정이 전혀 달라요. 당시 DDK와 문서를 구해야 하고, 그 시절 컴파일러와 빌드 환경을 맞춰야 하고, 디버깅 도구도 빈약하죠. 커널 모드 드라이버라서 실수하면 바로 블루스크린이 뜨고요. 공식 게스트 도구는 대체로 더 최신 윈도우를 중심으로 지원해 왔기 때문에, 이런 빈틈을 커뮤니티가 직접 메우고 있는 셈이에요.

업계 맥락: 에뮬레이션에서 반가상화로

이 프로젝트는 가상화 기술이 발전해 온 과정을 압축해서 보여 줘요. 초기 가상화는 실제 하드웨어를 그대로 흉내 내는 에뮬레이션이었고, 게스트 OS는 자기가 가상머신 안에 있다는 걸 몰랐어요. 그다음에 게스트가 하이퍼바이저의 존재를 알고 협력하는 반가상화(paravirtualization)가 나왔어요. VMware 백도어가 그 초기 형태라면, 오늘날 KVM 환경의 표준인 virtio는 완성형이라고 볼 수 있어요.

보안 쪽에서도 이 백도어 포트는 유명해요. 악성코드가 이 포트를 건드려 보고 응답이 오면 “아, 여기는 분석용 가상머신이구나” 하고 정체를 숨기는 안티-VM 기법으로 오래전부터 쓰여 왔거든요. 같은 기술이 한쪽에서는 편의 기능, 다른 쪽에서는 탐지 수단이 되는 거죠.

한국 개발자에게 주는 시사점

실무에서 NT 3.x를 쓸 일은 거의 없겠지만 배울 건 많아요. 시스템 프로그래밍, 가상화, 클라우드 인프라에 관심 있다면 이 저장소 코드를 읽으면서 I/O 포트, 커널 드라이버, 하이퍼바이저 인터페이스가 실제로 어떻게 맞물리는지 감을 잡기 좋아요. 수천 줄짜리 최신 드라이버보다 훨씬 작고 단순해서 오히려 학습용으로 알맞아요.

악성코드 분석이나 샌드박스를 다루는 보안 엔지니어라면, 분석 환경이 어떤 흔적 때문에 들키는지 이해하는 데도 도움이 될 거예요.

마무리

30년 된 OS에 마우스 드라이버 하나 붙이는 일이지만, 그 안에는 가상화의 핵심 원리인 게스트와 하이퍼바이저의 대화가 그대로 담겨 있어요.

레트로 OS나 오래된 시스템을 가상머신에서 돌려 본 적이 있으신가요? 이런 저수준 프로젝트를 학습용으로 파고들어 본 적이 있다면 어떤 게 가장 도움이 됐는지도 공유해 주세요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/rhargreaves/vmmouse-nt3
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...