このたびめでたく Xperia NX SO-02D が rooted になりました。
とはいえ、Xperia NX ではなくて Xperia S だしバージョンが ICSになってしまいますがw
ネタ元はこちら。
やり方の解説とかはやりつくされている感があるのでなぜ root が取得される事態になったのか。
あ、一応記念撮影。
さて本題。
最も重要なのは先日ソースをみかけた init のマヌケ穴です。/data/local/tmp を別のディレクトリにリンクしておけば起動時に勝手に書き込み権限を設定してくれるというマヌケ穴。
ソニモバの初期 ICS でその件が指摘されたので対策として init.rc で /data/local の権限を
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
から
mkdir /data/local 0751 root root
mkdir /data/local/tmp 0771 shell shell
に変更したようです。
つまり、今までは adb shell で入った場合に /data/local 以下にファイルを作り放題だったのですが、権限を剥奪されて /data/local/tmp 以下しか弄れないようになってしましました。
なので、リンクを張りなおすことができなくなってしまったためいままでの tmp 芸は使えなくなってしまいましたとさ。
だがしかし!init のマヌケ穴はそのまま生きていた!!
そして過去のバージョンでは /data/local の権限は当然そのままなので自由にリンクを貼ることができます。 /data/loca/tmp に /data をリンクした状態で /data の初期化をせずにファームウェアのアップデートを行えば勝手に init がマヌケ穴を使って /data に書き込み権限を与えてくれるのです。
そしてもうひとつ重要な穴は qemu 芸が使えてしまうことです。
echo ro.kernel.qemu=1 >/data/local.prop
これこそ init.rc に1行書き足せば簡単に潰せる穴なのにご親切にどうも。
ということで、init のマヌケ穴と qemu 芸のおかげさまで無事 rooted になりましたとさ。
さて、この手法を使うことができる kernel がメーカー署名をされて出てしまったのはかなり重要です。おそらく SO-02D の2.3.7最終バージョンになるであろう 6.0.A.5.12 は大切に保存しておきましょう。
でもやっぱりいちいちバージョン上げなきゃ使えない手法はめんどくせーな。
4.0.4 に上げて qemu 芸した状態で 2.3.7 に戻したらどうなるかなぁ。wipe しなきゃ回復できないほどアレになっちゃうかなぁ…