수정할 내용이 많아서 좀 많이 갈아엎었음.
If you are not Korean,
just read this
http://pastie.org/8372228
+
/var/mobile/Documents/com.apple.springboard.settings/RootSettings.plist
is just settings saved file.
so I think if find a way for enabling [ isInternalInstall], it will work without tweak.
but maybe, still need jailbreak.. :(
=================
6월 10일, iOS7 베타1 이 공개되고 8일 후인 6월 18일,
@hamzasood 란 사람이 iOS 내부를 건드려서 찾아냈다는 SpringBoard 내부 설정.
폴더 안 폴더, 애니메이션 속도 조절 등 다양한 옵션이 있으며 이를 동영상으로 찍어 보여주기까지 했다.
특이한 건 설정 앱 내에서가 아니라 볼륨 버튼으로 SpringBoard 위로 불러온다.
처음 사람들 반응은 긴가민가,
시뮬레이터라는 둥 뭐 이런저런 가정이 많이 나왔지만 그때마다 다양한 동영상으로 증명해 보였다.
며칠 후 트위터를 통해 어떻게 활성화하는지에 대해 알려줬으나 ( http://pastie.org/8067977 )
작동된다는 사람은 아무도 없다...
(관련 포스트들:
http://briansweet.me/blog/ios-7-internal-settings-thoughts-and-information/
http://forums.macrumors.com/showthread.php?t=1599198
참고로 포럼글은 댓글이 4페이지 까지 있다. )
아이폰4를 iOS7 으로 올리기도 했고, 탈옥도 했으며 잠깐 이것저것 해보니
저게 존재한다는 건 분명해서(내부 파일이나 클래스 등) 나도 저걸 시도해봤다.
처음엔 저 pastie 글을 못 찾아서 나 혼자 이것저것 시도하면서 알아낸 게 꽤 있었는데 저 글 하나로 도로묵..ㅠㅠ
처음에 SpringBoard 에 트윅이 안돌아가는 줄로만 알고 있어서 이래저래 삽질을 했었다..
hamza sood 가 설명하는 활성화 방법을 해봤었으므로,
이것과 관련한 내용부터 쓰겠지만, 사실 이건 내부 설정 활성화 자체만을 원하는 사람에겐 필요없는 부분이고
이 부분 때문에 헷갈려 하는 사람도 있는 것 같아서 접어 놓겠음. ㅋ
삽질의 과정.. 정도이고 지금 좀 더 이해하고 싶으면 펼쳐볼 것...
더보기 접기
참고로 인용 부분은 저 pastie 의 글을 대충 옮겨 놓은 부분이다.
근데 구분이 잘 갈지는 모르겠다.. 대충 보세여...ㅋㅋ
[SBPrototypeController reloadDefaults] 를 통해 활성화 되는데, 이건 아래와 같이 작동한다.
+ (void)reloadDefaults {
if ([[SBPlatformController sharedInstance] isInternalInstall])
if (NSClassFromString(@"PTSettingsController"))
if ([[NSUserDefaults standardUserDefaults]boolForKey:@"SBPrototypeSettingsEnabled"])
[_sharedInstance _configureForDefaults];
}
따라서 필요한 작업은 세가지.
1. [[SBPlatformController sharedInstance] isInternalInstall]
2. NSClassFromString(@"PTSettingsController")
3. [[NSUserDefaults standardUserDefaults]boolForKey:@"SBPrototypeSettingsEnabled"]
그래서 계속 하라는대로 하자면..
1번:
SBPlatformController 는 libmobilegestalt 의 MGCopyBoolAnswer(CFSTR("apple-internal-install")); 을 통해 알아오고
얘는 /AppleInternal/Library/PreferenceBundles/Internal Settings.bundle 의 유무로 판별을 한다.
이 경로까지 만들어주면 된다.
저 경로까지만 만들어 주면 1차 통과.
참고로 이 작업 이후에는 설정 앱이 켜지지 않으므로 설정 앱을 써야 한다면 폴더 이름을 바꾸든 알아서 처리해주자.
2번:
PTSettingsController 클래스를 체크하는데 이 클래스는 PrototypeTools 라는 PrivateFramework 에 있고 이것은 beta1 이전에 제거되었다. 하지만 SDK 에 포함되어 있으니 가져와서 넣어주자
얘는 따라할 필요 없다.
PrototypeTools.framework 는 파일시스템 구조에선 빠졌지만 dyld 캐쉬에 포함되어 있다.
(이 프레임워크가 제대로 load 되는지 확인하던 중, 없애도 load 된다는 걸 발견하고 혹시나 싶어서 확인해보니
캐쉬에 존재하더라...)
굳이 해주고 싶으면 해주던지...
3번:
SpringBoard 의 NSUserDefaults - SBPrototypeSettingsEnabled 값 TRUE
/var/mobile/Library/Preferences/com.apple.SpringBoard.plist 에 해당 키를 추가 후 TRUE 로 해주면 된다.
여기까지 따라왔으면 SBPrototypeController 가 스스로를 볼륨버튼 이벤트에 등록할 것이며, 볼륨 증가 키를 누르면 나타나고, 음량 줄이기 키를 누르면 사라질 것이다
라고 주장하지만 안된다..
hamza sood 의 방법 중 내가 뜯어서 확인 안 해본 1번 isInternalInstall 을 제하고는 쟤가 알려주는 방법이 맞다.
실제로 후킹해서 확인해 보면 일단 [SBPrototypeController reloadDefaults] 는 리스프링 후 한번 호출이 되고
다른 것도 다 맞게 돌아가는데 isInternalInstall 이 0을 리턴한다...
저 부분을 트윅으로 1을 리턴해주면 처음에는
/var/mobile/Documents/com.apple.springboard.settings/RootSettings.plist
파일이 없다는 오류와 함께 스프링보드가 켜지지 않는다.
처음엔 다른 문젠가 싶어서
[[SBPrototypeController sharedInstance] showOrHide]
를 바로 호출했는데 알고보니 저 파일은 그냥 설정 저장 파일...
만들어 주면 별 문제가 없을 듯 하다.
hamza sood 의 다른 트윗을 보면 아이폰5(인지 5s 인지)의 exploit을 가지고 있어서 탈옥이 가능한 것 같다.
혹은 그에 준하는 다른 거라든가.
위의 것만 봐도 일단 내부 시스템에 접근을 할 수 있어야 하는데 쟤는 아이폰5 로 해 냈으며 다른 글을 보면 iOS7 이 올라간 패드에서 SpringBoard 위에 재생 정보 윈도우를 올려놓은 글도 볼 수 있다.(사진으로 시뮬레이터가 아니란 것도 증명. 시뮬에서도 하기 어려웠 겠지만)
여튼 다른 메소드로 직접 호출이 가능하므로 난 직접 호출 했다.
접기
https://vine.co/v/hgJuTKHp63U
요건 호출 하는 vine 동영상이고
http://pastie.org/8372228
요건 외국인들 용으로 써논 글..
인데 별 내용 없다.
지금 이 글을 상당히 수정한 마당에 저 글에도 오류가 있을 거고...
아, 내부 설정 활성화 방법은
deVbug 님이 HiddenSettings7 이란 트윅을 만들어서 개인 저장소로 배포중이니 그걸 사용하면 좋다.
얘는 컨트롤 센터에서 호출하는 방식. 오픈소스이기도 하고..
검색ㄱㄱ