0. 서론


(limera1n exploit 덕택에 모든 os 에서 반탈이 가능한) 아이폰4의 반탈툴이 나왔다.

이걸 부트룸 익스플로잇이라 하던가...?

이제 4가 지원 안 하는 os 가 생기면 이래저래 불편해질 것 같기도 하다..

펌웨어 추출부터가 안될테니...


여튼 opensn0w 라는 툴로 iOS7 에 올린 4를 반탈옥 할 수 있다.

아직 이런저런 문제가 많아서 직접 컴파일해서 써야하지만...


과정을 주욱 써봤는데..

마지막을 제하고는 devbug 님 과정을 따라간다.

내용이 좀 길어져서 나름 차례도 나눠봤고...


opensn0w의 주소는 https://github.com/winocm/opensn0w


구글 검색하면 LBBNetwork 것이 먼저 뜨지만 위가 원본인 것 같다.

하지만 맥에서 그대로 진행하기에는 문제가 많고 리눅스에서나 제대로 작동한다나....


devbug 님이 맥에서 작동하게 수정하셨으니 그걸 사용하자.

http://devbug.me/777


그리고 이건 맥에서 작동되기 전에 원래 작성하셨던 글.. 후반부 작업을 위해서 봐야 함

 http://devbug.me/775


지금부터는 내가 다시 정리한 글이다.


1. 탈옥툴 컴파일 + 탈옥


일단 뎁벅님이 친절히 diff 파일 뿐만 아니라 과정을 녹화해주셨다!!

그 영상의 내용 정리 + 내가 조금 수정 ㅋㅋ


$ mkdir ~/opensn0w-build

$ cd ~/opensn0w-build/

$ git clone https://github.com/winocm/opensn0w

+ devbug 님 블로그에 있는 opensn0w3.diff.zip 파일을 받아서 압축 해제 후 ~/opensn0w-build/opensn0w/ 에 넣어준다.

$ cd opensn0w

$ patch -p1 < opensn0w3.diff

...

$ chmod +x ./autogen.sh

$ ./autogen.sh

+ 혹시 여기서 에러나면 automake 등을 설치해줘야 한다.

homebrew 가 설치되어 있으면 $ brew install automake 하면 됨.

homebrew 없으면 설치하든지 뭐 알아서... 난 brew를 설치해놨었기 땜에 brew update 정도만 해주고 진행했음

...

$ ./configure --prefix="/Users/사용자명/opensn0w-build/"

...

$ make install

...


여기까지 별 에러없이 왔으면 ~/opensn0w-build/ 폴더 안에 이것저것 많이 생겨있다.

아이폰4 를 iOS7 으로 올리고(7.0, 7.0.2 상관 없다) dfu 모드로 진입 시킨다.


$ cd ..

$ sudo ./bin/opensn0w_cli -p ./bundles/iPhone3,1_7.0_11A465.plist

...


기다리면 탈옥 끝~

반탈이니 재부팅시에도 마지막 작업만 해주면 된다.

국내 출시 아이폰4 가 아니라면 bundles 폴더 안에 다른 기종 plist 도 있으니 그거 사용하면 됨.




2. SSH 설치


여기까지가 끝인 줄 알았는데 아직 많이 남았다..ㅠㅠ

http://devbug.me/775  이 글 뒷 부분을 따라가야 한다.


dev team에서 예전부터 배포해오던 SSH Bundle

이 링크 하단 부분에 "SSH bundle v2" 를 다운로드,


http://msftguy.blogspot.kr/2012/01/aut ··· and.html

이 링크에서는 "runnable JAR archive" 를 다운로드.


폰을 dfu 모드로 진입시키고 jar 파일을 실행하면 얘가 이것저것 한다.

끝나면 localhost:2022 로 ssh 접속이 가능함.

mount.sh 도 제공하는 것 같지만 잘 모르겠으니 그냥 devbug 님 하시는대로 따라갔다..ㅋㅋ


Mac $ ssh root@localhost -p 2022

Password: alpine

iPhone # mount_hfs /dev/disk0s1s1 /mnt1

(램디스크 작업이 뭔진 모르겠지만 쉘이 좀 다르다.. 걍 하라는대로 하자 ㅋㅋ)

+ 위에서 받은 SSH2_bundle.tgz 파일을 /mnt1/ 에 전송

+ SSH2_bundle.tgz 을 컴퓨터에서 압축 푼 후 bin 아래의 gzip, bzip2, tar 3개를 아이폰의 /bin/ 에 전송

