MEDIAS TAB N-06Dをroot化してみた

N-06Dスレの838でroot化手順が書かれたので試してみた。
うちのN-06Dはファームウェアバージョン 2.3.6、ベースバンドバージョン M1101001、カーネルバージョン 2.6.35.11-perf ncmc@ncmc #3、ビルド番号 A1101001だった。

root化

  1. N-06D USBドライバをインストール。
  2. n-04cのrootkitをダウンロードして解凍。
  3. Android SDK for Windowsをインストール。別にJavaとかパス設定とか要らない。
  4. SDK ManagerでAndroid SDK Platform-toolsにチェック、Android 4.1.2 (API 16)のチェックは外して、Install 2 package...、Accept All、Installの順に操作。Done: loading packages.が出たらCloseで閉じて、SDK Pathで表示されてる箇所のplatform-toolsフォルダを開いてadb.exe、AdbWinApi.dll、AdbWinUsbApi.dllをn-04cのrootkitを解凍して出来たlocal.propと同じ箇所にコピー。
  5. N-06DでMENU→設定→アプリケーション→開発→USBデバッグにチェック→OKの後にPCとUSBで接続する。
  6. メモ帳などで以下のバッチファイルをn06d_root.batの名前でlocal.propと同じ箇所に保存して実行。以後、画面の指示に従う。
@ECHO OFF
adb wait-for-device
adb shell "cd /data/DxDrm && mv NVS NVS.bak"
adb shell "cd /data/DxDrm && ln -s /data/local.prop NVS"
adb reboot
ECHO 再起動が終わったら、何かキーを押してください。
PAUSE
adb wait-for-device
adb shell "cd /data/DxDrm && mv NVS.bak NVS"
adb push data_local /data/local
adb push local.prop /data/local.prop
adb shell chmod 555 /data/local/autoexec.sh
adb reboot
ECHO 再起動が終わったら、何かキーを押してください。
PAUSE
adb wait-for-device
adb install Superuser.apk
ECHO root化が終了しました。何かキーを押してください。
PAUSE

root化の内容

root化するのに定番の/data/local.propファイルはroot権限が無いと作れないが、/data/DxDrm/NVSファイルは起動時に無ければ自動的に作られる上にroot権限で無くても書き換えが出来るので、これをバックアップした後に/data/local.propへのシンボリックリンクにしておけば、再起動時にroot権限で無くても書き換えられる/data/local.propが出来るので、先ほどのバックアップから/data/DxDrm/NVCを元に戻す。
ただ、N-06Dは/data/local.propにro.kernel.qemu=1を書いてもADB接続時にroot権限が使えないので、絵文字ライブラリ(libemojiD.so)を乗っ取ってroot権限で任意のコマンドを実行させられるlibemoji-wrapper.soを/data/local.propから読み込むことで、起動時にシェルスクリプトautoexec.shを使って/data/localのbusyboxパーミッション設定と、suと_suを/devにコピーしてオーナー設定とパーミッション設定をすることでroot化している。この部分がgoroh_kunの作ったn-04cのrootkitの内容。
この辺りは庵怒露慰怒さんのブログ「IS11Nのroot」が詳しい。
root化終わった後にadb shellで/dev/su(/systemいじってないのでsuは/devに置いてあるのを使う)したら無事にプロンプトが$から#に変わった。その際にSuperuserのダイアログが出るので当然ながら許可を選択。
あとはN-06Dスレの838に書かれてるヒントを元に必要に応じて/systemもいじれるかと思う。もちろん、そういったことをする前に可能な限りのバックアップを取っておくのが吉。(mtdをddやcatでイメージ取っておくとか、systemをtarで固めておくとか。)

unroot化

元に戻す(unroot化)には、MENU→設定→アプリケーション→アプリケーションの管理→すべて→Superuser→データを消去→OK→アンインストール→OK→OKの後、以下のバッチファイルをroot化と同様にn06d_unroot.batの名前でlocal.propと同じ箇所に保存して実行。

@ECHO OFF
adb wait-for-device
adb shell "rm /data/local.prop"
adb shell "cd /data/local && rm _su"
adb shell "cd /data/local && rm autoexec.sh"
adb shell "cd /data/local && rm busybox"
adb shell "cd /data/local && rm libemoji-wrapper.so"
adb shell "cd /data/local && rm su"
ECHO unroot化が終了しました。何かキーを押してください。
PAUSE

unroot化の内容

要するにSuperuserのアンインストールと、/data/local.propおよび/data/localのlibemoji-wrapper.so、autoexec.sh、busybox、su、_suを削除するだけ。なので、たぶんMENU→設定→バックアップと復元→データの初期化(/dataが初期化されるハズなので)の後にSuperuserをアンインストールしてもかまわないと思う。データの初期化は、電源オフの状態から音量(右)を押したまま電源を押し続けてdocomoのロゴが出たら電源から手を離し、ドロイド君が出たら音量(右)から手を離し、音量(左)、音量(右)の順に押すとAndroid system recoveryの画面(縦画面)になるので、音量(右)でwipe data/factory resetを選択、音量(左)で決定って手順でも出来る。こちらは途中でパスワードを聞かれるのでIMEIの上から2桁目、下から4桁目、下から3桁目、下から2桁目の4文字を入力する必要がある模様。