IS01 root 化

IS01 (BB16) を root 化したときのメモ。

基本的に「IS01 BB16でのroot化」の通り。
Linux PC で作業した点が異なる。

事前準備

Superuser の入手

Market にある最新の Superuser だと動作しないので、
http://forum.xda-developers.com/showthread.php?t=682828 から
su-2.3.6.1-cd-signed.zip をダウンロードする。

$ unzip su-2.3.6.1-cd-signed.zip

root 化スクリプトの入手

http://marijuana.ddo.jp/is01/index.php?moddir=downloads&action=viewcat&cid=7 から bb12_s.7zbb13.7z をダウンロードする。

$ p7zip -d bb12_s.7z
$ p7zip -d bb13.7z

root 化スクリプトの修正

BB16 で動作するように root 化スクリプトを修正する。

$ vi bb12_s/autoexec.sh
04: #setprop rild.libpath `getprop rild.libpath2` # <- コメントアウトする 25: mount -o remount,rw rootfs / 26: mount -o remount,rw,suid,dev /dev/block/mmcblk0p2 /sbin # <- この行を追加する 27: #mount -o remount,rw ext3 /data 28: #mount -o remount,rw yaffs2 /sqlite_journals

以下の内容で adbd というファイルを作成する。

$ vi bb13/adbd
#!/system/bin/sh
/data/root/autoexec.sh
exec /sbin/adbd_

DOS バッチファイルのシェルスクリプト化

bb12_s/install.cmd は DOS バッチファイルなので shell script に変換する。
bb13/cmd.cmd, bb13/finish.cmd も変換する。

bb12_s/install.sh:
--------------------------------------------------------------------------------
#!/bin/bash

echo "[0] : SuperUser"
echo "[1] : 無条件"
echo "[2] : suhax"
echo -n "suコマンドの種類を選択 > "
read SU

adb shell mkdir /data/root

adb push autoexec.sh /data/root
adb push libril_wrapper.so /data/root
adb push busybox /data/root
adb push pu /data/root
adb push bash /data/root
adb push bash.bashrc /data/root
adb push lcd_density /data/root
adb push local.prop /data
adb push market.sh /data/root

adb shell chmod 0777 /data/root
adb shell chmod 0777 /data/root/busybox
adb shell chmod 0777 /data/root/autoexec.sh
adb shell chmod 0777 /data/root/libril_wrapper.so
adb shell chmod 0777 /data/root/pu
adb shell chmod 0777 /data/root/bash
adb shell chmod 0666 /data/root/bash.bashrc
adb shell chmod 0777 /data/root/lcd_density
adb shell chmod 0777 /data/root/market.sh

if [ "$SU" = "0" ]; then
adb push au0 /data/root
adb shell mv /data/root/au0 /data/root/au
adb push reboot /data/root
elif [ "$SU" = "1" ]; then
adb push au1 /data/root
adb shell mv /data/root/au1 /data/root/au
adb push reboot1 /data/root
adb shell mv /data/root/reboot1 /data/root/reboot
elif [ "$SU" = "2" ]; then
adb push au2 /data/root
adb shell mv /data/root/au2 /data/root/au
adb push reboot /data/root
fi

adb shell chmod 0777 /data/root/reboot
echo "Press any key to reboot"
read
#adb reboot
--------------------------------------------------------------------------------

bb13/cmd.sh:
--------------------------------------------------------------------------------
#!/bin/bash

echo "事前にオールリセットを行う事をお勧めします。"
echo "メーカ保証外の行為です。"
echo "このスクリプトが原因で文鎮化する可能性があります。"
echo "メモリのアドレスにより出来ない場合があります。"
echo "全て自己責任の元に行ってください。"
echo "超能力はないので出来ないだけ言われても何も言えません。"
echo "出来ない場合は素直に諦めてください。"
echo
echo -n "それでも行いますか?(y/N) > "
read YESNO
if [ "$YESNO" != "y" ]; then
exit
fi

adb shell mkdir /data/root > log.txt 2>&1

