Sharp PDA - [05] updater.sh

はじめに

Zaurus のカーネル、ルートファイルシステムをメンテナンスメニューを使用してアップデートする場合に、 updater.sh ファイルを使用する。最初はシェルスクリプトなのかと思ったのだが、 中を開くとバイナリデータなので、暗号化されているか、CPU で実行可能なファイル、 あるいはなんかのデータかと思っていた。でも、メンテナンスメニューから、アップデートを選択すると、 mtd1 の中の 2nd Kernel (Maintain Kernel) が起動し、そのカーネル上でアップデートが行われることを知ったので、 Maintain Kernel で起動して、そのときに使用されるルートファイルシステム (mtd1 の中の INITRD.GZ) の中を調べることにした。

updater.sh ファイルの正体

Maintain Kernel で起動し、ログインすると通常使用するルートファイルシステムにはない、/etc/update というディレクトリがあり、 その中には update、update.sample、update_cf、update_sd、update_usb のシェルスクリプトファイルがあった。
update シェルスクリプトファイルの中を見てみると、アップデート方法により、update_cf、update_sd ファイルが実行されるらしいことがわかる。 そこで、update_cf ファイルの中を見てみると、/sbin/decsh というコマンドを使用して、ファイルをデコードしている行があった。
ためしに、カーネル、ルートファイルシステムのアップデート時に使用する、updater.sh ファイルを /sbin/decsh にかけてみると、 updater.sh ファイルは普通のシェルスクリプトファイルにデコードされた。

updater.sh ファイルの処理としては、アップデート対象の Zaurus の機種判別を行ったのち、zImage、initrd.bin、mversion.bin ファイルに対して、対象ファイルがある場合に、eraseall、nandlogical、nandcp、verchg コマンドなどを使用して、内蔵 Flash へ書き込みを行っている。

updater.sh のデコード、エンコード方法

updater.sh ファイルのデコードは、/sbin/decsh を使用すれば良い。decsh のソースコードはないが、updater.sh ファイルのエンコード前のファイルと デコード後のファイルから、暗号化の方法は、単なる文字置き換えアルゴリズムを使用しているらしいので、エンコード、デコードをするためのプログラムを作った。 ダウンロード(「endecsh.c」をダウンロード )
デコードした updater.sh ファイルを転載するのも問題があるかもしれないので、各自で updater.sh ファイルをデコードして、中の処理を見てみるのも良いだろうかと思う。