마리오에서 40년 만의 ACE 발견!
슈퍼 마리오 브라더스(Super Mario Bros.)에서 40년 만에 발견된 임의 코드 실행(ACE) 글리치를 심층 분석함
게임 내 메모리 구조와 객체 상태를 조작하여 원하는 코드를 실행하는 원리를 설명함
타이머, 파이어볼, 버저 등 게임 객체 상호작용을 이용해 ACE를 트리거하는 방법을 시연함
NES 에뮬레이터와 실제 하드웨어에서 ACE를 구현하는 과정을 상세히 다룸
임의 코드 실행(ACE)의 기본 원리
발표자는 슈퍼 마리오 브라더스에서 임의 코드 실행(ACE)이 어떻게 가능한지 설명하며, 이는 게임의 메모리 관리 방식을 악용하는 것임을 강조함. 게임은 특정 메모리 주소에 저장된 값을 읽어와 코드를 실행하는데, ACE는 이 과정에서 원치 않는 코드의 주소를 주입하여 게임의 흐름을 제어하는 방식임. 이는 게임의 상태와 객체 데이터를 조작하여 달성됨.
ACE 트리거를 위한 객체 상호작용
영상에서는 ACE를 유발하기 위해 파이어볼, 버저, 타이머 등 여러 게임 객체의 상호작용을 활용한다고 설명함. 특히, 특정 프레임에 버저가 파이어볼에 맞고, 동시에 타이머가 특정 값을 가질 때 ACE가 발동될 수 있음을 보여줌. 이 과정에서 객체의 상태 변화와 메모리 쓰기가 핵심적인 역할을 수행함.
NES 하드웨어 및 메모리 구조
발표자는 NES의 CPU(6502)와 PPU(Picture Processing Unit) 아키텍처를 간략히 설명하며, ACE가 PPU 레지스터 조작과 관련 있음을 시사함. 게임은 RAM에 저장된 객체 데이터를 읽어와 화면에 렌더링하는데, ACE는 이 RAM의 특정 영역을 덮어쓰는 방식으로 작동함. 이는 하드웨어 수준의 이해를 요구하는 복잡한 과정임.
실제 ACE 구현 및 시연
영상에서는 실제 게임 플레이를 통해 ACE가 어떻게 발현되는지 시연함. 특정 레벨에서 버저를 파이어볼로 처치하고, 타이머 값을 조작하여 게임의 오브젝트 렌더링 로직을 우회하는 과정을 보여줌. 이를 통해 원하는 코드를 실행시켜 게임 내에서 예상치 못한 동작을 유발하는 데 성공함.
ACE의 잠재적 영향 및 활용
ACE는 게임의 안정성을 해치고 예상치 못한 동작을 유발할 수 있지만, 동시에 새로운 게임 플레이 방식이나 커스텀 콘텐츠 제작의 가능성을 열어줌. 이 발견은 게임 해킹 및 리버스 엔지니어링 커뮤니티에 큰 영감을 주었으며, 다른 게임에서도 유사한 취약점을 찾으려는 노력을 촉발할 수 있음.