2014年3月3日月曜日

【L-05D】【root】root取得が可能に


L-05D(ビルド番号:JZO54K)でroot取得ができました。


・・・と言っても、自分で方法を見つけ出したわけではなく、他機種(L-04E)向けの方法を真似ただけです。

※言うまでもないですが、この方法を試される場合は自己責任でお願いします。root化をすると、端末の保証がなくなります。

※最後まで読んでから作業をした方がいいかも。


方法は http://android.slateblue.tk/viewtopic.php?f=23&t=136 に書いてある通りです。ただしdevice.dbの再ビルドは省略。

Android SDKなどの環境構築はできている前提で話を進めます。SDK導入方法はこちら

5つのファイル(get_essential_address , disable_ccsecurity , install_backdoor , run_root_shell , device.db)を揃えて、コマンドから

adb push get_essential_address /data/local/tmp
adb push install_backdoor /data/local/tmp
adb push disable_ccsecurity /data/local/tmp
adb push run_root_shell /data/local/tmp
adb push device.db /data/local/tmp
adb shell chmod 755 /data/local/tmp/get_essential_address
adb shell chmod 755 /data/local/tmp/install_backdoor
adb shell chmod 755 /data/local/tmp/disable_ccsecurity
adb shell chmod 755 /data/local/tmp/run_root_shell
adb shell chmod 644 /data/local/tmp/device.db
adb shell /data/local/tmp/get_essential_address
adb shell /data/local/tmp/install_backdoor
adb shell /data/local/tmp/disable_ccsecurity

adb shell
$ /data/local/tmp/run_root_shell

を実行すれば、一時的にrootで操作できるようになります。

これはただrootでログインしているだけなので、再起動などすると消えます。2回目以降は、

adb shell /data/local/tmp/install_backdoor
adb shell /data/local/tmp/disable_ccsecurity

adb shell
$ /data/local/tmp/run_root_shell

だけで入れます。

あとは、

/data/local/tmp/busybox mount -o rw,remount /system
/data/local/tmp/busybox cp /data/local/tmp/busybox /system/xbin/
/data/local/tmp/busybox chmod +x /system/xbin/busybox
busybox cp /data/local/tmp/su /system/xbin/
busybox chown 0:0 /system/xbin/su
busybox chmod 6755 /system/xbin/su
mount -o ro,remount /system

でbusyboxとsuを/systemに送り込みます。
/systemのリマウントが普通にできちゃうところがイイですねw


次。

今回の場合、起動時にいくつかのコマンドを打てばrootが取れるので、それを自動化して恒久rootっぽくしよう・・・というのが、同類の他端末でよくある手法です。
ふつうのAndroidでは起動時に/system/etc/install-recovery.shのコマンドを実行することができるので、そこに書き込めばいいはずなのですが、残念ながらL-05Dではこの方法は使えません。

init.rcを見にいっても、起動時にshファイルを一切読み込んでいないので、init.rc自体を書き換える(つまりカーネルを弄る)必要が出てきます。

これはちょっと面倒ですし、僕のスキルではできませんので、別の方法でやってみます。


アプリ「Script Manager」を使って、起動後すぐにコマンドを実行するようにします。
起動時にrootを取っているわけではないので、恒久rootと違いかなり制約が大きいです(rootアプリの「起動時に設定」が使えない)。手動でコマンドを打つ手間を省くだけだと思ってください。


用意するのは、
・Script Manager
・ESファイルエクスプローラー(ファイルのOwnerを変更できるもの、コマンドでもOK)
・install-recovery.sh

install-recovery.shファイルは、自分で用意します(ファイル名は何でもいいです。拡張子はsh)。ファイルの中身は

#!/system/bin/sh
cd /data/local/tmp
/data/local/tmp/install_backdoor
/data/local/tmp/disable_ccsecurity
/data/local/tmp/install_backdoor -u

これを、文字コードUTF-8、改行コードLFで保存します。改行コード等指定する必要があるので、Windowsの場合はTeraPadでも使ってください。

あと神経質な人は、この時点でSuperSUなどインストールしておいてください。


これで下準備完了。install-recovery.shを、/data/local/tmpに置きます。何度も言いますが、ファイル名は何でもいいです。


ここでようやくアプリの出番。Script Managerを起動し、はじめの画面でrootでブラウザするよう設定します。
/data/local/tmpに移動。install-recovery.shを選択し、「Boot」にチェックを入れて「保存」します。


これで、このスクリプトが起動時に実行されます。・・・が、もう一手間。

まず、メニューキー→Advanced→設定 で、Browse as rootのチェックを外します。


次に、メニューキー→コンソール→Run shell でshellを起動します。


画像で赤線を引いた部分、僕の場合は「u0_a124」ですが、多分端末によって違います。
これをちょっと覚えておいてください。

これでScript Managerの出番はひとまず終了。

次に、パソコンのshellで、

chown u0_a124:u0_a124 /data/local/tmp/device.db

を実行します。ここで、さっき覚えた文字列を使っています。
何をしているかと言うと、device.dbのオーナーとグループを変えています。コマンドで打つ必要は別になくて、僕もESファイルエクスプローラーを使って変えました。

ESファイルなら、こうなります。


ここまで終わったら、端末を再起動してください。
起動後30秒くらいで、rootが取れると思います。

このラグがあるためいろいろと制約が出てくるのですが、とりあえずはうまくいきます。
とにかく作業終了です。



ここからは妄言です。

