2003년작 'Crimsonland' 부활, AI와 함께하는 리버스 엔지니어링 여정!
2003년작 'Crimsonland'의 오리지널 바이너리(Original Binary)를 분석하여, 정확히 동일한 동작을 하는 재구현 프로젝트(Rewrite Project) 진행
Ghidra, Binary Ninja 등 다양한 리버스 엔지니어링 도구와 GPT-5.2 기반의 코드 생성 에이전트(Code Generation Agent) 활용
DirectX 8 기반의 게임 엔진(Game Engine) 구조 분석 및 Vtable 매핑(Vtable Mapping)을 통한 핵심 기능 파악
정적 분석(Static Analysis)과 런타임 분석(Runtime Analysis)을 병행하여, 게임의 동작 방식을 정확하게 재현
리버스 엔지니어링(Reverse Engineering) 파이프라인 구축
프로젝트는 Ghidra를 사용하여 초기 디컴파일을 수행하고, 이후 Binary Ninja를 활용하여 코드 분석을 진행했다. 특히, DirectX 8 기반의 grim.dll 엔진의 Vtable 구조를 파악하는 것이 핵심 과제였다. 개발자는 정적 분석(Static Analysis)과 런타임 분석(Runtime Analysis)을 병행하여, 함수 호출 관계를 추적하고, 게임의 동작 방식을 이해했다. 이러한 과정을 통해, 개발자는 게임의 핵심 로직을 파악하고, 재구현을 위한 기반을 마련했다.
AI 기반 코드 생성 에이전트(Code Generation Agent) 활용
개발자는 GPT-5.2 기반의 코드 생성 에이전트인 Codex를 활용하여, 코드 재작업을 자동화했다. Codex는 디컴파일된 코드를 분석하고, 이를 기반으로 새로운 코드를 생성하는 역할을 수행했다. 개발자는 Codex에게 정확한 동작을 요구하기 위해, 엄격한 규칙을 설정하고, 데이터 미저장 정책(Zero-Retention Policy)을 준수했다. 이를 통해, 개발자는 코드 작성 시간을 단축하고, 오류 발생 가능성을 줄였다.
게임 엔진(Game Engine) 구조 분석 및 재구현
프로젝트는 DirectX 8 기반의 grim.dll 엔진을 분석하여, 게임의 렌더링 방식을 파악했다. 개발자는 grim->BindTexture(), grim->DrawQuad()와 같은 함수 호출을 추적하고, 이를 기반으로 Raylib을 사용하여 게임을 재구현했다. 특히, 게임의 텍스처(Texture) 및 폰트(Font) 형식을 분석하고, 이를 정확하게 재현하는 데 주력했다. 개발자는 게임의 모든 기능을 재현하기 위해, 끊임없이 테스트하고, 오류를 수정했다.
정확한 동작 재현을 위한 노력
프로젝트의 목표는 오리지널 게임의 모든 동작을 정확하게 재현하는 것이었다. 개발자는 Gog.com에서 제공하는 v1.9.93 버전을 기준으로, 모든 버그(Bug)와 동작을 동일하게 구현했다. 이를 위해, 개발자는 런타임 분석(Runtime Analysis)을 통해, 게임의 동작을 상세하게 기록하고, 이를 기반으로 코드를 작성했다. 또한, 개발자는 AI 환각(Hallucination)을 방지하기 위해, 코드 생성 에이전트의 출력을 신중하게 검토하고, 검증했다.