Linuxのソース探検の次は、光iフレームのファイルシステムを調べてみます。
まだ途中ですが…。
基本的な情報はコンソールに出てくるメッセージで確認できます。
通常、このメッセージはdmesgコマンドで確認できますが、光iフレームではroot権限が必要です。
adb bugreportで得られるレポートでも一部情報は得られますが、root権限があるほうが何かと便利なので、ここは素直に(?)取りに行きます。
もちろん、これはOSの脆弱性を攻撃してroot権限を取るという行為なので、以後何が起きても自己責任です。念のため。
やり方は、いつものこちらにも記載されている通りです。
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を読めないんですね…。
というわけで続きます。
コメント