블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (166)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (25)
개발질 (45)
Mac (18)
iOS (23)
IoT (16)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (7)
비공개글 (0)
Total622,859
Today124
Yesterday158

IPC, Inter Process Communication..


말 그대로 프로세스 간에 통신을 위한 방법이다.

예전에 deVbug 님 글에 몇가지 소개가 있었는데 ... IPC (Inter Process Communication) in iOS


나도 이것에 대해 잠깐 끄적여 볼까 한다..

BeeKeyboard 의 온갖 버그의 주범이자, BeeKeyboard 가 iOS7 대응하는데 2달이나 걸리게 한 장본인이기도 하다.. orz


IPC 자체에 대해 쓰기보다는, iOS7 의 강화된 샌드박스에 의해 IPC 를 제대로 사용하지 못하면서 생긴 문제와 그를 풀어갔던 삽질.. 에 대해서 써볼려고...

BeeKeyboard 업데이트 일기..? 의 느낌으로 써보려 했으나 글의 목적에 어긋나는 것 같아 

BeeKeyboard 보다는 IPC 자체의 삽질에 좀더 초점을 맞춰보려 한다.

일대기.. 식으로 회상하면서 써내려 갈 거임!! ㅋㅋㅋ


시작하기 전에 IPC 에 대해 잠깐 정리.

- mach_msg : 기본적으로 모든 IPC 는 mach_msg 라는걸 기본으로 한다. 그런 만큼 얘는 매우 low level 이고, 메세지 하나 보내는데 20줄 가까이를 요구한다.. 래핑하지 않으면 더럽게 쓰기 어려운 녀석이지.. Ryan Petrich 의 LightMessaging 이 얘를 래핑했다. 나의 경우 BoatMessaging 이라는 녀석으로 래핑해서 사용 중.

- CFMachPort : mach_msg 에 쓰이는 mach_port_t 를 위한건데.. 한단계 래핑했다기 보다는 그냥 같이 쓰인다

- CFMessagePort : 좀 쓸만하게 래핑된 프레임워크. 양방향 메세징을 지원하며 내가 주로 사용했다ㅋㅋ

- CPDistributedMessagingCenter : 마찬가지로 양방향 메세징을 지원하며, CFMessagePort 보다 한층 더 쓰기 쉬우나, 자질구레한 문제가 많이 일어난다. 내가 제대로 못써서 그런거일 수도 있고...BeeKeyboard 의 iOS5 시절에 사용했었다.


뭐 이정도..? 당연히 더 있지만 일단 지금 글에선 필요없다.



1. iOS7 의 강화된 샌드박스

그냥 더 많은게 안된다. 시스템 로그를 보면, 앱스토어 앱이나 시스템 기본 데몬들도 sandbox 에 의해 좌절하는 로그를 무수히 쏟아낸다...

특히 CFMessagePort 의 경우 본래 앱스토어 앱에선 사용 못할텐데 맥 레퍼런스에서

"This method is not available on iOS 7 and later—it will return NULL and log a sandbox violation in syslog."

라고 친절히 알려주기 까지 한다..  ( 출처: 애플 레퍼런스 )


2. 근데 왜 제목에서 with Evais0n??

사실 BeeKeyboard 는 본래 iOS7 탈옥이 나오기 전에 winocm의 opensn0w 를 이용한 아이폰4 반탈로, iOS7 에 대한 대응이 되어 있었다.

탈옥할 때 탈옥툴 개발자들이 sandbox 를 깨주는데(그래야 트윅이 사용가능 하므로) 이 작업을 evais0n 탈옥팀은 뭔가 반틈만 한게 아닌가.. 라고 생각하고 있다. 물론 1번의, Apple 의 강화된 샌드박스도 한 몫할 것이고.


3. 삽질의 시작.

진짜 처음엔 답이 없어보였다.. 자고 깨고 자고 깨고(일이 잘 안풀리면 급격히 졸려서 1~2시간쯤 자고 일어난다)를 반복하며 1주일 가까이를 헤맸었던 것으로 기억한다.(심지어 이땐 RocketBootstrap 이 없거나, 개발 중이였다)

요즘 오전 6~7시에 취침 하고 오후에 일어나는, 6시간쯤 비틀린 삶을 사는데 그 원인이 여기에 있나니...

