サークルの部室で使っていた無線LANのルータを眺めていたらなんだか真っ当なOSが 入っていそうな挙動(起動が遅い,設定画面の拡張子がphp,起動途中に変なIPを一時的に使う,など)が 見受けられたので,中身を見てみました.
ターゲットは,coregaのCG-WLBARGSです.
今回は気軽に遊びます.逆アセンブルしたり変なツールを作るのは無しの方向で.
この文書を読むことによって生じたいかなる損害も保障しません. 自己の判断でご使用下さい.
後から気づいたのですが「内部の解析、変更等はご遠慮ください」と書いてありますね. 中身はGPLのコードを含んでいるので解析しても大丈夫でしょうが,「ご遠慮ください」 と明記されているので,そのことを考慮してください. (GPLなソフトの解析を制限するような表記はライセンス違反な気がしますが…)
ファームウェアを開いた瞬間に気づくのは,/dev/mtdなんて書いてあって, きっとLinuxが動いていて,MTDディバイスとしてフラッシュメモリに アクセスしているんだなぁ,ということでしょう.
遊び始めて数秒で指針が見えて来ました.
もう少し眺めていると,32ビット固定長の命令列が 見えてきます.何らかのRISCマイコンが載っていることが判明. 雰囲気から言って,多分MIPSでしょう(後でMIPSと確認). 文字列プールの内容から,すぐにgzipの展開用のコードだと分かります.
先頭にあるのはLinuxのローダのようです.
次の領域には,圧縮されたLinuxカーネルらしきものがあります. 圧縮されているので中身は分かりませんが,大きさや位置から言って カーネルでしょう.
ということで,展開.
先頭のローダがgzipのものなので,gzipで展開…と思ったら, フォーマットが違う.「7z」の文字が見えます. LZMAアルゴリズムです.
LZMA対応のローダのソースをダウンロードしてきて, 展開プログラムを作成.
やっぱり中身はLinuxカーネルでした. CPUもMIPSだと分かりましたし,他にも色々な情報が得られます.
後ろの2/3くらいは,きっとファイルなどのデータでしょう. Linuxが入っているなら,ファイルシステムの圧縮イメージである可能性が高い.
「--PaCkImGs--」の文字が見えますが,PackImagesで,やっぱりファイルシステムの イメージなのでしょう.
次のヒントが「sqsh」.どこかで見たことがある. 何処だったかと脳内GREPを実行するが出てこない. Googleに聞いてみると,別のものが出てくる.
ここで,人間の脳の機能を使わなければ能無しです. というわけで,ファジイ検索. …Knoppixのファイルシステムだ.
squashfsですね.
http://squashfs.sourceforge.net/ から ソースを入手.
3.0のunsquashfsで展開しようとしたらバージョンが違うと 怒られたので,2.2で試す.2.2の展開プログラムは存在 しないので,squashfs3.0のunsquashfsのソースを2.2を 見ながらクイックハック.
結局,色々と変なツールを書いているな….まぁコピペしながら 組み合わせてるだけだけど.
展開してみると,普通にLinuxのファイルシステムが1セット出てきました.
BusyBoxが入ってますね.
telnetdとかも入ってます. インターフェイスにphpって拡張子を使ってますが, 本当にphpっぽい? 色々なところで/dev/consoleにメッセージを出してるな…. ばらしてみればコンソールをつなげられるかも.
ご利用は計画的に.