- TheZZAZZGlitch는 Game Boy Advance 충돌음을 녹음해 카트리지 안의 게임 데이터를 식별하고, 결국 같은 ROM을 복원할 수 있음을 보여줌
- 핵심은 충돌 뒤 출력되는 오디오를 ROM 데이터로 해석하는 것이지만, 소스 형식별 조정이 많이 필요해 범용 덤프 도구로 쓰기엔 어려움
- 4시간 넘는 녹음 중 약 1시간 50분 지점에서 특징적인 파형이 나타났고, 이후 게임의 악기음과 오디오 샘플이 순차적으로 들림
- Python 스크립트와 정렬 보정으로 99.76% 정확도까지 도달했지만 부팅에는 실패했고, 3회 녹음을 다수결 알고리듬으로 병합하자 99.979%까지 개선됨
- 7개 녹음 병합과 빈 공간 필터링 끝에 100% 일치를 달성했으며, 충돌음만으로 GBA ROM을 복원할 수 있다는 실험적 가능성을 확인함
충돌음에서 ROM 데이터를 읽어낸 실험
- TheZZAZZGlitch는 GBA가 소프트웨어 충돌 후 내는 소리에 게임 데이터가 포함될 수 있음을 시연함
- 충돌한 GBA는 카트리지 내부 데이터를 기반으로 한 소리를 계속 낼 수 있고, 특수 하드웨어와 코드로 이 오디오를 분석하면 어떤 게임인지 식별 가능함
- 다만 이 방식은 카트리지 데이터를 쉽게 덤프하는 방법이 아니며, 바로 쓸 수 있는 해결책도 아님
- 서로 다른 소스 형식에 맞춘 튜닝이 많이 필요함
긴 녹음에서 드러난 파형
- GBA를 충돌시킨 뒤 4시간 이상 녹음한 결과, 약 1시간 50분 지점에서 특징적인 파형이 나타남
- 이후 구간에서는 게임에 포함된 실제 악기음과 오디오 샘플이 순서대로 들림
- 나머지 데이터는 13,100Hz의 8비트 데이터로 들리며, 일부 구간은 매우 이상하게 들림
Python 스크립트와 첫 복원 시도
- TheZZAZZGlitch는 “2일간 버그를 고친 뒤” 깨끗한 GBA 충돌 덤프 녹음을 읽는 Python 스크립트를 준비함
- ROM 데이터에는 0바이트 구간이 크게 존재하고, 이 부분은 무음처럼 나타나 오디오에서 파싱하기 어려움
- 원본 ROM 내 위치를 기준으로 섹션을 다시 정렬하는 별도 스크립트를 실행한 뒤, 복원 ROM은 99.76% 정확도에 도달함
- 이 ROM은 여전히 부팅되지 않았고, 알려진 ROM 데이터를 이용해 알 수 없는 데이터를 드러내는 방식이라 기술적으로 “치팅”에 해당함
- 완전히 블라인드로 진행하더라도 적용할 수 있는 가정과 추정은 남아 있음
여러 녹음을 병합해 정확도 높이기
- 다음 단계에서는 녹음 품질 개선에 집중함
- 3번 녹음한 결과를 “다수결” 알고리듬으로 병합하자 정확도는 99.979% 까지 올라감
- 이 출력 ROM은 부팅에는 성공했지만, 텍스트가 깨지고 타이틀 화면에서 크래시가 발생함
- 이후 7개의 녹음을 결합하고 빈 공간을 필터링하자 100% 일치를 달성함
물리 하드웨어와 추가 실험
- 영상 후반부에서는 이 방식이 물리 하드웨어에서 어떻게 동작하는지도 확인함
- 다른 게임에서도 실험하며, 복제 카트리지 안의 ARM 코드와 관련된 미스터리도 함께 추적함
- 더 나은 녹음을 얻는 방법도 시도됨
- 그중 하나는 한 채널로 거칠게 믹스다운하는 “cursed adapter” 사용임