여튼 sandbox 에 의해 막히지만, privileged process, 즉 backboardd 나, SpringBoard, 혹은 Preferences 같은 시스템 앱들은 정상 사용이 가능하다. 하지만 난 일반적인 앱 모두에서의 사용을 필요로 했다. 단방향이 아닌 양방향.


4. XPC, WaveMessaging!

처음으로 가능성의 빛을 본 건 xpc. iOS5 정도 부터 iOS 에 들어간 것으로 보이고, 맥에서 IPC 로 애플이 추천하는 방법이다.

양방향 통신도 가능하고... 데이터형을 모두 xpc_object_t 를 사용해서 변환작업이 있다는 것만 제외하면 쓸만했다.

하지만 이 방법의 단점은 plist 에 특정 이름을 쓸거라고 미리 지정을 해 줘야 한다. 그렇지 않으면 사용할 수 없음...

launchd 가 관리하기에 후킹도 불가능하다...

그래서 난 원래 시스템이 사용하는 xpc 를 빌려, 적절히 후킹해서 사용하기로 했다.

그 결과물이 WaveMessaging. 좀더 자세한 방법은 써봤자 모를테니 패스..

open source... 지만 쓸 일 없을거다.. 써서도 안되고. 혹시나 xpc 를 쓸 일이 있으면 참고가 되려나? 

소스: https://github.com/iolate/WaveMessaging


5. Optimo의 리젝...orz

SimulateTouch, BeeKeyboard, QuickKakao 프로토버전 등, IPC 가 필요한 앱에 모두 이식을 해 보았다.

결과는 대 성공! 모두 정상작동 하고 큰 문제도 없어보였다.

일단 WaveMessaging 패키지만 먼저 BigBoss 에 업로드 하였으나 돌아온 대답은 No!

이미 RocketBootstrap 이라는, 같은 목적의 패키지가 있으니 이것과 합치는 방향으로 가라는 것이다.

당시 RocketBootstrap 은 SpringBoard 를 기반으로만 작동하였고, LightMessaging 이 사용하는, mach_msg 와 이미 문제때문에 사용하지 않는 CPDistributedMessagingCenter..정도만 지원하였기에 나의 경우엔 쓸 수 없었다.

Optimo 에게 요구해 보았지만, 돌아온 대답은 "Ryan 과 잘 얘기해서 RocketBootstrap 으로 합치거라."


6. Ryan 의 CFMessagePort 지원

Ryan 은

1. CFMessagePort 혹은 xpc 를 지원하고 2. daemon 등에서도 사용가능 하게 해주겠다.

면서 몇일만 기다려 달라고 했다.

별 수 있으리.. 기다렸다. 며칠 후 RocketBootstrap 은 CFMessagePort 를 지원하였고, 잘 작동하는 듯 보였다.

하지만 일이 이렇게 쉽게 풀렸으면 이 글을 시작하지도 않았다..ㅠㅠ

일반 App -> SpringBoard, backboardd 는 정상적으로 사용이 가능해 졌지만, SpringBoard, backboardd -> App 은 사용이 불가능 했다!

App 위에서 CFMessagePort 의 서버를 돌렸는데 mach_lookup 뿐만 아니라 mach_register 까지 sandbox 에 의해 막히면서 크래시....

SimulateTouch 의 경우 이정도 만으로 충분히 사용이 가능했지만, BeeKeyboard 와 후에 만들 빠른 답장 트윅에선 곤란했다.

Ryan 에게 요구했으나 이건 자기도 어쩔 수 없다며, 다른 방법을 찾으라고 했다..


7. 결국 mach_msg

Ryan 이 나에게 왜 그런 기능들이 필요하냐고 물었다. 그래서 나는 BeeKeyboard 의 동작 원리와, 후에 만들 빠른 답장 류의 앱에 대해 간략히 설명해줬다. 음.. 여기는 말로 풀어내기 복잡하니 대충 건너뛰고 결론은

1. timeout 기능은 mach_msg 로 가능하다

2. xpc 또한 mach_msg 로 만들어 졌다. 니가 xpc 에서 사용하던건 mach_msg 로 구현이 가능하다


.... 별 수 있나.. mach_msg 로 시도했다.

xpc 를 떠올리며 최대한 흡사하게 흉내낸 후, 결과는 성공.

Ryan 의 LightMessaging 의 소스를 많이 참고하였지만, 그래도 생각보다 쉽게 해결되서 상당히 허탈했던 기억이....

Ryan 에게 확인을 구하니 접근은 정확하게 맞았고, 방법에 약간의 수정을 가하면 된다고 하였다.

