2011/05/23

SuperOneClick で root 取得後に unroot する

SuperOneClick で root 取得後に unroot するにはどうするかをまとめておく。SuperOneClick には unroot の機能はあるが、root 時に行ったことを完全に元に戻してくれるかというとそうではない。

SuperOneClick で root を取得する方法は以下の3つがある。
・Shell Root ボタンをクリックする
・Root ボタンをクリックする(busybox をインストールしない)
・Root ボタンをクリックする(busybox をインストールする)
※Root ボタンをクリックした場合、v1.9.1より前のバージョンでは busybox のインストールは強制的に行われる。

順に unroot の方法を見ていく。

1. Shell Root ボタンをクリックした場合

一時的な root なので、本体を再起動すると root ではなくなる。しかし、root 時に使用した exploit の実行ファイルが残ったままになるので、このファイルを削除すればよい。

c:\>adb shell
$ cd /data/local/tmp
$ rm psneuter

psneuter の部分は、使用した exploit によって異なる。psneuter でない場合は、使用した exploit に応じて rageagainstthecage または GingerBreak を指定する。


2. Root ボタンをクリックした(busybox は未インストール)場合

SuperOneClick の Unroot ボタンをクリックして unroot する。これによって、su や Superuser.apk がアンインストールされる。その後、テンポラリにコピーされた exploit と busybox の実行ファイルを削除する。unroot するために一時的に root になっているため、ファイル削除後に本体を再起動しておく。

c:\>adb shell
# cd /data/local/tmp
# rm psneuter
# rm busybox

psneuter の部分は、使用した exploit によって異なる。psneuter でない場合は、使用した exploit に応じて rageagainstthecage または GingerBreak を指定する。


3. Root ボタンをクリックした(busybox もインストール)場合

この方法が一番面倒。なぜかというと、busybox のインストールによって /system/xbin/ に busybox と busybox が提供しているコマンドのシンボリックリンクが大量に作成されるため。/system/xbin は /system が読み取り専用でマウントされているため、書き込み可で再マウントする必要がある。

SuperOneClick の Unroot ボタンをクリックして unroot する。これによって、su や Superuser.apk がアンインストールされる。次に、インストールされた busybox と busybox の各コマンドのシンボリックリンクを削除する。このシンボリックリンクは300以上あるため、1つずつ削除するのはあまりに面倒。そのため、/system/xbin に初期状態から存在する vfp-crasher, strace, ipctool 以外の全ファイルを一括削除しているので注意。

c:\>adb shell
# /data/local/tmp/busybox mount -o rw,remount /dev/block/stl9 /system
# cd /system/xbin
# rm $(ls | /data/local/tmp/busybox grep -v -e vfp-crasher -e strace -e ipctool)
# cd /
# /data/local/tmp/busybox mount -o ro,remount /dev/block/stl9 /system

最後に、テンポラリにコピーされた exploit と busybox の実行ファイルを削除する。unroot するために一時的に root になっているため、ファイル削除後に本体を再起動しておく。

c:\>adb shell
# cd /data/local/tmp
# rm psneuter
# rm busybox

psneuter の部分は、使用した exploit によって異なる。psneuter でない場合は、使用した exploit に応じて rageagainstthecage または GingerBreak を指定する。


~おまけ~
上記のように unroot すれば root を取得した痕跡が分からないかというと、そういうわけにはいかない。なぜかというと、通常操作できないはずのいくつかのフォルダのタイムスタンプが変わってしまうため。完全に痕跡をなくすには、Odin3 等を使用してリカバリする以外に方法はないと思われる。

0 件のコメント:

コメントを投稿