iOS7 아이폰4 반탈
0. 서론
(limera1n exploit 덕택에 모든 os 에서 반탈이 가능한) 아이폰4의 반탈툴이 나왔다.
이걸 부트룸 익스플로잇이라 하던가...?
이제 4가 지원 안 하는 os 가 생기면 이래저래 불편해질 것 같기도 하다..
펌웨어 추출부터가 안될테니...
여튼 opensn0w 라는 툴로 iOS7 에 올린 4를 반탈옥 할 수 있다.
아직 이런저런 문제가 많아서 직접 컴파일해서 써야하지만...
과정을 주욱 써봤는데..
마지막을 제하고는 devbug 님 과정을 따라간다.
내용이 좀 길어져서 나름 차례도 나눠봤고...
opensn0w의 주소는 https://github.com/winocm/opensn0w
구글 검색하면 LBBNetwork 것이 먼저 뜨지만 위가 원본인 것 같다.
하지만 맥에서 그대로 진행하기에는 문제가 많고 리눅스에서나 제대로 작동한다나....
devbug 님이 맥에서 작동하게 수정하셨으니 그걸 사용하자.
그리고 이건 맥에서 작동되기 전에 원래 작성하셨던 글.. 후반부 작업을 위해서 봐야 함
지금부터는 내가 다시 정리한 글이다.
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 의 변경사항인지는 잘 모르겠지만..
내 착각이였음ㅋ 잘됨ㅋ