- For foreigners
- Use our cydia repository for quick patch CommCenter(Classic). Thank you for visiting our blog!
iOS 5 Beta 1における旧来のCommCenterは、"CommCenterClassic" というものに変わりました。/System/Library/Frameworks/CoreTelephony.bundle/Support/ には CommCenter と CommCenterClassic のふたつがありますが、前者はCDMA 2000やLTEなどの(iOS的に)新しい規格へ対応するもののようです。
GDIDに対応していないSIMカードを採用するiPhone発売済みキャリア(※例)では相変わらずAPN設定がiPhone向けとされるものに依存しますので、旧来と同じようなパッチを作ってみるためにCommCenterClassicをPC側へ取り出して、まずはダンプしてみましょう。
CommCenterClassicを逆アセンブルしてみる
Appleの提供するMac OS X/iOS向け開発環境『Xcode』には otool という便利な逆アセンブラ(※厳密には逆アセンブラにとどまらない)が付属しています。以下のように利用すると逆アセンブルされたテキストファイル CommCenterClassic.dump が取り出せます。
$ otool -VvTt ./CommCenterClassic > CommCenterClassic.dump
旧来のパッチなどと比較して、パッチ対象先の該当アドレスを探してみましょう。
000866de f06deaea blx 0xf3cb4 ; symbol stub for: _SecKeyRawVerify
000866e2 2800 cmp r0, #0
000866e4 bf08 it eq
000866e6 f04f0a01 moveq.w sl, #1 ; 0x1
000866ea 4658 mov r0, fp
000866ec f06ceba2 blx 0xf2e34 ; symbol stub for: _CFRelease
000866f0 9802 ldr r0, [sp, #8]
000866f2 f06ceba0 blx 0xf2e34 ; symbol stub for: _CFRelease
000866f6 4650 mov r0, sl
000866f8 b003 add sp, #12
000866fa e8bd0d00 ldmia.w sp!, {r8, sl, fp}
000866fe bdf0 pop {r4, r5, r6, r7, pc}
どうやらパッチしたい該当アドレスは866f6にあるようです。これを次のように書き換えるのが目的です。
000866de f06deaea blx 0xf3cb4 ; symbol stub for: _SecKeyRawVerify
000866e2 2800 cmp r0, #0
000866e4 bf08 it eq
000866e6 f04f0a01 moveq.w sl, #1 ; 0x1
000866ea 4658 mov r0, fp
000866ec f06ceba2 blx 0xf2e34 ; symbol stub for: _CFRelease
000866f0 9802 ldr r0, [sp, #8]
000866f2 f06ceba0 blx 0xf2e34 ; symbol stub for: _CFRelease
000866f6 2001 movs r0, #1
000866f8 b003 add sp, #12
000866fa e8bd0d00 ldmia.w sp!, {r8, sl, fp}
000866fe bdf0 pop {r4, r5, r6, r7, pc}
なお、含有するリソースなどの関係で、otoolの出力アドレスは実際のファイル内より+1000されています。なので、856f6がより正しい対象アドレスとなります。
実際のパッチ作業
iPhone側へsshして、以下のように作業を行って手動でパッチをあてます。ldid コマンドと xxd コマンドのために、それぞれ "Link Identity Editor" と "Vi IMproved" をCydiaなどからインストールしておく必要があります(※他にも依存するパッケージがあるかもしれません)。
$ su -
# export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
# cd /System/Library/Frameworks/CoreTelephony.framework/Support/
# cp ./CommCenterClassic ./CommCenterClassic.bak
# echo "00856f6: 0120" | xxd -r - ./CommCenterClassic
# chmod 755 ./CommCenterClassic
# ldid -s ./CommCenterClassic
# killall CommCenterClassic
これで以前と同じように署名のないキャリアバンドルを使用することができるようになりました。タイプマスクも見たところ変わっていないようです。
なお、キャリアロゴ画像に TS_CARRIER_*_1only_.png というものが新設されています。"Transparent Shadowed"なロゴ(FSOと違い立体的なもの)のようで、これはおそらくNotification Centerなどで利用されるものだと思います。
0 件のコメント:
コメントを投稿