DOS 프로그램이 자기가 'DOSBox 위에서 돌고 있다'는 걸 어떻게 알아챌까
혹시 DOSBox라는 프로그램을 써보신 적 있으세요? 아주 옛날 도스(DOS) 시절에 나온 게임이나 프로그램을, 요즘 맥이나 윈도우에서도 돌아가게 해주는 에뮬레이터거든요. 예를 들어 1993년에 나온 둠이나 콴다 같은 초기 PC 게임들은 원래 그냥은 돌릴 수 없는데, DOSBox가 가상의 옛날 PC를 흉내 내서 실행시켜 주는 거예요. 많은 레트로 게임 유통 플랫폼(예: GOG)이 내부적으로 이 DOSBox를 쓰고 있습니다.
이번에 소개할 글은 바로 그 반대편 이야기예요. DOSBox 안에서 돌아가고 있는 프로그램이, 자기가 진짜 옛날 PC가 아니라 DOSBox라는 가짜 환경 안에 있다는 걸 어떻게 눈치챌 수 있을까? 이걸 파고든 분석글입니다. 듣기만 해도 묘하게 재미있지 않나요? 마치 꿈속의 등장인물이 '아 이거 꿈이구나' 하고 깨닫는 것 같잖아요.
왜 이런 걸 알아내려고 할까
누군가는 '쓸데없는 짓 아닌가?' 싶을 수 있는데, 실용적인 이유가 꽤 많아요. 첫째, 옛날 게임의 저작권 보호(복사 방지) 로직이 지금도 DOSBox에서 오작동하는 경우가 있거든요. 프로그램이 환경을 알면 적절히 우회하거나 경고를 띄울 수 있죠. 둘째, 리버스 엔지니어링이나 악성코드 분석 영역에서도 중요합니다. 분석가들은 샌드박스(격리된 가상환경)에서 수상한 프로그램을 돌려보는데, 반대로 악성 프로그램이 '여긴 가상환경이네, 가만히 있자'라고 판단해서 정체를 숨기기도 해요. DOSBox 감지는 그 초창기 판본 같은 주제인 셈이죠. 셋째, 그냥 순수하게 "시스템의 낮은 층위를 뜯어보는 재미"가 있습니다. DOS라는 오래된 OS의 구석을 들여다보면서 배우는 게 많거든요.
어떤 식으로 감지할 수 있는지
이 글에서 다루는 방법들은 대체로 "진짜 하드웨어라면 이렇게 동작해야 하는데, DOSBox는 완벽히 흉내 내지 못한다"는 틈새를 찌르는 방식이에요. 예를 들어 CPU 레벨에서 특정 명령어(opcode)를 실행하면 진짜 인텔 CPU는 A라는 값을 반환하는데, DOSBox는 B를 반환한다거나 하는 차이가 존재해요. 또, 타이밍 관련 동작도 단서가 됩니다. 진짜 하드웨어라면 어떤 연산이 정확히 몇 사이클 걸려야 하는데, 에뮬레이터는 그걸 완벽히 재현하지 못하니까 미세한 차이가 생기죠.
BIOS 영역의 특정 바이트를 읽어보는 방법도 고전적이에요. 진짜 옛날 PC는 특정 주소에 제조사 문자열이나 버전 정보가 들어있는데, DOSBox의 가상 BIOS는 약간 다른 값을 갖고 있거든요. 이런 식의 '지문(fingerprint)' 여러 개를 조합하면 '아, 여긴 DOSBox구나' 하고 꽤 확실히 판단할 수 있습니다.
이게 왜 흥미로운 문제인가
사실 이 주제는 현대의 VM 탈출(VM escape) 탐지, 컨테이너 감지, AWS Lambda/Cloudflare Workers 같은 서버리스 환경 식별과 본질이 같아요. 가상화 레이어가 얼마나 '진짜'를 완벽히 흉내 내느냐의 문제인 거죠. 레드팀 해커들은 VMware나 VirtualBox 안에서 돌고 있는지를 감지해서 분석 회피에 쓰고, 반대로 보안 연구자들은 그런 트릭을 무력화하려고 에뮬레이터를 더 정교하게 만들어요. 이 고양이-쥐 게임이 DOS 시절부터 쭉 이어지고 있다는 게 재미있는 부분입니다.
한국 개발자에게 주는 시사점
당장 실무에 쓰실 일은 많지 않겠지만, 저수준(low-level) 프로그래밍을 공부할 때 이런 글만큼 좋은 교재도 없어요. 특히 "추상화는 반드시 어딘가 새는 구석이 있다(Law of Leaky Abstractions)"는 조엘 스폴스키의 유명한 명제를 생생하게 체감할 수 있거든요. 여러분이 쓰고 있는 Docker 컨테이너도, 쿠버네티스 파드도, 결국 완벽한 격리가 아니라 '충분히 그럴듯한 격리'입니다. 이 차이를 이해하는 게 보안 엔지니어의 출발점이에요.
CTF(해킹 대회)나 리버스 엔지니어링에 관심이 있다면 이런 DOS 시절 기법들이 지금도 변형되어 출제되기도 합니다. 그리고 단순히 '재미있는 읽을거리'로도 충분히 가치 있어요. 주말에 커피 한 잔 하면서 읽기 딱 좋은 깊이의 글입니다.
마무리
오래된 기술이라고 해서 배울 게 없는 건 아니에요. 오히려 단순한 구조일수록 본질적인 개념이 더 잘 보일 때가 많거든요. 여러분은 지금 쓰고 있는 환경이 진짜 하드웨어인지 가상 환경인지 구분해 본 적 있으세요? 클라우드 시대에 이 질문은 점점 더 철학적으로 변해가는 것 같기도 하네요.
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공