光iフレームのファイルシステムを調べる(1)

Linuxのソース探検の次は、光iフレームのファイルシステムを調べてみます。
まだ途中ですが…。

基本的な情報はコンソールに出てくるメッセージで確認できます。
通常、このメッセージはdmesgコマンドで確認できますが、光iフレームではroot権限が必要です。
adb bugreportで得られるレポートでも一部情報は得られますが、root権限があるほうが何かと便利なので、ここは素直に(?)取りに行きます。

もちろん、これはOSの脆弱性を攻撃してroot権限を取るという行為なので、以後何が起きても自己責任です。念のため。

やり方は、いつものこちらにも記載されている通りです。

(-_-): WDPF-701ME

rageagainstthecage-arm5.binを実行したら、私の場合は一発でroot権限が取れました。

SuperUser.apkをインストールしておくと、suすると端末の画面上に許可を求めるメッセージが出るようになります。

これで、Linux起動時のシーケンスはもちろん、ファイルシステムのそこかしこが覗き放題になりました。

…が、これって結構危険な状況ではあるんですよね。
遅かれ早かれ、何かしくじってシステムを壊してしまうことになる気がします。
スーパーユーザー権限は不必要に使うものではないです。

そこで、今後に備えて、2つほど安全策を考えてみました。

1つは、光iフレームのファイルシステムのバックアップを取ること。
光iフレームに毎回shellで接続するのではなく、ファイルシステムのコピーをMac側へ持ってきてしまえば、少なくとも中身の調査はMac側だけで行えます。

持ってくるには、adb pullするという強引な手もなくはないですが、それよりもディスクイメージを作成し、Mac側でイメージファイルをマウントするほうがスマートです。

もう1つは、コンソールとしておそらくシリアルポートが使われているはずなので、光iフレームの基板上からシリアルポート信号を引っ張りだすことです。

これができれば、adbの助けを借りずとも、コンソールから直接shellへ入れるようになります。

さて、まず1つ目のディスクイメージですが…
光iフレームはフラッシュメモリ上にファイルシステムを作っています。
ディスクに相当するデバイスは、/dev/mtd**になるようです。

ただ、ファイルシステムは通常のLinuxのようなext3などとは違います。
dmesgを見ると、

kernel: VFS: Mounted root (jffs2 filesystem) on device 31:6.

というログがありましたので、jffs2ですね。
これはフラッシュメモリをターゲットに設計されたファイルシステムです。

ところで、光iフレームはルートファイルシステムを2つ持っているようです。

kernel: 0x000000000000-0x000000080000 : “boot1”
kernel: 0x000000080000-0x000000100000 : “boot2”
kernel: 0x000000100000-0x000000200000 : “ctrl”
kernel: 0x000000200000-0x000001200000 : “nvdata”
kernel: 0x000001200000-0x000001500000 : “k0”
kernel: 0x000001500000-0x000001800000 : “k1”
kernel: 0x000001a00000-0x000009800000 : “root0”
kernel: 0x000009800000-0x000011880000 : “root1”
kernel: 0x000011880000-0x000038e80000 : “userdata”
kernel: 0x000038e80000-0x000058e80000 : “dpfdata”
kernel: 0x000058e80000-0x000060e80000 : “firmwarestorage”
kernel: 0x000060e80000-0x000068e80000 : “factoryreset”
kernel: 0x000068e80000-0x000068f00000 : “serialdata”
kernel: 0x000001800000-0x000001a00000 : “vcfw”

こんな感じになっているので、boot1とboot2、k0とk1、root0とroot1があります。
ファームウェアの更新のために、起動に必要なファイルシステムは2つずつ持っているのかもしれません。

さて、とりあえずルートファイルシステムはroot0ないしroot1ですから、boot1が/dev/mtd0とすると、/dev/mtd6と/dev/mtd7がroot0、root1に相当すると思われます。

このディスクのイメージを取るには

dd if=/dev/mtd6 of=/sdcard/mtd6.bin

こんな感じでSDカード上に保存します。

このファイルをMac上に持ってきて、調べたいわけですが、残念ながらMacはjffs2を読めないんですね…。

というわけで続きます。

コメント