じつは僕の場合、既に起動時にrootが取れてます。理由は不明。
/system/xbinにsuをおいて、いろいろ弄ってた辺りから、急に恒久rootになっちゃって、何がきっかけなのかもよく分からず。
そのかわり、これもいつからか急に、Wi-Fiに繋がらなくなっちゃいました。

で、結局、「起動時rootが取れているけどWi-Fiが繋がらない、一時root取得のコマンドを実行するとWi-Fiに繋がる」というよくわからない状態になり、
結論としては、今まで解説した通りの状態で運用しているわけです。

root化の解説記事を書いているくせに、非常に面目の無いことになっている気がしないでもないですが、

これで解説を終わります。


最後に、本来ならリンク元に報告とお礼を言うべきですが、僕自身あのフォーラムのアカウントを持っていないこともあり、この記事内での感謝で代えさせていただきます。ツール作成者さん、スレッドの投稿者さん、ありがとうございました。


//メモ
Device detected: L-05D (JZO54K)
Essential address are:
  prepare_kernel_cred = 0xc00a2278
  commit_creds = 0xc00a1d18
  remap_pfn_range = 0xc01268a4
  vmalloc_exec = 0xc01340a8
  ptmx_fops = 0xc0d8a5a8

18 件のコメント:

  1. ありがとうございます

    >chown u0_a124:u0_a124 /data/local/device.db

    最後 /tmp が抜けています

    返信削除
    返信
    1. 指摘感謝です。今出先なので、明日以降修正しますm(__)m

      削除
    2. 記事修正しました。ありがとうございました。

      削除
  2. ルート化できましたが、おサイフ機能やかざすクーポンといったFeliCaが使えなくなったのは私だけでしょうか?

    返信削除
    返信
    1. 僕はその機能を利用していないので確認できません(。>д<)
      自己責任で解決なさって下さい。

      削除
    2. root化だけでは問題ないようです。
      テザリングのAPN強制変更ないようにXposedインストーラーでゴニョゴニョしたのがいけなかったようです

      削除
    3. 追伸です。
      Xposedインストーラーで簡易再起動でモジュール読ませるとFelica機能も使え、MVNOでのテザリングも可能でした。
      通常の再起動かけるとFelica死ぬので、電源オフや再起動前には一度Xposedをアンインストールするという手間がかかりますが。

      削除
    4. 詳細ありがとうございます、理屈がイマイチわかりませんが、なかなか面倒ですねぇ(^^ゞ

      削除
  3. いつも参考にさせて頂いています。
    記事下部の"妄言"のことですが私も同じ現象になりました。記事通りの手順でroot化を行いしばらく使用していましたがScript Managerをアンイストールして再起動してもroot権限取得状態になってしまっています。さらに同じくWiFiを掴むことができなくなってしまいました。
    その後何か分かった事がありましたらまた記事にしていただければ幸いです。

    返信削除
    返信
    1. 自分は"妄言"の通りWi-Fi周りも解決できちゃっているので、この件については放置かなぁと…

      削除
    2. 私もしばらくこのままで運用してみたいと思います。
      ありがとうございました。

      削除
  4. 素晴らしい記事をありがとうございます。
    私の端末はKYL21なのですが、この記事を参考にroot取得を試みました。
    途中まで順調だったのですが、
    /data/local/tmp/busybox mount -o rw,remount /system
    を実行すると
    mount: permission denied. (are you root?)
    と表示されてしまい、次に進めなくなりました。
    プロンプトが$→#に変わっていることから一時root化には成功していると思うので、自分では原因がわからず困っています。
    原因・対処法が分かる方がいらっしゃれば是非アドバイスをお願いします。

    返信削除
    返信
    1. rootを取っただけで/systemがrwでリマウントできるとは限りません。KYL21についてはさっぱり知らないので断定はできませんが、おそらくリマウントできない機種なのでしょう。他の方法をお試しください。

      また、当サイトは知恵袋ではありませんので。不特定多数の方に回答を依頼することは以降ご遠慮くださいm(__)m
      (もちろん僕以外に情報を持っておられる方のコメントをお断りするわけではありません)

      削除
  5. 匿名で失礼いたします。
    L-04Eなのですが、コマンド上では#表示だったのですが端末で操作するとどうしてもrootが取れていない状態でした。
    記事の通りアプリを使用したら再起動してもrootが取れていました。
    とても参考になりました。ありがとうございます。
    Titaniumも使用することができて良かったです。

    返信削除
    返信
    1. L-04Eとはシブい端末をお持ちですね~!
      参考になってなによりです。

      削除
  6. hi minijumbo,
    i need your help, i'am trying to root my L-05d but when i trigger this line "adb shell /data/local/tmp/get_essential_address" my phone get restart and after turning back on, next thing install_backdoor doesn't work.
    thank you

    返信削除
    返信
    1. Thank you for your comment.
      I'm sorry but I don't know the reason.

      However, get_essential_address only searches address and record it in device.db , does not rooting action, so maybe you can root your L-05D without executing get_essential_address .

      I'm not convinced...but please try it↓
      ① "Push" this (http://ux.getuploader.com/ja12an/download/67/device.db) device.db
      ② Skip "adb shell /data/local/tmp/get_essential_address"
      ③ Do "adb shell /data/local/tmp/install_backdoor"

      I have only this idea..so if it fails, please look for another way.
      Forgive my poor English^^;

      削除

コメント受付中です!

※管理人の判断により、コメントを削除する場合があることをご了承ください。