이렇게 해서 mach_msg 로 내가 원하는 기능을 정확히 구현...

위에 말했듯이, mach_msg 를 그대로 사용하는건 토나오므로, BoatMessaging 이라는, CPDistributedMessagingCenter 와 CFMessagePort 의 사이.. 정도 수준으로 래핑한 스태틱 라이브러리를 만들었다.


이걸로 IPC 해결!!!



이렇게 까지 오는데 한달 넘게? 거의 두달? 여튼 엄청난 시간을 쏟아 부었던 것 같다..ㅠㅠ

BoatMessaging 의 소스나 하다못해 라이브러리라도 어디 올릴까 했지만,

살짝 꼼수스러운 라이브러리이기도 하고, 레퍼런스 등을 만들기 귀찮아서 일단은 그냥 나 혼자 쓰고 있다.


혹시나 필요하시면 연락주세요..ㅋㅋㅋ 기쁜 마음으로 공유해드립니다! ㅋㅋㅋ

이래봤자 요구할 만한 사람은 상당히 한정되어 있지만....

탈옥 개발자에, 한국어 사용자.. 몇이나 되겠어? 


만들 당시 Source Control 켜서 쓰고 있었길래 그냥 그대로 github 에 올렸다.

주소는 https://github.com/iolate/BoatMessaging

static library 에,, rocket bootstrap 을 필요로 하므로, 사용하려면 LDFLAGS 에 -lboatmessaging -lrocketbootstrap

둘다 해줘야 함...


여튼,, 수능이 끝난 잉여로운 고3이였기에 해결이 가능했던 것 같다..

'iOS > Cydia/Tweak' 카테고리의 다른 글

IPC on iOS7 with Evais0n  (11) 2014.02.08
BeeAppControl 개발중 버젼 공개  (26) 2013.02.06
BeeAppControl - iOS의 게임 등 앱을 키보드로 제어  (9) 2013.01.14
Posted by iolate

수정할 내용이 많아서 좀 많이 갈아엎었음.



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 가 설명하는 활성화 방법을 해봤었으므로,

이것과 관련한 내용부터 쓰겠지만, 사실 이건 내부 설정 활성화 자체만을 원하는 사람에겐 필요없는 부분이고

이 부분 때문에 헷갈려 하는 사람도 있는 것 같아서 접어 놓겠음. ㅋ


삽질의 과정.. 정도이고 지금 좀 더 이해하고 싶으면 펼쳐볼 것...


더보기



https://vine.co/v/hgJuTKHp63U

요건 호출 하는 vine 동영상이고


http://pastie.org/8372228

요건 외국인들 용으로 써논 글..

인데 별 내용 없다.

지금 이 글을 상당히 수정한 마당에 저 글에도 오류가 있을 거고...


아, 내부 설정 활성화 방법은

deVbug 님이 HiddenSettings7 이란 트윅을 만들어서 개인 저장소로 배포중이니 그걸 사용하면 좋다.

얘는 컨트롤 센터에서 호출하는 방식. 오픈소스이기도 하고..


검색ㄱㄱ

Posted by iolate

iOS7 아이폰4 반탈

iOS/기타 / 2013.10.01 19:06

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 의 변경사항인지는 잘 모르겠지만..

내 착각이였음ㅋ 잘됨ㅋ

Posted by iolate

iOS7, 벡터 아이콘?

iOS/기타 / 2013.09.22 20:39

iOS7 벡터 아이콘 소문의 시작은 ZDNet Korea의 

iOS7, 살아 움직이는 시계 앱의 비밀

라는 기사..


저게 시작인지 아닌지는 잘 모르겠지만,

iOS7 부터 아이콘이 벡터라는 말이 계속 보인다.

현재 디자인도 벡터에 좀 더 적합하다나 뭐라나...


신기한건 이 논쟁은 한국에만 있다.

영어로 검색하면 아이콘이 벡터로 바뀌느니 마니 하는 내용은 전혀 없음..


시계를 돌리기 위해서 벡터로 바꾼다는 소리가 너무 어이가 없어서 이 글을 써 본다.


우선 본론으로 가기 전에 저 기사에서 기자가 도대체 어떻게 알아낸 건지 이해할 수 없는 부분.


앱 아이콘의 테두리를 자동으로 둥글게 깎아 보여주는 처리 방식도 비트맵에서 벡터 방식으로 바뀐 것으로 알려졌다.


