レトロフリークで任意のコマンドをroot権限で実行する その2
前回はレトロフリークでいろいろ遊ぶために、まずはとRetroN 5のfactory reset imageを解析してみたところまでを説明しました。
ここまでの状態でRetroN 5用のファイルがいろいろと取り出せますので、このままRetroN 5用のapkファイルなどを解析していってもよいのですが、せっかくなのでレトロフリークのファイルを解析したいところです。
レトロフリーク用のfactory imageが公開されれば手っ取り早い訳ですが、あまり公開は見込めないと思われ、どう解析しようかと悩んでいました。
状況が変わったのはRetroN 5用のfactory imageをmicroSDカードに書き込み、レトロフリークに装着して起動したときからです。もしかしたらレトロフリークでRetroN 5のリカバリモードが起動するのでは?との淡い期待は半分あたり。結果は何故かレトロフリーク用のリカバリモードが立ち上がりました。RetroN 5のリカバリモードにある画面写真では、背景にRETRON 5という文字がグラフィックで描かれていますが、これがretro freakになっています。

RetroN 5用のrecovery imageにレトロフリーク用の画像があらかじめ入っているとは考えにくいので、レトロフリーク内NAND flashのリカバリモード(リカバリ用カーネルと/パーティション)が起動されている、と考えるのが妥当に思えます。
そこで、何故にRetroN 5のfactory image SDをレトロフリークに装着して起動するとレトロフリークのリカバリモードが起動するのか、という観点で調べてみました。
結論としては、以下の様な流れでリカバリモードが起動しています。
・通常のカーネルで起動後、/init.rcに記述された内容でいろいろ初期設定等を行う
・init.rcから呼び出される/mountfs.shで、SDカードの先頭セクタ16バイトをhexdumpでチェックし、それが525445525f354e4f4f425f5f4453544f(※1)だったら、SDカードのpartition 2, 3をそれぞれ/data, /cacheにmountする。そうでなければ普通にNAND flash内のpartitionを/data, /cacheにmountする。
・init.rcから(root権限で)/data/bootscript.shを呼び出す
・SDカードの/data/bootscript.shの記述(/system/bin/reboot recovery)により、リカバリモードで再起動する
(※1)ちなみにRetroN5用のfactory imageの先頭は以下の通り。mountfs.sh内では-Cの引数を使わずhexdumpしているので、4バイトのリトルエンディアンの並びになっています。レトロフリークでもRETRON5___BOOTSDという文字列に反応するのですね。
hissorii@ubuntu:~$ hexdump -C boot-recovery-SD-fullreset-v0.2.2.img | head -n 1
00000000 52 45 54 52 4f 4e 35 5f 5f 5f 42 4f 4f 54 53 44 |RETRON5___BOOTSD|
ところで、SDカードのpartition 2を/dataにmountする、/data/bootscript.shが呼び出される、この2点が重要です。
だったらRetroN 5 factory imageのpartition 2にあるbootscript.shにいろいろ記述すれば、好きなコマンドが実行出来るのではないか、と考えられるわけです。
で、試してみたのが以下のツイートになります。
レトロフリーク、root権限で任意のコマンドを実行できるところまで解析した。
スクリーンショットはls -laR / した結果の/systemあたり。
RetroFreakGUI.apkとか解析したら楽しそう... pic.twitter.com/cxuNpTXMCq
— ひっそりぃ (@hissorii_com) 2015, 12月 16
具体的にはbootscript.shを以下の様に書き換え、SDカード partition 2のhoge.txtにls -laRの結果を書き出す様にしてみました。最初の1行と最後の2行は元々のbootscript.shの内容です。
書き換えたmicro SDをレトロフリークに装着して起動すれば、micro SD上のbootscript.shが実行され、micro SDにhoge.txtが無事に書き出されました。hissorii@ubuntu:~$ cat /mnt/tmp2/bootscript.sh
#!/sbin/busybox sh
echo hoge > /data/hoge.txt
/sbin/busybox ls -laR / >> /data/hoge.txt
echo uhyo >> /data/hoge.txt
sync; sync; sync
# reboot into recovery
/system/bin/reboot recovery
レトロフリーク用のアップデータを使った手法ではないので、個々のレトロフリーク用のアップデータファイルを用意する必要もありません。単一のmicro SDでどのレトロフリークでも任意のコマンドが実行できます。
という訳で、RetroN 5のfactory imageを書き換えることで、レトロフリークで任意のコマンドが実行できることが確認できました。
ここまでで、とりあえずの下準備はokです。
後はレトロフリーク上のapkファイルをmicro SDにコピーして取り出し解析するなり、レトロフリーク上のプログラムを別のプログラムに置き換えたり等、いろいろと遊べる環境が整いました。
次はレトロフリークのNAND flashを全ダンプできるか試してみようと思います。
Comment
コメントの投稿
Trackback
http://hissorii.blog45.fc2.com/tb.php/258-a6a3bf7c