# cd /mnt1

# tar xzf SSH2_bundle.tgz


그리고 마지막으로 /mnt1/etc/fstab 파일 수정.


/dev/disk0s1s1 / hfs rw 0 1

/dev/disk0s1s2 /private/var hfs rw 0 2


요렇게 바꿔주면 된다.


# kill 1

+ 실행한 jar 종료, 아이폰 dfu 진입 후 위 탈옥 작업 마지막 부분을 해주면 부팅 된다.




3. 탈옥 마무리(dpkg, apt)


이 부분부터는 devbug 님이 제대로 안 적어두시기도 했고, 방법이 다르다.

devbug 님의 경우 패키지들 다운그레이드를 해야한다고 하셨는데 난 그런거 안했음;;;ㅋㅋ


dpkg와 apt 등이 제대로 작동하지 않을텐데,

그 이유는 2번 ssh  설치에서 /private/var/ 부분을 마운트 해주지 않고 압축을 해제해서

해당 부분의 파일이 제대로 복사되지 않아서 생기는 문제이다.

나도 나중에 알았는데.. 위에서 마운트 해주고 압축풀면 되겠지만 난 이미 끝났으므로 따로 붙여넣었다.

아마 mount.sh 스크립트를 사용하면 둘다 마운트 될 것이고 그 후에 압축을 풀면 되겠지?


여튼 이걸 따라왔으면 SSH2_bundle.tgz 압축 푼 파일들에서 /private/var/ 안에 있는 파일들을 아이폰의 /var/ 로 넣어주면 된다.

참고로 폴더채로 붙여넣으면 안된다.

없는 폴더이거나 빈폴더면 상관없지만 폴더에 내용물이 있으면 내용물만 따로 복사해주자.


이 후 dpkg, apt 등이 "거의" 잘 작동한다.

하지만 설치하다 보면 firmware 필드 부분 때문에 막힌다.


/var/lib/dpkg/status 파일을 수정,


Package: firmware

Essential: yes

Status: install ok installed

Priority: required

Section: System

Installed-Size: 0

Architecture: iphoneos-arm

Version: 7.0.2

Description: almost impressive Apple frameworks

Tag: role::cydia

Name: iOS Firmware


이걸 적당히 위화감 없이 잘 넣어준다.

아직까지도 "거의" 잘 작동한다. ㅋㅋ

마지막으로


# apt-get update

# apt-get install cydia

# apt-get update


여기까지 하면 끝.


cydia 는 어차피 실행되지 않지만 깔아주는 이유는 소스 때문에..

설치하지 않으면 몇몇 패키지들을 못 찾는다..

cydia source 패키지가 따로 있는 걸로 아는데 이것만 따로 설치해줘도 될 것 같다.

cydia 또한 직접 수정하면 실행 시킬 수 있는 것 같다. devbug 님은 하셨고...


cydia 는 실행이 안되지만 ifile 은 잘 된다.

참고로 cydia, iFile 등 앱 설치 후 아이콘이 나타나지 않는데 uicache 도 안먹는다.

devbug 님이 쓰셨듯이, /var/mobile/Library/Cache/ 폴더 날리고 재부팅+탈옥 작업을 해주면 나타난다.




4. 소감(?)


UIKit, SpringBoard 에 트윅이 작동하지 않는건 알고 있었지만

cycript 의 작동 여부와 SimulateTouch 정도를 테스트 해볼려고 탈옥을 진행해 봤다.

결론은 시간 낭비.


cycript 는 Segmentation fault: 11 을 내뱉으며 안되고

SpringBoard, UIKit 뿐만 아니라 backboardd 에도 트윅이 안 붙는다.

고로 내가 만든 트윅 중에선 테스트 해볼 수 있는게 없음...ㅋㅋ


SpringBoard, backboardd 에 후킹된다.

UIKit 으로 다 붙이는건 확인 안해봄.


나 혼자 쓰는 것 중 특정 앱에만 붙어서 돌아가는건 잘된다.

단지 /var/mobile/Library/Keyboard/ 가 sandbox 를 벗어날 수 있는 폴더라 해서 사용했었는데,

파일을 읽어오지 못한다. 탈옥 툴의 문제인지 iOS7 의 변경사항인지는 잘 모르겠지만..

내 착각이였음ㅋ 잘됨ㅋ

+ Recent posts