솔직히 자세히 모르겠고 알아볼 생각도 없지만

아마 마스크 이미지를 씌우고 테두리는 imageView layer 에서 둥글게 깍을 것이다.

iOS7 에서도 icon 을 보여주기 위해서 image view 를 이용하므로 딱히 달라질 부분은 없을 듯.

즉 비트맵인지 벡터인진 모르겠고 어차피 원래부터 cpu 연산 처리로 테두리를 깍아 왔다.

저런 내부적인 내용을 이런 기사나 쓰는 기자가 어떻게 알았는지 의문.. 그냥 지레짐작인건가...



여튼 본론으로 돌아와서, 말도 안되는 소리의 시작...


iOS7 시계 앱 아이콘의 바늘은 시시각각 움직인다. 이를 비트맵으로 처리하려 했다면 모든 시계바늘의 위치를 고려한 '경우의수'만큼 많은 아이콘 이미지가 필요하다. 실제 그런 식으로 처리됐던 iOS 앱 아이콘이 바로 '캘린더'다. iOS 캘린더 앱은 과거에도 7가지 '요일'과 31가지 '일자'를 실제 시간에 맞춰 보여줬다. 

 

캘린더 앱은 많아야 217가지 조합이지만



캘린더 앱은 이런 아이콘을 가지고 있다. 참고로 실제로 iOS6의 캘린더 앱에서 추출한 파일이다.

저 아이콘 위에 날짜 레이블만 입혀주는 형태.

217가지 각각 이미지를 다 만드는 짓은 아무도 하지 않는다..


마찬가지로 시계도 실시간으로 시간을 보여주기 위해서 비트맵을 사용하면 엄청난 경우의 수가 나오기 때문에 벡터로의 전환을 한다고 하는데 그럴 필요가 전혀 없다. (iOS6 상에서도 시간을 실시간으로 움직여주는 트윅이 있기도 했고.)


컴퓨터 상에서 시간을 움직이는 방법도 집에 있는 시계와 다를 바가 전혀 없다.

시계 바탕에, 시침, 분침, 초침을 얹이고, 가운데 축을 기준으로 계속해서 돌려주면 된다.

비트맵 이미지로도 충분히 가능한 작업.

그러니 이걸 위해서 벡터로의 전환이 필요한게 아니다.


그리고 저 기사 때문에 많은 사람들이 벡터 아이콘이 도입되는 걸로 알고 있다.

그래서

http://www.clien.net/cs2/bbs/board.php?bo_table=cm_iphonien&wr_id=1350230

이런식의 플라시보 효과(?) 를 경험한 것 같은 사람들의 글도 올라오고 있고...


나 또한 워낙 많은 사람들이 벡터, 벡터 해서 기본 내장 앱이라도 벡터를 쓰는지 의심했었다.

그래서 방금 iOS7 펌웨어를 뜯어봤는데,



 .....여전히 앱스토어를 비롯한 내장 앱들은 해상도에 맞춰서 .png 파일을 가지고 있다.

즉 기본 내장 앱들도 여전히 비트맵 방식의 아이콘을 사용하고 있다.



iOS7 시계의 경우 썸네일용 이미지 말고는 이미지를 찾아볼 수 없어서 SpringBoard 를 뜯어봤다.



이 클래스로 시계 아이콘을 그려준다.

cpu 연산으로 시계 앱을 그려주는건 맞는데... CALayer 는 비트맵 이미지를 그려주는 클래스이다.

이런 경우를 벡터로 부르는지, 비트맵으로 부르는지 솔직히 잘 모르겠다.

선, 두께 등의 정보로 레이어를 만들어 주는거니 벡터가 맞는건가...


솔직히 난 비트맵이고 벡터고 정확히 어떻게 구분하는건지 잘 모르겠다.

벡터 데이터로 결과적으로 비트맵을 표현하는 거니까....

하지만 이걸 벡터라 부른다 할지라도 난 이것만으로 애플이 아이콘을 벡터로 전환하려 한다고 하기엔 많이 무리가 따른다고 생각한다.

고작 시계 앱 하나니까...


만약 애플이 정말로 벡터 데이터만을 가지고 앱 아이콘을 표현하는 걸 지원한다고 해도 그건 아마 해상도 문제보다는

디바이스 별로 다른 해상도에 맞춰 다 만들면서 용량이 증가하는 문제를 해결하기 위해 도입할꺼라 생각하는데,

