아이팟 나노 3세대 용량 업그레이드, 8년 만에 성공
원제 16GB iPod Nano 3G Upgrade
113 포인트댓글 13
Key Point
8년간의 펌웨어 역공학, 언어문법 익스플로잇, 칩 호환성 패칭을 거친 하드웨어 해킹 프로젝트로, 정보 은닉된 애플 기기에서 독립적인 수정이 얼마나 도전적인지 보여주는 사례다.
핵심 요약
- 2020년부터 시작한 iPod Nano 3G의 NAND 칩 업그레이드 프로젝트가 완성됐다. 용량을 기존 4-8GB에서 16GB로 늘렸으며, 이를 위해 펌웨어 역공학, 부트로더 해킹, NAND 드라이버 패칭까지 다층 작업이 필요했다.
- 처음 NAND 칩을 교체했을 때는 '빨간 X' 에러가 발생했는데, Apple 펌웨어가 특정 NAND 칩만 인정하는 화이트리스트를 가지고 있기 때문이었다. Rockbox 프로젝트에서 상속받은 역공학 자료와 Pwnage 2.0 스택 오버플로우 익스플로잇을 활용해 부트로더 수준의 코드 실행을 확보했다.
- EFI 부트로더의 NAND 드라이버 내 칩 ID 테이블을 찾아 새로운 칩의 정보로 패칭했지만 계속 실패했다. 진단 모드를 활용해 NAND ID를 빼내는 데이터 굴수 기법으로 초기화 단계에서 메모리검증(memcmp) 실패를 발견했다.
- 진단 과정에서 FMISS라는 NAND 코프로세서의 마이크로코드 명령어 세트를 역공학했다. 이는 프로젝트의 핵심이 아니었지만 신기한 발견이었으며, QEMU 에뮬레이터에 FMISS 에뮬레이션을 추가했다.
- 데이터 회복용 스파이더 보드와 DSLogic 로직 분석기로 NAND 버스를 검사한 결과, 칩이 페이지 쓰기를 거부하고 있었다. NAND 칩의 WP# (쓰기 방지) 핀이 패드에 연결되지 않은 것을 발견해 솔더링했다.
- 그 후 페이지 6부터 심각한 비트 오류가 발생했다. NAND 제조사 관계자의 설명으로, MLC NAND는 한 셀에 2비트를 저장하는데 페이지 0과 6이 같은 셀을 공유하며, 페이지 6은 마진이 좁은 두 번째 비트를 사용하기 때문이라는 사실을 알게 됐다.
- 오류 정정 강화보다는 값싼 SLC NAND 칩으로 교체하기로 결정했고, 이를 통해 처음으로 디스크 모드에 진입했다. 그러나 디스크 모드는 8192바이트 페이지 크기를 처리하지 못해 용량 계산 오류와 섹터 크기 불일치로 마운트되지 않았다.
- Linux 사용자공간에서 NAND 드라이버를 실행하는 재호스팅 작업으로 동적 분석을 수행했다. Raspberry Pi 3B+에 드라이버를 로드해 메모리 할당, 포인터 패칭 등 여러 기법으로 드라이버의 동작을 분석하고 검증했다.
- 전체 QEMU 포크 프로젝트를 통해 iPod Nano를 부트로머부터 RetailOS, USB 열거까지 에뮬레이션하는 데 성공했다. 이는 16GB 업그레이드 개발 과정에서 필수적인 동적 분석 도구가 되었다.