[Lobsters 요약] Claude Code와 2001년 GBA 게임 'Klonoa: Empire of Dreams'의 51% 코드 역컴파일 프로젝트 시작
1
설명
2026년 8월 17일, Macabeus는 2001년 게임보이 어드밴스(GBA) 게임 'Klonoa: Empire of Dreams'(KEoD)의 역컴파일 프로젝트 진행 상황을 공유했습니다.
이 프로젝트는 AI 도구인 Claude Code를 활용하여 게임의 어셈블리 코드를 C 소스 코드로 변환하는 것을 목표로 하며, 현재까지 게임 코드의 51%를 성공적으로 역컴파일했습니다.
특히, 25년간 발견되지 않았던 게임 내 이스터 에그가 Claude Code에 의해 자동으로 발견되는 성과를 거두었습니다.
### 배경 설명
매칭 역컴파일(Matching Decompilation)은 어셈블리 코드를 C 소스 코드로 변환하여 컴파일 시 원본과 바이트 단위로 동일한 기계 코드를 생성하는 기술입니다. 이는 레트로 게임 커뮤니티에서 고전 게임의 소스 코드를 복원하는 데 널리 사용됩니다. '슈퍼 마리오 64'와 '젤다의 전설: 시간의 오카리나'와 같은 게임들이 이미 완전한 매칭 역컴파일을 달성했습니다.
'Klonoa: Empire of Dreams'는 2001년 7월, GBA 출시 약 4개월 후에 발매된 게임으로, 현재 활발히 역컴파일이 진행 중인 GBA 게임 중 가장 오래된 축에 속합니다. 이러한 출시 시점은 해당 게임이 ADS 1.2(2001년 11월 출시)나 Metrowerks CodeWarrior(2002년 4월 출시)와 같은 후기 컴파일러를 사용했을 가능성을 낮춥니다. 대신, 당시 GBA 게임 개발에 널리 사용되었던 agbcc(GCC 2.95의 포크)가 사용되었을 가능성이 높습니다.
이 프로젝트는 AI를 활용한 역컴파일의 가능성을 탐구하며, 특히 대규모 언어 모델(LLM)이 복잡한 소프트웨어 역공학에 어떻게 기여할 수 있는지 보여줍니다. AI 기반 도구의 발전은 게임 복원뿐만 아니라 레거시 시스템 분석 및 유지보수에도 중요한 시사점을 제공합니다.
### 프로젝트 설정 및 목표
프로젝트의 첫 단계는 구조화된 프로젝트 설정입니다. GBA 역컴파일 프로젝트의 일반적인 구조를 따르면서도, 몇 가지 독특한 목표를 설정했습니다. 첫째, ROM의 에셋이나 어셈블리 코드를 포함하지 않아 재현 가능한 환경을 구축합니다. 이는 다른 GBA 게임에도 적용할 수 있는 기반을 마련하기 위함입니다. 둘째, AI 에이전트가 작업하기 용이하도록 프로젝트 구조를 설계합니다. 이를 위해 .gba ROM을 입력받아 .s 파일을 생성하는 자동화된 스크립트를 사용하며, 모든 변경 사항은 이 생성 스크립트에서 관리됩니다. 이는 어셈블리 파일을 직접 수정하는 기존 방식과 차별화됩니다. 또한, 병렬 작업을 위해 Git 워크트리를 쉽게 생성하고 새로운 매칭 함수를 추가하기 용이하도록 최소한의 수동 작업으로 진행됩니다.
### 디스어셈블리 및 컴파일러 식별
프로젝트의 첫 산출물은 게임의 어셈블리 코드입니다. 이를 위해 매칭 역컴파일에 특화된 GBA 디스어셈블러인 Luvdis를 사용했습니다. Luvdis는 KEoD의 ROM을 읽어 하나의 큰 .s 파일로 출력합니다. 원본 게임의 어셈블리 소스 코드를 Git에 포함하지 않기 위해 Luvdis는 Git 서브모듈로 관리되며, ./setup.sh 스크립트를 통해 호출됩니다. 이 스크립트는 Luvdis 호출 외에도 컴파일러 컴파일, 디스어셈블된 코드 정제 등 후속 작업을 수행합니다. KEoD가 2001년 7월에 출시되었음을 고려할 때, 개발에는 agbcc 컴파일러가 사용되었을 가능성이 높습니다. 이 컴파일러는 간단한 함수들을 깨끗한 C 코드로 매칭하는 데 성공하여 프로젝트의 기반으로 채택되었습니다. 초기 함수 컴파일을 위해 Claude Code가 다른 역컴파일 프로젝트를 참고하여 Makefile과 링커 스크립트를 작성했습니다.
### 어셈블리 코드 정제: 함수 분할 및 데이터 식별
Luvdis가 93개의 함수를 자동으로 감지했지만, 실제로는 훨씬 더 많은 함수가 존재합니다. Ghidra를 사용하여 약 300개의 새로운 함수를 추가로 발견했으며, Claude Code의 도움으로 총 663개의 함수를 확보했습니다. KEoD의 함수들은 다른 GBA 게임에 비해 크기가 큰 편이며, 이는 역컴파일의 난이도를 높입니다. Claude Code는 `generate_asm.py`라는 Python 스크립트를 작성하여 초기 Luvdis 출력을 더 작은 함수 단위로 분할하고 각 함수를 별도의 .s 모듈로 관리합니다. 이 과정에서 함수 포인터 테이블을 통한 함수 호출과 함수 단편화(fallthrough) 문제가 발견되었으며, 이를 해결하기 위해 Claude Code는 함수 병합 및 재구성을 통해 정확한 C 코드를 생성했습니다. 또한, 코드 내 데이터로 사용되는 부분을 식별하는 것이 중요했습니다. 예를 들어, `GetActionCost` 함수는 스위치 문을 사용하여 반환 값을 결정하는데, 이는 데이터 테이블을 참조하여 컴파일됩니다. Luvdis는 일부 데이터 풀을 복구하지만, 모든 경우를 다루지는 못합니다. 따라서 Claude Code는 데이터로 사용되는 코드 섹션을 식별하고 TOML 파일에 저장하여 `generate_asm.py`에서 처리하도록 했습니다.
### AI 기반 도구 및 역컴파일 루프
이 프로젝트는 Claude Code 외에도 asmlift, Transmuter, gba-kit과 같은 AI 기반 도구들을 활용합니다. asmlift는 프로그래밍 방식의 디컴파일러로, AI가 직접 디컴파일러를 설계하고 반복적으로 개선하는 접근 방식을 취합니다. Transmuter는 기존의 Permuter를 개선한 도구로, AI가 코드 변경을 안내하고 가설을 테스트하는 방식으로 작동합니다. gba-kit은 스크립팅 가능한 GBA 에뮬레이터로, AI가 게임을 탐색하고 코드 품질을 개선하는 데 사용됩니다. 특히 gba-kit을 통해 Claude Code는 'Klonoa: Empire of Dreams'의 25년 된 이스터 에그를 발견하는 성과를 거두었습니다. 역컴파일 루프는 Claude Code가 함수를 선택하고, asmlift와 Transmuter를 사용하여 매칭을 시도하며, gba-kit으로 코드 품질을 개선하는 방식으로 진행됩니다. 이 과정에서 agbcc 컴파일러에 대한 계측(instrumentation) 추가와 같은 개선도 이루어졌습니다. 예를 들어, `-finstrument-src-locs` 플래그는 어셈블리 코드에 C 소스 파일 및 줄 번호 주석을 추가하여 코드 추적을 용이하게 합니다.
### 가치와 인사이트
이 프로젝트는 AI, 특히 Claude Code를 활용한 복잡한 소프트웨어 역공학의 가능성을 보여줍니다. 2001년 GBA 게임 'Klonoa: Empire of Dreams'의 51% 코드를 성공적으로 역컴파일하고 25년 된 이스터 에그를 발견한 것은 AI의 분석 및 문제 해결 능력을 입증합니다. 또한, asmlift, Transmuter, gba-kit과 같은 새로운 AI 기반 도구의 개발은 역컴파일 프로세스를 가속화하고 자동화하는 데 기여합니다. 이는 레거시 시스템 분석, 게임 복원, 그리고 잠재적으로는 소프트웨어 유지보수 및 보안 감사 분야에도 적용될 수 있는 중요한 기술적 진보를 나타냅니다. 특히, AI가 기존 도구를 개선하고 새로운 도구를 설계하는 과정은 AI 자체의 발전 가능성을 시사합니다.
### 기술·메타
- Claude Code
- Luvdis (GBA Disassembler)
- Ghidra
- agbcc (GCC 2.95 fork)
- Python
- Git
- asmlift
- Transmuter
- gba-kit
- Mizuchi
- Decomp Academy
### 향후 전망
KEoD의 나머지 50% 역컴파일은 더 어려운 함수들을 포함할 것으로 예상되며, 이는 추가적인 AI 도구 개선과 인간의 전문적인 개입을 요구할 것입니다. AI 의존도가 높은 프로젝트의 주요 위험은 인지 부채(cognitive debt)의 증가이며, 이를 관리하기 위한 근본적인 학습과 구조화된 접근 방식이 중요합니다. Decomp Academy와 같은 교육 자료의 발전은 이러한 인지 부채를 줄이는 데 기여할 수 있습니다. 또한, Mizuchi와 같은 AI 플랫폼의 기능(예: Atlas의 함수 임베딩)을 독립적으로 활용하여 AI 에이전트가 더 효율적으로 작동하도록 하는 계획은 향후 AI 기반 역컴파일 프로젝트의 발전에 중요한 역할을 할 것입니다. 경쟁 측면에서는 다른 AI 디컴파일러 프로젝트(예: Kuna)와의 기술적 차별화 및 협력이 이루어질 수 있습니다.
📝 원문 및 참고
- Source: Lobsters
- 토론(Lobsters): [lobste.rs](https://lobste.rs/s/ltm5qj/starting_decompilation_project_from)
- 원문: [링크 열기](https://gambiconf.substack.com/p/starting-a-decompilation-project)
---
출처: Lobsters · [원문 링크](https://gambiconf.substack.com/p/starting-a-decompilation-project)
신고 · 불법·유해·아동 안전(CSAE) 관련 콘텐츠

댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.