이것도 가능성이 낮다고 생각한다.

생각해보니 아이콘만은 용량 차지도 얼마 안한다.. 모든 리소스의 벡터화를 생각했는데

이건 말도 안되기도 하고, 딱히 애플의 지원이 필요없기도 하고....

 

여튼 그래서 기기 별로 리소스를 따로 받는 방법을 지원하는게 훨씬 맞는 방법 같거든...


비트맵이고 벡터고 이건 잘 모르겠고,

여튼 이 글을 통해 내가 말하고 싶은건


1. 비트맵이라고 해서 캘린더나 시계를 표현하기 위해 수백 수천 가지의 이미지가 필요한 건 아니다

2. 애플의 내장 앱들은 여전히 비트맵 이미지를 사용한다.



ps, 비트맵, 벡터 관련해서는 잘 모르니 헛소리가 있을 수도 있음. 고로 태클 환영합니다~ ㅋ

Posted by iolate

다른 일 때문에 삽질한게 있어서 간략히(쓰고 보니 난잡) 적어봄.


내 필요에 의해서 한건 아니고 남이 부탁해서 시작한건데 생각보다 꽤나 멀리왔다..;; ㅋㅋㅋ
그 사람이 왜 필요한건지는 아직까지 미스테리....

IMEI, 시리얼넘버 등을 바꾸는게 필요했는데 실제로 완전히 바꾸는건 필요없고 그냥 보이는 것만 바꿔도 되는거였음.

(뭐 보이는걸 바꾸기 위해 통신시에 실제 사용되는 IMEI까지 바꿔보긴 했지만)

우선 IMEI 기준 진짜로 바꾸지 않고 보이는 곳만 바꿀려고 시도했다.

난 속이는게 목적이지 바꿔 쓰는게 목적이 아니였으니..
무엇보다 저거 바꾸면 위법이다 ㅋㅋ

저들이 보이는 곳이라면
1. 설정앱 - 정보
2. 전화 - *#06# (IMEI)
3. iTunes 연결시 뜨는 정보
정도이다.

이중에 1번, 설정앱은 테이블뷰를 후킹함으로써 간단히 바꿀 수 있고, 그게 아니라도 IOKit 에서 값을 가져올때 바꿔주면 된다.(후자는 말이야 쉽지 직접 해볼려면 고생은 할거다 ㅋㅋㅋ 요건 밑에서 다시 말할거임)

여튼 문제는 2, 3번. 둘다 그때그때 가져오는게 아니라 lockdownd 가 최초로 가져오고, 그 값을 계속 돌려쓰는 것 같다. (사실 2번의 경우는 그럴 것이라 추정)

2번 *#06# 은 통화앱에서 다이얼하면 SpringBoard 에서 뷰를 띄우므로, 이것도 적당히 후킹가능.
CoreTelephonyUI.framework 의 클래스를 후킹했다.

3번 아이튠즈는, 아이폰에서 데이터를 가져가는 부분에서 가로챌려 했는데 어느 데몬이 아이튠즈와 통신하는지 찾지를 못했었다 ㅠㅠ
ptpd 라는 녀석이 (이름에도 불구하고) 데이터를 교환하는 것 같아서 삽질해봤는데 역시나 이름만큼의 역할만 하는듯...;;ㅠ
결론은 이 녀석도 lockdownd...

이렇게 하다보니 진짜 사용되는 IMEI 를 바꾸는 과정까지 와버렸다..

IMEI는 CoreTelephony 에서 가져올 줄 알았는데

왠만한 프로세스에서 시리얼, IMEI 등의 정보를 모두 IOKit 이나 lockdownd 으로부터 가져온다.


그래서 각 프로세스 들에서 IOKit 으로 부터 하드웨어 정보를 읽어오는 부분, lockdownd 에서 정보를 가져오는 부분.

그리고 마지막으로 혹시 모르니 CoreTelephony 까지 후킹해주면 폰에서 사용하는 IMEI 가 완전히 바뀐다.


USB 연결시 아이튠즈에서 보이는 IMEI와 시리얼 까지 바뀌고.


나의 경우엔 lockdownd, Preferences 정도만 후킹하고 패쓰~

맥어드레스는 블투, 와파를 같은 키 값으로 가져오는 문제가 있던데 따로 옵션이 있거나, 와파 맥어드레스의 경우 터미널 커맨드로 변경이 가능하니 그거를 하자.. ㅋㅋㅋ



