2012年9月4日火曜日

既にICSにアップデートしてしまったSony Tabletでroot権限を取得する方法

今まではHC(3.2.1)の状態でroot化している状態からでないとICSにおいてroot化することは出来ませんでしたが、@fi01_IS01氏と@goroh_kun氏のお陰で既にICSにアップデートした状態でもroot化が可能になりました。感謝です。

実は以前の方法でroot化していたんですが、一度修理に出したのでそれ以来root化出来ていませんでした。

以下は殆どreadmeに書いてあることですが、詰まったところなども書いています。ただもしかしたら別のところで何か間違えていただけということも有り得るので参考程度に。因みにSony Tablet Pにて行いました。

ツール(2012/09/20 18:56更新)

xdaにroot化を自動でやってくれるバッチファイルがありましたので、載せておきます。試していません。VpnFaker.apkを入れ替える必要があるかも。
underfish さんのコメント... @ 2012年9月19日 23:48
xdaのバッチ問題なくroot化できました。
書いてあるままで、それ以外の作業は必要ないようです
underfishさんによればツール通りに行えば良いとのこと。
http://forum.xda-developers.com/showpost.php?p=31658619&postcount=143

必要なファイル

SonyTabletICS-2.zip
SuperuserのSuperuser-3.1.3-arm-signed.zip(バージョンは多分どれでも良い)

備考(2012/09/18 21:33更新)



手順2までやってVpnFaker.apkが仕込めなかった場合、再度同手順を行うには手順1後、手順4の後始末を参考に以下のようにする必要があります。
mv system system2
mv system- system
rm system2
mv app app2
mv app- app

手順

1. ディレクトリのパーミッション変更

1-1. リストア実行
> adb restore settings.ab
1-2. 画面に認証が出るのでOK押す

1-3. リストア終了後、ディレクトリの権限を確認
> adb shell ls -ld /data/data/com.android.settings/a
     drwxrwxrwx system system    a
1-4. テンポラリファイル削除
> adb shell $ cd /data/data/com.android.settings
$ rm -r a
1-5. ディレクトリ/dataの権限変更
手順1-4の続き
$ while : ; do ln -s /data a/file99; done
1-6. 別のコマンドプロンプトを開き、リストア実行
> adb restore settings.ab
1-7. リストアが完了したらadb shellを停止させる
手順1-5のプロンプトでCtrl-C

1-8. ディレクトリの権限を確認
> adb shell ls -ld /data
     drwxrwxrwx system system    data
//3-1でVpnDialogsが表示されなくて、数回繰り返していたらディレクトリの権限が変更されていないことが度々あったが、コマンドプロント閉じて解凍したファイルを消し再度解凍して行ったら出来た。
2. 端末エミュレータを仕込む

2-1. ファイルの展開
> adb push busybox /data/local/tmp
> adb push rootkit.tar.gz /data/local/tmp
//Superuser.apkとsuも同じディレクトリにpushしておく
> adb shell $ cd /data/local/tmp $ chmod 755 busybox
$ ./busybox tar zxf rootkit.tar.gz
2-2. /data/systemをshellユーザで作成
手順2-1の続き
$ cd /data
$ /data/local/tmp/busybox cp -r system system2
$ /data/local/tmp/busybox find system2 -type f -exec chmod 666 {} \;
$ /data/local/tmp/busybox find system2 -type d -exec chmod 777 {} \;
$ mv system system-
$ mv system2 system
2-3. /data/appもshellユーザで作成
手順2-2の続き
$ mv app app-
$ mkdir app
2-4. VpnFaker.apkを/data/appに配置
手順2-3の続き
$ mv /data/local/tmp/VpnFaker.apk /data/app
//2-8後VpnDialogsのアイコンが表示されなかったのでadb pushで/data/appに突っ込み、パーミッションを644に変更したら表示された。
2-5. タイムスタンプの確認(重要)
手順2-4の続き
$ TZ=0 ls -l /data/app -rw-r--r-- shell shell 198580 2012-08-27 00:00 VpnFaker.apk
2-6. packages.xmlを生成
手順2-5の続き
$ /data/local/tmp/busybox sed -f /data/local/tmp/packages.xml.sed system-/packages.xml > system/packages.xml
2-7. packages.xmlの確認
手順2-6の続き
$ /data/local/tmp/busybox grep vpndialogs system/packages.xml
     
     
(手順2-5のタイムスタンプが異なっていた場合、"1396560b400"の値を調整する)
2-8. 再起動する
別のコマンドプロンプトから
> adb reboot
端末エミュレータの仕込が成功すると「Androidをアップグレードしています」の様なダイアログが表示される。

3. root権限取得

3-1. 端末エミュレータを起動
端末上からアプリVpnDialogs(ドロイド君アイコン)を起動
もしくは
> adb shell am start -n com.android.vpndialogs/.Term
3-2. 実行権限の確認
手順3-1の続き
$ id
uidが1000(system)になっている

3-3. /devにrootシェル作成
手順3-2の続き
$ /data/local/tmp/onload.sh
このエラーは無視して良いとのこと。//chmodのエラーが出たので、1をやり直して手動でパーミッションを変更した。3-4も同様。
3-4. /dataの再マウント
手順3-3の続き
$ /data/local/tmp/onload2.sh
3-5. adbでroot権限を取得
> adb shell
$ /dev/sh # id
uidは2000(shell)になっている

3-6. rootシェル作成
手順3-5の続き
# chown 0.0 /data/local/tmp/_su
# chmod 6755 /data/local/tmp/_su
# exit
$ exit
3-7. rootシェル実行
> adb shell $ /data/local/tmp/_su
//ここでsu: permission deniedと表示されたので、3-6のchmodの直後に実行したら出来た。
# id
uidが0(root)になっている

3-8. /systemの変更前にバックアップを作成
手順3-7の続き
# dd if=/dev/block/mmcblk0p3 of=/mnt/sdcard/system.ext4 bs=128K
3-9. rootシェルのインストール
手順3-8の続き
# /data/local/tmp/busybox mount -o rw,remount /system
# /data/local/tmp/busybox cp /data/local/tmp/_su /system/xbin
# chown 0.0 /system/xbin/_su
# chmod 6755 /system/xbin/_su
# /data/local/tmp/busybox mount -o ro,remount /system
# sync
# exit
//_suはadb shell専用のrootシェルでSuperuserを必要としないとのこと。_suではなくてsuをインストールして、Superuser.apkを/system/appに突っ込んでもいいと思う。

3-10. /systemのrootシェルの動作確認
手順3-9の続き
$ _su
# id
uidが0(root)になっている事を確認

4. 後始末

4.1. /data/appの後始末
> adb shell
$ _su
# cd /data
# /data/local/tmp/busybox cp -p app/VpnFaker.apk app-/VpnFaker.apk
# mv app app2
# mv app- app
4.2. /data/systemの後始末
手順4-2の続き
# /data/local/tmp/busybox sed -f /data/local/tmp/packages.xml.sed system-/packages.xml > system-/packages.xml.2
# mv system-/packages.xml system-/packages.xml-
# chown 1000.1000 system-/packages.xml.2
# chmod 644 system-/packages.xml.2
# mv system-/packages.xml.2 system-/packages.xml
# mv system system2
# mv system- system
4.3. 再起動する
別のコマンドプロンプトから
> adb reboot
これでいつでもadb shellから_suでroot権限が取得出来ます。
また、アプデでsuidビットを落とされ、unrootされた時もVpnDialogsの端末エミュレータが残っていれば
手順3の実行で再度root権限が取得出来る可能性があります。

Google+ Community