adb push busybox /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/busybox >> log.txt 2>&1
adb push touch /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/touch >> log.txt 2>&1
adb push sed /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/sed >> log.txt 2>&1
adb push nandunlockauto /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/nandunlockauto >> log.txt 2>&1
adb push flash_image /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/flash_image >> log.txt 2>&1
adb push breaksuid /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/breaksuid >> log.txt 2>&1
adb push nandunlock /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/nandunlock >> log.txt 2>&1
adb push nandunlock2 /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/nandunlock2 >> log.txt 2>&1
adb push nandunlock3 /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/nandunlock3 >> log.txt 2>&1

adb push sed.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/sed.sh >> log.txt 2>&1
adb push auto.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/auto.sh >> log.txt 2>&1
adb push getroot.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/getroot.sh >> log.txt 2>&1
adb push recache.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/recache.sh >> log.txt 2>&1
adb push chcache.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/chcache.sh >> log.txt 2>&1
adb push flash.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/flash.sh >> log.txt 2>&1
adb push backup.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/backup.sh >> log.txt 2>&1

adb push mvdir.sh /data/root >> log.txt 2>&1
adb shell chmod 0777 /data/root/mvdir.sh >> log.txt 2>&1

adb push boot.img /data/root >> log.txt 2>&1
echo "---------------------------------" >> log.txt 2>&1

echo "ファイルの転送が終了しました。"
echo "log.txtを確認し、転送失敗している場合は一度閉じて再度やり直してください。"
echo "次にsystem権限を奪取するためにディレクトリを操作します。"
echo "一部のディレクトリで権限不足のためエラーになりますが無視してください。"
echo "元に戻す場合はfinish.cmdを実行する必要があります。"
echo "BB12の場合はここでコマンドプロンプトを閉じてください。"
echo
read

adb shell /data/root/mvdir.sh >> log.txt 2>&1

adb push VpnFaker.apk /data/app >> log.txt 2>&1
adb shell /data/root/touch -t 201107301500.00 /data/app/VpnFaker.apk >> log.txt 2>&1
adb shell /data/root/sed.sh >> log.txt 2>&1

echo "system権限奪取のための下準備が終わりました。"
echo "再起動後にTerminal Emulatorがインストールされます。"
echo "何かキーを押すとIS01が再起動します。"
read
adb reboot
--------------------------------------------------------------------------------

bb13/finish.sh:
--------------------------------------------------------------------------------
#!/bin/bash

adb shell /data/root/busybox rm -rf /data/app
adb shell mv /data/app- /data/app
adb shell /data/root/busybox rm -rf /data/system
adb shell mv /data/system- /data/system

echo "Press any key to reboot recovery"
read
#adb reboot recovery
--------------------------------------------------------------------------------

root 化作業

bb12_s/install.sh の実行

まず USB デバッグを有効にした IS01 を PC と USB 接続する。

$ adb devices
List of devices attached
SSHDO009194 device


$ cd bb12_s
$ ./install.sh

su の種類は 0 で。

bb13/cmd.sh の実行


$ cd ../bb13
$ adb push adbd /data/root
$ ./cmd.sh

IS01 が再起動する。

IS01 でコマンド実行

IS01 の Terminal Emulator で以下を実行する。

$ id
uid=1000(system) gid=1000(system)
$ /data/root/chcache.sh

そして PC で以下のコマンドを実行する。

$ adb reboot

IS01 が再起動する。

IS01 が起動したら Terminal Emulator で以下を実行する。

$ /data/root/getroot.sh

enter を押して Terminal Emulator を終了する。
再び Terminal Emulator で以下を実行する。この段階で root になっていることがわかる。

# id
uid=0(root) gid=1000(system)
# mount -o remount,rw /dev/block/mmcblk0p2 /data/ro
# cat /data/root/adbd > /data/ro/adbd
# chmod 0755 /data/ro/adbd
# cat /sbin/adbd > /data/ro/adbd_
# chmod 0755 /data/ro/adbd_
# cat /data/root/autoexec.sh > /data/ro/autoexec.sh
# chmod 0755 /data/ro/autoexec.sh
# umount /data/ro
# /data/root/busybox rm -rf /data/ro
# ln -s /sbin /data/ro
# /data/root/recache.sh

bb13/finish.sh の実行


$ ./finish.sh
$ adb reboot

IS01 が再起動する。

SuperUser のインストール


$ cd su-2.3.6.1-cd-signed
$ adb install system/app/Superuser.apk

Terminal Emulator を起動し au コマンドで root になれたら成功。

$ au
#