여기서 문제는.......

IMEI 를 바꿔버리면 폰 사용이 불가능해 진다!!!

폰 복원 직후에 액티베이션 하는 화면(유심 넣으라는 부분)들을 모두 별 생각없이 지나가겠지만, IMEI를 바꾸면 저 화면을 다시 만날 수 있다.ㅋ
(시리얼만 바꿔도 저 화면으로 빠지는지는 확실하지 않다 하다가 형한테 컴터자리 쫓겨나서 ㅋㅋ)
다행히, 원상태로 돌리면 iCloud 설정 정도만 다시하고 재사용이 가능해지지만, IMEI를 바꾸면 실질적인 폰사용이 안된다는 소리...
아이러니한건 예전에 쓰던 3gs IMEI를 테스트중이던 4에 넣어봤는데 그래도 안되더라. 바꾼 시리얼 때문인지.... 확실한건 좀더 해봐야 될것 같다.

핵티베이션도 안해봤다. 아마 핵티베이션 하면 인증화면은 통과할 것 같은데, 그 후에 폰 사용은 당연히 안되겠지...?


좀만 더하면 성공할 것 같긴한데 잘 모르겠다.
어차피 내 목적은 눈속임 만이라서, lockdownd 만 건드려서 아이튠즈의 값을 바꾼다거나..

(전화 앱은 따로 후킹해서 값 바꾸는데 성공했으니..)

아니면 전화 기능이 되던 말던 핵티베이션을 한다던가......

핵티베이션도 트윅으로 돌아가는 것 같던데 그거 오픈소스면 좋으련만...


문득 궁금해지는건, 저런식으로 유심이 있는것 처럼 만들어버리면, 유심이 꼽혀 있지 않아도 내 유심으로 전화가 될까....? ㅋㅋㅋ
이것도 나중에 해봐야지.....


저게 수능 98일 전에 하던 삽질 ㅋ
이거 쓰는 지금은... 85일쯤 남았던가......ㅋㅋㅋ


Posted by iolate

PPTP, L2TP는 공유기 설정에 따라 사용이 불가능하거나 일부러 막아놓은 경우도 있다.


이런 저런 불편함이 있어서 OpenVPN 이란게 있는데,

자세한 내막은 모르겠지만 이 녀석을 기본 내장하는 기기는 하나도 없음.

클라이언트 설정 파일 자체가 워낙 복잡해서 그런것 같기도 하다.


여튼,

안드로이드, iOS 도 원래 OpenVPN 이 사용이 불가했다.

루팅 혹은 탈옥을 하고난 후면 사용이 됬지만.


그러다 안드로이드는 4.0 부터인가? OpenVPN 일부를 서드파티 앱의 형태로 사용가능하게 되었고

iOS 도 언제부터인지 모르겠지만 서드파티 vpn plugin 을 제공하기 시작한 것 같다.


여튼 지금 글 쓰려는건 iOS 용 OpenVPN.

(뭐 그래봤자 딱히 쓸 내용도 없고 간략한 소개 정도..)





올해(2013년) 1월달에 나왔으며 iOS 5.0 이상을 지원한다.




(443 포트로 OpenVPN 을 열면 왠만한 차단은 다 뚫을 수 있단걸 내게 가르쳐준) Private Tunnel 사의 서비스는 기본으로 지원하고,

그 외엔 클라이언트 파일을 서버로 부터 받거나,

iTunes 로 넣거나, 메일로 받으면 된다고 설명하고 있다.


web, 메일 등에서의 외부 파일 연결은 zip 등 압축은 지원하지 않고 .ovpn 만 지원한다.

iTunes 로 넣을 경우 키 파일등을 따로 넣어도 ovpn 파일 내용을 토대로 알아서 가져오는데,

web에서 가져오거나 메일로 받을때는 어떻게 되는지 모르겠다.


나 같으면 key 들을 모두 .ovpn 에 쑤셔넣었다.



Web 으로 .ovpn 설정 파일을 받을때 OpenVPN 으로 연결이 안나오고

그냥 내용물이 출력된다면 더보기 클릭!

더보기



아이튠즈로 넣든, 메일로 받든, OpenVPN 앱에서 설정 파일을 추가할건지 묻고 추가하면 이제 사용가능!





연결 잘~된다 ㅎㅎ

443 포트와 같이 원래 서드파티 앱에서 사용불가능한 포트들도 사용가능!!






