정보기술 · 정보통신 ·
지원 종료 구형 아이폰에서 최신 iOS 구동 성공...개발자, 기술적 한계 극복 과정 공개
개발자가 애플이 지원하지 않는 구형 기기에서 상위 버전 iOS를 구동하는 데 성공해 기술적 방법론을 공개했다.
[한국정보기술신문] 한 개발자가 애플이 공식 지원을 종료한 구형 iOS 기기에서 지원되지 않는 상위 버전의 운영체제를 구동하는 데 성공하며 그 기술적 세부사항을 공개했다. 이번 프로젝트는 iOS 시스템의 구조적 이해와 함께 하드웨어 제약을 소프트웨어적으로 우회하는 방법을 제시한다는 점에서 주목받고 있다.
개발자 NyanSatan은 자신의 기술 블로그를 통해 애플이 iOS 6 지원을 제공하지 않았던 3세대 아이팟 터치에서 iOS 6를 성공적으로 구동한 과정을 상세히 공개했다. 해당 기기는 공식적으로 iOS 5.1.1까지만 지원됐지만, 이번 프로젝트를 통해 한 세대 상위 운영체제를 작동시키는 데 성공했다.
이 개발자는 올해 초 유튜브를 통해 3세대 아이팟 터치에서 iOS 6가 구동되는 모습을 처음 공개한 바 있으며, 이후 해당 기기에 iOS 6 복원 이미지를 생성하는 스크립트를 깃허브에 공개했다. 최근에는 이러한 작업의 기술적 배경과 구현 방법을 자세히 설명하는 글을 발표했다.
iOS 시스템 구조 분석이 핵심
프로젝트의 핵심은 iOS의 내부 구조를 정확히 이해하고 각 구성 요소를 적절히 조작하는 것이었다. iOS는 부트로더인 iBoot, 운영체제 커널과 드라이버가 결합된 커널캐시, 하드웨어 정보를 담은 디바이스트리, 사용자 공간 파일시스템, 그리고 각종 코프로세서용 펌웨어로 구성된다.
개발자는 먼저 3세대 아이팟 터치와 유사한 하드웨어를 가진 아이폰 3GS를 테스트베드로 활용했다. 두 기기는 각각 S5L8922X와 S5L8920X SoC를 탑재해 하드웨어 유사성이 높았다. 특히 아이폰 3GS는 공식적으로 iOS 6를 지원받았기 때문에, 이를 기반으로 하위 버전 부트로더와 디바이스트리로 iOS 6를 구동하는 실험을 진행할 수 있었다.
디바이스트리 수정이 가장 복잡한 작업 중 하나였다. iOS 6는 이전 버전 대비 많은 새로운 노드와 속성을 추가했기 때문에, 이를 자동으로 비교하고 적용하는 파이썬 스크립트를 개발해야 했다. 특히 chosen 노드의 nvram-proxy-data 속성은 원시 NVRAM 덤프를 포함해야 하며, 이를 비워두면 커널이 초기 단계에서 멈추는 문제가 발생했다.
iBoot는 비교적 간단한 수정만 필요했다. Image3 서명 검증 패치, 부트 인자 주입, 디버그 활성화 패치 등이 적용됐다. 중요한 점은 복원 부팅이 아닌 일반 부팅 시 nvram-proxy-data를 동적으로 채워야 한다는 것이었다. 하드코딩된 랜덤 NVRAM을 사용할 경우 실제 NVRAM이 덮어씌워질 위험이 있기 때문이다.
커널캐시 생성의 기술적 도전
가장 복잡한 작업은 커널캐시 생성이었다. 3세대 아이팟 터치는 공식적으로 iOS 6를 받지 못했지만, 애플 내부 빌드에는 S5L8922X용 독립 커널과 관련 확장 기능이 포함돼 있었다. 문제는 이들을 동시에 로드하는 방법이었다.
개발자는 처음에 구형 맥 OS X 방식처럼 부트로더 수준에서 모든 커널 확장을 동적으로 로드하려 했다. 그러나 커널에 링크 지원 코드가 없어 패닉이 발생했다. 결국 사전 링크된 커널캐시를 생성하는 방법을 선택했다.
해결책은 의외로 가까이 있었다. 애플 실리콘 이전의 맥 OS X가 사용하던 커널캐시 생성 로직을 iOS에 적용한 것이다. 시에라의 내부 빌드에서 찾은 kcgen 도구를 사용해 iOS용 커널캐시를 생성할 수 있었다. 이 과정에서 모든 관련 IOKit 퍼스낼리티가 제거되지 않도록 하는 것이 중요했으며, 생성된 파일에서 팻 헤더를 제거하는 추가 작업도 필요했다.
복원 램디스크 파일시스템 수정도 중요한 단계였다. asr 도구에 패치를 적용하고 파티션 레이아웃 설정 파일을 수정했다. 또한 iBoot 익스플로잇을 설치하기 위해 rc.boot 바이너리를 재구현해 복원 완료 후 세 번째 파티션을 추가하고 익스플로잇을 기록한 뒤 부트 파티션을 변경하도록 했다.
루트 파일시스템 및 시스템 패치
루트 파일시스템은 다수의 변경이 필요했다. 스프링보드용 하드웨어 기능 설정 파일을 추가하고, 멀티터치와 와이파이 펌웨어를 iOS 5.1.1 버전으로 포함시켰다. 블루투스 펌웨어와 스크립트는 BlueTool 바이너리에 하드코딩돼 있어 이를 추출해 적절한 위치에 배치했다.
FairPlay 데몬은 원래 아이폰 3GS로 제한돼 있었지만, LaunchDaemon 설정 파일에서 하드웨어 제한 키를 제거하면 3세대 아이팟 터치에서도 작동했다. 이는 애플 서버를 통한 기기 활성화에 필수적인 요소였다.
DYLD 공유 캐시에도 여러 패치가 적용됐다. iOS 6에서 도입된 제품 ID 개념을 처리하기 위해 아이폰 3GS의 긴 형태 제품 ID를 디바이스트리에 하드코딩하고, MobileGestalt 프레임워크의 제품 ID 매핑 테이블을 수정했다. 또한 기기 변형 정보를 반환하는 함수를 패치해 항상 A를 반환하도록 했으며, 수정된 페이지의 SHA-1 해시를 재계산해 코드 서명을 갱신했다.
iBoot 익스플로잇과 향후 계획
이 프로젝트의 또 다른 핵심 요소는 iOS 5 iBoot의 HFS+ 파일시스템 드라이버 버그를 활용한 익스플로잇이었다. 개발자는 수년 전 만든 익스플로잇을 이번 프로젝트를 위해 처음부터 재구현해 결정론적으로 작동하도록 개선했다.
개발자는 이번 작업이 예상보다 쉬웠지만 결코 간단하지는 않았다고 평가했다. 많은 사용자가 탈옥에 대해 문의했지만, 기존 도구는 작동하지 않으며 커널 패치와 Cydia 타르볼을 파일시스템에 추가하는 방식으로 구현할 수 있을 것으로 보인다.
향후 계획으로는 같은 해에 지원이 종료된 1세대 아이패드에 대한 유사 프로젝트를 진행할 예정이다. 개발자는 이번 기술 문서가 아이폰 4S에서 iOS 4 구동이나 1세대 아이패드 미니에서 iOS 5 구동 같은 다른 조합을 시도하는 데 도움이 되기를 희망한다고 밝혔다.
이번 프로젝트는 제조사의 공식 지원이 끝난 기기에서도 기술적 이해와 노력을 통해 최신 소프트웨어를 구동할 수 있음을 보여주는 사례로, 하드웨어 수명 연장과 전자 폐기물 감소에도 시사점을 제공한다.
한국정보기술신문 정보기술분과 전호재 기자 news@kitpa.org