Sirius

2010年10月13日(水) 23:31

NPAD のファームウェアを分解してみる。

NPAD も持っています。

NPAD のファームもいくつか手に入れることができるようになったのでファームの中の tcc8900_mtd.img を分解してみます。

必要なもの。
 tccutils
 mkbootimg
 mkyaffs2
 split_bootimg.pl
 それぞれどこから落としたのか忘れたので探してください。
 私は、x64 な Linux で作業したので全部コンパイルしました。

1、ソースの修正
 mkbootimg は pagesize がソースの中で 2048 固定となっています。
 NPAD のファームを見ると pagesize は 4096 のようなので修正します。
 また、ハッシュの計算に sha を使っているようなので、sha.h や sha.c も必要でした。

 mkyaffs2 の unyaffs.c もlchmod 関数とかでメッセージが出るので修正しました。

2、tcc8900_mtd.img の展開
 tccutils の tccunpack を使うと、boot.img, system.img recovery.img を取り出すことができます。

 $ tccunpack tcc8900_mtd.img

2−1、system.img の展開
 mkyaffs2 の unyaffs を使って展開できます。

 $ mkdir system
 $ cd system
 $ unyaffs ../system.img

2−2、boot.img, recovery.img の展開
 boot.img と recovery.img は同じ構造をしています。
 split_bootimg.pl を使うことで、カーネルとラムディスクを取り出すことができます。

 $ split_bootimg.pl boot.img
 $ split_bootimg.pl recovery.img

 boot.img-kernel, boot.img-remdisk.gz, recovery.img-kernel, recovery.img-ramdisk.gz ができます。

2−2−1 ラムディスクイメージの展開
 ここでは、boot.img のラムディスクを展開しますが、recovery.img も同様です。
 cpio でアーカイブしたものを gzip 圧縮しているだけなので次のようにして展開できます。

 $ mkdir ramdisk
 $ cd ramdisk
 $ zcat ../boot.img-ramdisk.gz | cpio -i

boot.img のラムディスクがルートファイルシステム、system.img が /system なので、ここで展開したものを修正してカスタムファームウェアを作成することもできるようです。
展開したイメージからファームウェアを作成する方法はまた今度説明します。

なお、エンディアンが違うとうまくいかない場合があるようです。x86 ではそのままで大丈夫なようですが、玄箱(PowerPC)でやってみたら、system.img の展開ができないようです。
また、ファームはこのあたりにあります。

written by sirius [Android] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Sirius

MySketch 2.7.2 written by 夕雨