앱에서 사용한 설정이 설정 앱의 VPN 메뉴에서도 볼 수 있는데,

안타깝게도 다른 설정이나 연결은 안되고 각종 설정은 앱에서 하라는 메세지가 나온다.(심지어 여기서 삭제도 안됨)

연결 중일때 해제는 가능하다.


아이튠즈에서 설정파일을 넣고, 추가하고 나면 앱의 샌드박스 내 어디에도 설정 파일을 찾아볼 수 없는 것으로 보아

VPN 설정 추가시 설정, 키들을 iOS 키체인으로 집어 넣는 듯 하다.





참고로 OpenVPN 앱 내 말고, 설정 앱 안에 OpenVPN 설정 메뉴가 생기면서 다른 설정들도 가능하다.




탈옥을 하지 않고 순정에서도 할 수 있는 작업이 점점 늘어나는건 확실히 기분좋은 일인 것 같다~

개발자용 기기는 탈옥에 맞먹는 자율성을 부여해주면 좋을텐데...ㅠㅠ

'iOS > AppStore' 카테고리의 다른 글

[AppStore, 순정] OpenVPN on iOS  (0) 2013.08.14
iTeleport 구입!  (0) 2011.01.21
Posted by iolate

iOS5 기준으로는 http://blog.iolate.kr/113 에서 삽질한 적이 있다.

그런데 이게 iOS6 올라와서 부터는 바뀌었나 보다. 안된다.. ㅋ


iOS5 와 비슷해서 금방 해결은 했지만 여튼 다시 적어본다.

참고로 이 글은 네이버 애플아이폰 까페에 탈옥 먼저 하고 iCloud 백업에서 복원하기 란 글로 먼저 쓰고 다시 옮겨 적는거.


이전 iOS5 때는 쓰다가 백업에서 복원을 원해서였지만 이번엔 목적이 조금 달랐다.

Cydia File system 처리에서 한번 문제가 생겨서 생고생 한적이 있었는데 이번 탈옥이 문제가 있다는 말을 듣고

또 생고생 하긴 싫어서 탈옥 먼저 하고 복원하는게 목적.


스샷은 쓰기 귀찮으니 생략한다. 스샷도 보고 싶으면 위에 아사모 까페에 쓴 글에서 보자.



1. 복원, 새로운 아이폰으로 설정, 애플 아이디 설정은 건너뛰기

2. 바로 탈옥, 시디아 한번 실행

3. 별 문제 없으면 진행. 시디아 스토어는 이용하되, 앱스토어는 이용하지 말 것

4. 뭘 깔든 상관없다. MobileTerminal, iFile, openssh, 파일 시스템을 관리할 수 있는 앱 아무거나 깔아라.

블로그에서 쓰면서 생각해보니 깔거 없이 컴퓨터에서 ifunbox 등으로 바로 지워도 될 듯

5. /var/mobile/Library/Preferences/ 로 이동

com.apple.purplebuddy.plist

com.apple.purple~어쩌구~otbackedup.plist

이거 두개랑

com.apple.facetime~~~

com.apple.imessage~~~

com.apple.imservice~~~ 

로 시작하는 파일들을 다 지워준다

아니. 그냥 이폴더에 있는 설정파일 다 지워줘도 된다.

6. 설정앱 - 일반 - 재설정 - 모든 설정 재설정 클릭

7. 재설정 후 처음 화면이 언어 선택 화면이면 성공! 바로 와이파이 선택이 뜬다면 파일 덜 지운거다.

진행 후 파일 다시 지우고 다시 재설정 하자.

8. 이번엔 iCloud 에서 복원 선택, 애플 아이디 등도 설정

9 끗!

Posted by iolate

원래 BeeKeyboard 정품 구매자 대상으로만 쓸 수 있게 약간의 장치와

기간제를 넣으려고 했는데 그렇게 까지 할 시간도 잘 안날뿐더러

어차피 퀄리티가 워낙 떨어져서...ㅋㅋㅋ

따로 외국권으론 올릴 생각 없고...ㅋㅋ


여튼,


시디아에서 apt.iolate.kr 를 추가하면 설치 가능.


BeeKeyboard 최신 버젼이면 설정 첫페이지 사용가능한 애드온 이란 메뉴가 있는데

거기 들어가시면 써있기도 합니다.


개발용이며 원래 배포할 의사가 아니였기에

개선사항, 버그리포팅 일체 무시입니다.

