마리오 브라더스 코드의 모든 것을 파헤친다!
슈퍼 마리오 브라더스(Super Mario Bros.)의 프로그램 롬(Program ROM) 크기와 코드/데이터 비율을 분석함.
CPU 명령어 실행 및 스프라이트 로딩 관련 코드 경로를 탐색하고, 미사용 코드(Unused Code)의 존재 가능성을 제시함.
글리치(Glitch) 및 익스플로잇(Exploit)을 활용하여 미접근 코드 영역 실행 및 데이터 오버라이딩(Data Overriding) 기법을 시연함.
밸런스 플랫폼(Balance Platform)과 스프라이트 상속(Sprite Inheritance) 기법을 통해 게임 상태를 조작하고 미실행 코드 실행을 유도하는 과정을 설명함.
슈퍼 마리오 브라더스 롬(ROM)의 구조 분석
발표자는 슈퍼 마리오 브라더스(Super Mario Bros.)의 프로그램 롬(Program ROM)이 32,768 바이트(32KB) 크기임을 밝히며, 이 중 22,768 바이트(약 70%)가 CPU 명령어(CPU Instructions)에 할당되고 나머지는 원시 데이터(Raw Data)로 사용된다고 설명한다. 이는 코드와 데이터의 명확한 분리를 보여주며, 게임 로직 구현에 상당한 비중이 할애되었음을 시사한다. 레벨, 음악, 애니메이션 등은 원시 데이터 영역에 포함된다고 언급된다.
미사용 코드(Unused Code) 및 글리치(Glitch) 활용
영상에서는 특정 조건에서만 실행되는 코드 경로와 완전히 미사용되는 코드 영역의 존재 가능성을 탐구한다. 예를 들어, Goomba의 움직임 및 충돌 처리 루틴은 플레이어가 해당 오브젝트와 상호작용하지 않으면 실행되지 않으며, Mario의 점프나 보스전 관련 코드 역시 특정 상황에서만 활성화된다. 이러한 조건부 실행 로직을 역이용하여 글리치(Glitch)를 발생시키고 미접근 코드 영역을 실행하는 것이 핵심 탐구 대상이다.
스프라이트 로딩 및 데이터 오버라이딩(Data Overriding) 기법
게임 내 스프라이트(Sprite)는 6개의 슬롯(Slot)에 로드되며, 각 슬롯은 고유한 초기화 코드(Initialization Code)를 가진다. 발표자는 스프라이트 로딩 메커니즘의 허점을 파고들어, 물음표 블록(Question Block)이나 파이프(Pipe)와 같은 오브젝트를 조작하여 의도치 않은 스프라이트 데이터를 로드시키는 방법을 시연한다. 이를 통해 기존 스프라이트 데이터를 덮어쓰고(Overriding), 파이어바(Firebar)나 P-Switch와 같은 특수 오브젝트의 동작을 변형하는 것이 가능하다.
밸런스 플랫폼(Balance Platform)과 스프라이트 상속(Sprite Inheritance) 익스플로잇
특히 밸런스 플랫폼(Balance Platform)은 스프라이트 상속(Sprite Inheritance) 기법을 통해 미실행 코드 실행을 유도하는 핵심 요소로 분석된다. 플랫폼이 스프라이트 슬롯 5번을 차지하고 있을 때, 다른 오브젝트가 해당 슬롯을 차지하면 플랫폼의 원래 로직이 스프라이트 데이터로 오버라이딩된다. 이를 통해 물음표 블록의 플래그(Flag)를 조작하거나, 쿠파(Koopa)를 마법처럼 변형시키는 등 예상치 못한 게임 상태 변화를 일으키는 과정을 상세히 보여준다.
미실행 코드 실행을 위한 데이터 변조 전략
영상에서는 미실행 코드(Unreachable Code)를 실행하기 위해 게임 데이터의 특정 바이트를 변조하는 다양한 방법을 제시한다. 예를 들어, 물음표 블록의 플래그(Flag)를 조작하여 파이프의 스프라이트 슬롯을 재정의하거나, 쿠파(Koopa)의 데이터를 변조하여 물음표 블록의 스프라이트 데이터를 덮어쓰게 만든다. 이러한 데이터 변조(Data Manipulation)는 미사용된 게임 로직을 활성화하고 예상치 못한 결과를 초래하는 데 핵심적인 역할을 한다.
게임 상태 조작 및 미사용 데이터 활용
발표자는 미사용된 스프라이트 데이터(Unused Sprite Data)를 활용하여 게임의 상태를 조작하는 방법을 탐구한다. 물음표 블록의 플래그(Flag)를 조작하여 파이프의 스프라이트 슬롯을 재정의하고, 이를 통해 미사용된 스프라이트 데이터를 로드시킨다. 이 과정에서 P-Switch와 같은 오브젝트의 데이터가 변조되어 예상치 못한 동작을 유발하며, 이는 게임의 근본적인 로직을 우회하는 흥미로운 사례로 제시된다.