프리즌브레이크도 아니면서 왠 탈옥이냐고. ipod touch를 애플의 독점 소프트웨어 감옥에서 탈옥 시켜주기 때문에 jailbreak 라 한다.
요는 이렇다.
ipod touch, iphone은 BSD 커널에 기반한 Darwin 커널을 사용한다. 즉 내부는 유닉스다.
애플에서 배포한 펌웨어는 이 시스템 내부를 예쁜 UI로 싸고, 내부를 들여다 볼 수 없도록 막아놓았다. itunes 에서 저장해둔 복원용 펌웨어를 이용해, 내부를 들여다 볼 수 있게 수정한 펌웨어를 새로 빌드한다.
빌드한 펌웨어를 ipod touch 의 복구 모드를 이용해 기존 펌웨어를 덮어쓴다.
이제 내부가 열린 ipod touch를 가지고 재미나게 논다.
애플이 배포한 펌웨어를 해킹해 새로운 펌웨어를 생성해주는 툴은 해킹 천재들이 만든 winpwn (http://winpwn.com) 을 사용한다. 이 글을 쓰느라 다시 한번 홈페이지를 방문해 보니 엊그제까지만 해도 펌웨어 2.0.1 버전까지 지원 한다고 했는데, 어느새 2.0.2 버전까지 지원을 한다고 바뀌어 있다. winpwn 의 바이너리 버전이 같은걸 보니, 2.0.0, 2.0.1, 2.0.2 펌웨어 모두 크게 변경이 있는건 아닌가 보다. 이거 쓰고 나서 나도 펌웨어를 새로 빌드해 봐야 겠다. 펌웨어를 2.0.2로 업데이트 하고 나서 jail break를 하려고 보니 펌웨어 2.0.2를 지원하는 winpwn은 아직 릴리즈 되지 않았다. 곧 다운로드 가능할 것 같은데 기다리기 힘들면, 대신 quickpwn을 사용하자. http://blog.iphone-dev.org/post/46800837/my-little-pwnies-dressage
해킹된 펌웨어를 빌드해 주는 툴은 여러가지가 있는데, 나는 윈도우에서 사용 가능한 winpwn 을 사용했다. mac 용 툴은 찾아 보시길 바란다. vista 64bit 버전에서 winpwn 을 사용했으며, 32 bit 에서도 물론 잘 동작한다. 원래 32bit 용 어플리케이션이다.
winpwn 의 사용법은 그리 어렵지 않다. 실행해 보면 몇가지 메뉴가 있는데, 이 글에서 사용할 것은 두개밖에 없다. Browse .IPSW 를 눌러서 애플이 배포한 원본 펌웨어를 로드한다. 이건 파일 찾기로 2.0.1 을 하면 itunes 가 복원 모드에서 사용하기 위해 저장해둔 것이 나올것이다. 이걸 사용하면 된다. vista 64bit 버전에서는 c:사용자자기계정AppDataRoamingApple ComputeriTunesiPod Software Updates 디렉토리에 있다. AppData 디렉토리가 안보인다면 제어판의 폴더보기 옵션에서 시스템파일 보기 옵션을 켜면 보일것이다.
애플의 복원 펌웨어이미지 파일을 winpwn이 로드하면 IPSW Builder 메뉴가 활성화 된다. 눌러보면 몇개의 탭을 가진 새창이 하나 뜨는데 이중 첫번째 Applications 탭을 눌러 보자. Cydia, Installer 2.0, YouTube Activation fix 세개의 체크 박스가 있다. Cydia, Installer 2.0 등은 오픈소스, 해킹 소프트웨어들을 설치 할 수 있게 해주는 설치프로그램이다. 펌웨어 2.0.x 대의 AppStore 에 해당한다고 보면 된다. 이 프로그램을 이제 새로 만들 해킹된 펌웨어이미지 파일에 추가를 해주는 것이다. 잘 모른다면 Cydia 를 선택하고 하단의 Build .ipsw 버튼을 누르면 해킹된 펌웨어를 어디에 저장할지 물어보고 해당 디렉토리에 펌웨어를 빌드해 준다. 입맛에 따라 Installer 2.0도 설치하고, Custom Image 탭에서 ipod touch 부트, 복원모드 진입때의 그래픽 이미지를 변경할 수도 있다. Partion Resizer 탭에서 root 파티션의 사이즈를 변경할 수도 있다. ipod touch, iphone은 4G, 8G, 16G 버전에 관계없이 공통으로 300MB를 root 파티션으로 잡고 시스템 라이브러리 및 프로그램들을 여기에 설치하고, 나머지 용량을 data 파티션으로 사용한다고 한다. winpwn 을 사용하면 기본 500MB를 root 파티션으로 잡는다. 해킹된 펌웨어를 사용하여 오픈소스 소프트웨어를 이것저것 설치하다 보면 이 500MB가 부족할 수도 있는데 Partion Resizer 탭에서 이걸 더 늘려줄 수도 있다. 하지만 이건 기본 500MB로 그대로 두고 Cydia 인스톨러에서 BossTool을 설치해서 어플리케이션을 data 파티션에 설치하게 하는게 더 낫다.
이렇게 펌웨어를 빌드한후 이걸 ipod touch에 다시 넣는 과정이 필요하다. winpwn 도움말에는 iPwner 를 누르면 알아서 해준다고 하는데, vista 64bit 버전에서는 이게 잘 안되는 것 같다. 그래서 수동으로 DFU 모드로 들어가서 복구를 해 줬다.
DFU 모드로 들어가기 위해서는 대기 버튼을 계속 눌러서 전원을 끈후, 다시 대기 버튼과 홈 버튼을 계속 눌러서 부팅을 시킨다. 이때 전원이 들어오면 대기 버튼은 떼고 홈 버튼을 10초 정도 계속 누르고 있는다. DFU 모드로 들어가면서 DFU 모드용 usb 드라이버가 OS에 추가로 설치되고 itunes 에서 복원 버튼이 활성화 된다. shift 키를 누른채로 복원 버튼을 클릭하면 펌웨어이미지 파일을 선택할 수 있는데 이때 winpwn 에서 빌드한 펌웨어이미지 파일을 선택해서 복원을 진행시킨다. 전원이 들어왔다고 10초 정도 더 기다리지 않고 바로 홈 버튼을 떼면 일반 복원 모드로 진입을 하게 된다. 이 일반 복원 모드에서 해킹된 펌웨어이미지 파일로 복원을 하려고 하면 알수없는 에러(6) 을 내고 더이상 진행이 되지 않는다. 즉 pda 펌웨어 업데이트 할때 가끔 겪는 벽돌이 된다. ipod touch 가 벽돌이 되는, 사용할 수 없는 상태가 된다는 말이다. 이렇게 되면 애플에서 배포한 복원용 펌웨어이미지 파일을 이용해서 원래대로 돌아 갈 수 있다.
말이 길었는데 간단히 정리하자면,
os의 파일 찾기를 이용해서 itunes 가 저장해둔 복원용 펌웨어이미지 파일을 찾는다.
winpwn에서 Browse .IPSW를 눌러 이 파일을 로드한다
IPSW Builder를 눌러서 Applications 탭에서 Cydia 를 체크하고 Build .ipsw 를 눌러서 해킹된 펌웨어를 얻는다.
DFU 모드로 들어가서 새로 빌드한 해킹된 펌웨어로 복구한다.
winpwn의 readme 를 읽어보면 애플은 2.0.x 대의 펌웨어를 내놓으면서 펌웨어 1.x 대와 비교해 펌웨어 2.0.x의 내부를 완전히 다시 썼다고 한다. 그래서 1.x 대의 어플리케이션이 2.0.x 대에서는 동작하지 않는다. 그러면서 2.0.x 대의 펌웨어에 AppStore를 끼워넣었다. 들어가보면 그닥 유용하지 않은 무료 소프트웨어와 유용해 보이는 유료소프트트웨어를 팔고 있다. iTunes의 어플리케이션 판인 것이다. 1.x 대의 해킹된 펌웨어용 무료 소프트웨어 개발사들이 2.0.x 대의 유료 AppStore 로 들어갔다고 한다. 그래서 현재 Cydia 나 Installer 2.0 에는 설치할 수 있는 프로그램이 아직 많지 않다.
하지만 이러한 인스톨러는 여전히 유용하다. 바로 상당수의 오픈소스 소프트웨어들이 건재한 것이다. 특히 위에서 Cydia를 추천한 것은 바로 apt 를 이용한 데비안식 패키지 배포를 하기 때문이다. 우분투나 데비안에서 apt를 이용해 패키지를 관리하는 사람이라면 아주 반가울 것이다. apt-get, apt-cache 등의 명령이 그대로 포팅되어 있다. source list 를 추가하면 개인들이 만든 새로운 프로그램, 테마들도 추가 할 수 있다. open sshd, vsftpd, lighttpd 등의 패키지가 들어 있어서 무선인터넷이 가능한 환경이면 ipod touch 내부로 ssh, sftp, http 접속이 가능하다. 더구나 gcc, java, python, ruby 가 포팅되어 있어서 ipod touch 용 어플리케이션을 개발 할 수 있는 환경을 만들 수 있다. 들고다니는 BSD 박스가 되는 것이다.
이 커널이 OS-X 에 사용된 커널과 같은 버전인지는 나에게 mac 기계가 없어서 모르겠다. vmware 로 OS-X 를 설치해 보려고 했으나 실패했다. 이 터미널 에뮬레이터는 Cydia 에 들어가서 Terminal 패키지를 설치한 건데 ctrl 키나 esc 같은 특수키를 입력할 수가 없다. 그래서 ipod touch 에서 내가 좋아하는 vim을 사용하기 아주 불편하고, 터미널에서 ping 테스트시 ctrl-c 등의 강제 종료가 안된다. 음… 이건 터미널 에뮬레이터의 문제라기 보다는 ipod touch 에 내장된 키보드 문제군. 마우스 제스춰 비슷한 걸로 ctrl, esc 등의 입력이 가능하다. 여기 http://iam312.pe.kr/270 를 참고한다. 그리고 이 터미널 에뮬레이터에서는 한글 입출력이 안된다. 이런 문제점들은 다른 pc에서 ipod touch 로 ssh 접속해서 들어가서 작업하면 된다.
berkeleydb 패키지가 업데이트 되었군. 소스 가져다 삽질 할 필요없이 arm 기계의 빌드된 바이너리를 바로 사용할 수 있다. 데비안, 우분투여 영원하라~ 아래는 같은 업데이트 사항을 Cydia 인스톨러에서 확인한 것이다.
Cydia 인스톨러를 실행할때마다 업데이트 사항을 체크해서 보여주고 바로 업데이트까지 해준다. 우분투의 synaptic 보다는 불편하지만 좋다. ^^
해킹된 펌웨어를 이용할 때의 또 다른 이점은 다양한 테마엔진을 사용할 수 있는 것이다. 애플이 제공하는 테마엔진은 Spring Board 인데, 이를 확장시킨 오픈 소스 진영의 Summer Board 가 있고, 여기에 맞춰 공개된 다양한 테마들이 있다. 위는 Summer Board 에 기능을 더 추가한 Winter Board 라는 테마 엔진의 Buuf2 라는 테마를 적용한 것이다. 개발자가 아니더라도 애플의 감옥에서 ipod touch 를 탈옥 시킬 이유가 여기 있다.
1.x 대의 해킹된 펌웨어를 이용해 개발자를 끌어들여서 2.x 대의 AppStore 를 이용해 유료 어플리케이션 시장을 만든 애플의 능력은 음원을 이용한 시장을 연 iTunes의 충격보다 더하다. 이런 돈을 버는 장을 만드는 능력을 어찌하면 배을 수 있을 까나.