Sirius -旧ブログ、更新されません-

2010年10月13日の記事

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
Sirius -旧ブログ、更新されません-

MySketch 2.7.2 written by 夕雨