따로 사용법도 없습니다. 동영상 보고 깨우치세요. 지금은 그거 외엔 더 없어요..ㅋㅋㅋ

NEEDY 님이 쓰신 글 참고하셔도 되구요.(사실 전 누군지 모르는 분...ㅎㅎ) http://troupe_ohoo.blog.me/181482470


아, 피드백도 보내주면 감사히 받긴 할텐데요,

UI 면에선 제가 따로 생각해둔게 있고, 기능추가도 많은 부분을 계획해놨기에 따로 필요없을 것 같네요.

버그리포팅 또한 잡아야 할, 알고 있는 버그가 많구요... 

'iOS > Cydia/Tweak' 카테고리의 다른 글

IPC on iOS7 with Evais0n  (11) 2014.02.08
BeeAppControl 개발중 버젼 공개  (26) 2013.02.06
BeeAppControl - iOS의 게임 등 앱을 키보드로 제어  (9) 2013.01.14
Posted by iolate


BeeAppControl

(Jailbreak only, Cydia Tweak)


얘는 BeeKeyboard 의 애드온입니다!

BeeKeyboard 와는 다른거구요! BeeKeyboard 에 얘를 추가로 설치해서 사용하는 겁니다!!




키보드의 단축키로 사용자가 지정한 지점에 터치, 스와이프(제스쳐)한 것 같은 효과를 줌으로써

앱을 컨트롤 할 수 있게 해줍니다.


설정하기 나름이겠지만 Cydia 와 iFile 을 제외한 모든 iOS 앱에 적용할 수 있습니다.

BeeKeyboard 의 애드온 형태로 작동하며(애드온 + 트윅), 앱마다 애드온을 각각 다 만들어줘야하는 기존 BeeKeyboard 의 단점을 해결하기 위해 개발하였습니다.


영상에서 약 35초쯤 제노니아 플레이 초반에 어떤식으로 설정하는지 볼 수 있습니다.

NEEDY 님이 쓰신 글 참고하셔도 되구요.(사실 전 누군지 모르는 분...ㅎㅎ) http://troupe_ohoo.blog.me/181482470


현재 개발중이며 아마 올해 말, 내년 쯤 되야 릴리즈 될 것으로 예상되네요.

( 고3입니다...ㅠㅠ 문과인건 함정ㅋㅋ)


알파 릴리즈 - http://blog.iolate.kr/139


iOS5, 6 에서 작동 확인.


동영상에서 테스트를 위해 플레이한 게임은 암드 히어로즈 와 제노니아5 입니다.



ps.

16초 부터 화면에 등장하는 앵그리버드는 터치한 지점에 이미지를 띄워주는 TouchPose+ 의 기능으로

이해를 돕기 위해 활성화 했을 뿐 BeeAppControl 이나 BeeKeyboard 와는 아무런 연관이 없음.


ps2.

BeeAppControl 이 필요로 하는 BeeKeyboard 는 현재 시디아 스토어에서 판매중인 유료($3) 트윅입니다.

또한 이 글에서 소개 중인 BeeAppControl 도 출시시 $2~3 정도로 유료로 출시될 가능성이 높습니다.

'iOS > Cydia/Tweak' 카테고리의 다른 글

IPC on iOS7 with Evais0n  (11) 2014.02.08
BeeAppControl 개발중 버젼 공개  (26) 2013.02.06
BeeAppControl - iOS의 게임 등 앱을 키보드로 제어  (9) 2013.01.14
Posted by iolate

우선 반탈 자체가 탈옥 후에 한번 껏다가 just boot 로 켜줘야 제대로 작동하는 짜증나는 점이 존재.


여튼 iOS6 반탈하고 잘 쓰다가 reboot 하니 just boot 을 해도, 다시 jailbreak 를 해도 MobileSubstrate 가 작동안함..

(계속 해봤던 이유는 트윅들이 작동안해서 그냥 탈옥 풀린줄 알았음.)


재탈옥 하면 무한리스프링이니 그냥 껏다가 just boot 다시 해주시고, 터미널 등으로 리스프링 한번 해주면 정상작동함.



그리고 이거 하면서 Mobile Substrate 업데이트 후 재부팅시 볼륨 업 버튼을 꾹 누르고 있으면 Substrate 가 꺼진채로 켜진다는 점도 알았다 ㅋ

이거 언젠가 유용하게 써먹을 듯 ㅋㅋ

Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함