未熟者

みじゅくもの と読んでください

LinuxでL-01Dのroot権限を取る

ボクの購入したL-01Dのファームウェアはv10b。なんとv10bまではroot奪取できるようなので、しました(やっと)。
いつもどおり作業はXubuntuで。基本的にL-01D wikiに記載されていることと同じ事をLinuxでやっているだけです。

  1. Android SDKの準備

    ここ
    からダウンロードしてきてhomeディレクトリに展開。
    /home/ユーザー名/android-sdk-linux/tools/android を実行し、必要なモノをインストール(多分Toolsの中身だけでいいはず)。
  2. PATHを通す

    このままじゃadbコマンドを実行するたびにフルパス指定しなくちゃならないので、PATHを通しておきます。
    $ export PATH=$PATH:/ユーザー名/android-sdk-linux/platform-tools
    上記のコマンドでパスを通したら
    $ adb start-server
    でPATHが通っているか確認。通っていればadbサーバが動き始めます。
  3. バイスファイルの生成

    /etc/udev/rules.d/51-android.rules を生成。中身は
    「SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"」と記述。
    バイスファイルを作ったら、設定 > アプリケーション > 開発 > USBデバッグにチェックを入れ、「PC同期モード」でL-01DをUSB接続。
    $ adb devices
    上記コマンドでL-01Dが認識されていれば成功。
  4. suとbusyboxのダウンロード

    ここ
    からSUBBZR.zipをダウンロードし、中のsuとbusyboxを/homeに置く。これで下準備は完了。
  5. root奪取

    $ adb shell
    $ mv /data/misc/wifi/config /data/misc/wifi/config_
    $ ln -s /data/local.prop /data/misc/wifi/config
    ここでL-01Dでwifi on offと切り替える
    $ mv /data/misc/wifi/config_ /data/misc/wifi/config
    echo ro.kernel.qemu=1 > /data/local.prop
    端末を再起動。
    どうやらlocal.propのシンボリックリンクwifiの設定に偽装してアクセス権を書き換えている?みたいです。 
    再起動したら先ほどダウンロードしてhomeディレクトリに置いておいたsuとbusyboxをL-01Dに送ります。
    $ adb shell mkdir /data/local/bin
    $ adb push busybox /data/local/bin/busybox
    $ adb push su /data/local/bin/su
  6. install-recovery.sh書き込み

    $ adb shell
    (プロンプトが#になっていることを確認)
    # chmod 755 /data/local/bin/busybox
    # chmod 755 /data/local/bin/su
    # /data/local/bin/busybox mount -o remount,rw -t ext4 /dev/block/mmcblk0p27 /system

    続いてinstall-recovery.shの書き込み。wikiではechoコマンドを叩きまくって追記していますが、非常に煩雑なので先にPC側でファイルを作って先ほどのsuとbusyboxと同じようにadb pushで送ってしまいます。
    $ nano install-recovery.sh
    エディタはviでもemacsでもメモ帳みたいなのでも何でもどうぞ。ファイルの中身は
    #!/system/bin/sh

    sleep 5
    /data/local/bin/busybox mount -o rw,remount /dev/block/mmcblk0p27 /system
    /data/local/bin/busybox cp /data/local/bin/busybox /system/xbin/busybox
    /data/local/bin/busybox cp /data/local/bin/su /system/xbin/su
    chown root.shell /system/xbin/su
    chmod 4755 /system/xbin/su
    chown root.shell /system/xbin/busybox
    chmod 755 /system/xbin/busybox
    busybox mount -o ro,remount /dev/block/mmcblk0p27 /system
    これをコピーして貼りつければOK。ファイルを保存したらもう1つターミナルを起動して
    $  adb push install-recovery.sh /system/etc/install-recovery.sh
    これでinstall-recovery.shがL-01Dにコピーされました。adb shellを実行中のターミナルに戻って
    # chmod 755 /system/etc/install-recovery.sh
    # mv /system/bin/seccmmond /system/bin/seccmmond_
    # /data/local/bin/busybox mount -o remount,ro -t ext4 /dev/block/mmcblk0p27 /system
    # /system/etc/install-recovery.sh
    おそらくここで再起動(多分)。 再起動後
    # echo > /data/local.prop
    もう一度端末再起動で完了!!SuperuserをPlayストアからインストールしておしまいです。
    うまく行かない場合は/system/xbinにsuとbusyboxがちゃんとコピーされているか確認してみてください。

今まではroot奪取と言っても解説サイトのコマンドをコピペして実行しているだけでしたが、Linuxに慣れてくると「そのコマンドが何をしているか」がわかるようになってきました(やっと今更)。Androidも中身はLinuxWindowsで作業していても作業の途中途中でadb shellを実行して
cdコマンドlsコマンド叩いて処理がちゃんと行われているか確認していれば「なぜかうまくいかない」ってことは無いはず。