고전 게임 '인피델'에서 발견된 치명적인 메모리 버그 분석 — AI 생성 일러스트
리서치 뉴스

고전 게임 '인피델'에서 발견된 치명적인 메모리 버그 분석

Infidel goes wild

Hacker News10월 3일 발표 · 2분

고전 인터랙티브 픽션 게임 '인피델'에서 물품의 위치를 추적하는 시스템에 치명적인 메모리 오버라이팅 버그가 발견되었습니다.

왜 중요해요AI 정리

소프트웨어 개발 과정에서 사소한 변수 처리 오류나 컴파일러의 가정 같은 작은 실수가 시스템 전체에 심각하고 예측 불가능한 취약점을 만들 수 있다는 것을 보여주는 사례예요.

세 줄 요약Hacker News 원문 기반
  1. 물품 좌표를 기록하는 루틴이 전역 변수 주소를 제대로 초기화하지 못해, 실제로는 게임의 핵심 문자열 데이터가 저장된 메모리 영역을 덮어쓰게 됩니다.
  2. 이는 소프트웨어 개발 과정에서 컴파일러의 사소한 가정이나 전역 변수 처리 오류가 시스템 전체에 심각하고 예측 불가능한 취약점을 만들 수 있음을 보여주는 사례입니다.
  3. 이 버그는 사막에 충분한 양의 물품을 떨어뜨려 메모리 저장 공간을 가득 채울 때 발생하며, 특정 조건을 충족해야만 오류가 나타나 발견이 어려웠습니다.

고전 인터랙티브 픽션 게임인 '인피델'은 이집트 사막을 배경으로 하며, 플레이어가 캠프를 벗어나면 `ENDLESS-DESERT`라는 단일 공간에서 활동하게 됩니다. 이 과정에서 물품을 떨어뜨리면 해당 위치의 좌표가 `DESERT-TABLE`이라는 배열에 기록되어 추적됩니다. 필자는 게임 내 물품 추적 시스템을 분석하던 중, 메모리 영역을 의도치 않게 덮어쓰는(wild pointer bug) 심각한 버그를 발견했습니다.

이 버그는 물품의 좌표를 테이블에 저장하는 `DESERT-TO-TABLE` 루틴에서 발생합니다. 이 루틴은 전역 변수 주소인 11129에 데이터를 기록해야 하지만, 실제로는 로컬 변수(optional argument)가 전역 변수의 인덱스 번호인 30으로 잘못 초기화됩니다. 개발자가 예상한 대로 작동하지 않아, 물품 데이터가 의도된 메모리 영역이 아닌 다른 곳을 덮어쓰게 됩니다.

결과적으로 이 버그는 게임의 핵심 문자열 데이터를 담고 있는 메모리 주소(30-63)를 오염시킵니다. 해당 주소는 Z-machine의 텍스트 압축 방식인 약어 데이터가 저장되는 곳입니다. 충분한 수의 물품을 사막에 떨어뜨려 이 영역이 가득 차게 되면, 게임은 정상적인 문장 대신 변형되거나 깨진 단어를 출력하게 됩니다.

궁금한 점AI 정리 · 원문 기반
어떤 종류의 버그가 발견되었나요?

물품 좌표를 기록하는 루틴이 전역 변수 주소를 제대로 초기화하지 못해서, 의도치 않은 메모리 영역을 덮어쓰는 '와일 포인터 버그'예요. 이로 인해 게임의 핵심 문자열 데이터가 오염됩니다.

이 버그가 발생하면 게임에 어떤 현상이 나타나나요?

사막에 충분한 물품을 떨어뜨려 메모리 저장 공간이 가득 차면, 게임이 정상적인 문장 대신 변형되거나 깨진 단어를 출력하게 돼요. 이는 핵심 문자열 데이터가 오염되었기 때문이에요.

버그는 어떤 과정에서 발생했나요?

물품 좌표를 테이블에 저장하는 루틴에서, 전역 변수 주소 대신 로컬 변수가 잘못 초기화되면서 데이터가 의도되지 않은 메모리 영역을 덮어쓰게 되었어요.

원문Hacker News · Infidel goes wild
궁금한 점 3개AI 정리