ファームウェアの構造


MeoBank SD の ファームウェアアップデータ RTL819X SDK の fw.bin がよく似ていることを見つけた。

root.bin/linux.bin/webpages-gw.bin をどうやって1ファイルにまとめて いるかを探す。

rtl819x.tar.gz の展開

yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3$ tar zxvf rtl819x.tar.gz
	:
	:

fw.bin を作っているところを探す

探し物にはもちろん grep
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3$ cd rtl819x
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ grep fw.bin *
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ grep fw.bin */*
target/Makefile:FW_BIN = image/fw.bin
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$
これだ。

target/Makefile を見る

yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ cd target
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x/target$ less Makefile
	:
	:
    $(MGBIN) -c -o $(FW_BIN) $(ROOT_BIN) $(WEBPAGE_BIN) $(LINUX_BIN); \
	:
	:
MGBIN は、
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x/target$ grep MGBIN Makefile
MGBIN = $(DIR_USERS)/boa/tools/mgbin
MGBIN = $(DIR_USERS)/goahead-2.1.1/LINUX/mgbin
        $(MGBIN) -c -o $(FW_NOWEB_BIN) $(ROOT_BIN) $(LINUX_BIN);
                        $(MGBIN) -c -o $(FW_BIN) $(ROOT_BIN) $(WEBPAGE_BIN) $(LINUX_BIN); \
                                $(MGBIN) -c -o $(FW_BIN) $(ROOT_BIN) $(WEBPAGE_BIN) $(LINUX_BIN); \
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x/target$
tools にあるようだ。

mgbin を見る

 
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x/target$ cd ..
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ ls users/boa/tools/
Makefile  compweb.c  cvcfg.c  cvimg.c  mgbin.c  ramdisk.c
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$
がー。Cで書いてあるみたい。

見てみる

yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ less users/boa/tools/mgbin.c
ヘッダは、IMG_HEADER_T で、その定義は apmib.h に有りそう。

apmib.h をみる。

apmib.h は
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ ls users/boa/apmib/apmib.h
users/boa/apmib/apmib.h
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$
見てみる
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ less !$
	:
	:
/* Firmware image file header */
typedef struct img_header {
        unsigned char signature[SIGNATURE_LEN];
        unsigned int startAddr;
        unsigned int burnAddr;
        unsigned int len;
}__PACK__ IMG_HEADER_T, *IMG_HEADER_Tp;

SIGNATURE_LEN は、
#define SIGNATURE_LEN                   4

ヘッダを見る

fw.bin の先頭
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ od -xc image/fw.bin |head -4
0000000    3677    6763    0100    0000    0100    0000    0100    c4db
          w   6   c   g  \0 001  \0  \0  \0 001  \0  \0  \0 001 333 304
0000020    5a42    3968    4131    2659    5953    9ce0    5df8    a905
          B   Z   h   9   1   A   Y   &   S   Y 340 234 370   ] 005 251
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$
img_header にあてはめてみる。

signature が "w6cg" これは

#define WEB_HEADER			((char *)"w6cg")

startAddr が 0100 0000
これはリトルエンディアン??

burnAddr も 0100 0000

len は 0100 c4db
webpages.bin のサイズは、、、

yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ ls -l image/webpages.bin
-rw-r--r-- 1 yasunari yamasita 121812 Jan  4 18:04 image/webpages.bin
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$ od -xc !$ | head -4
od -xc image/webpages.bin | head -4
0000000    3677    6763    0100    0000    0100    0000    0100    c4db
          w   6   c   g  \0 001  \0  \0  \0 001  \0  \0  \0 001 333 304
0000020    5a42    3968    4131    2659    5953    9ce0    5df8    a905
          B   Z   h   9   1   A   Y   &   S   Y 340 234 370   ] 005 251
yasunari@vl:/mnt/share/rtl819x-SDK-v3.2.3/rtl819x$
121812 バイト = 0x1dbd4 ということは、ヘッダの 0x10 を考慮すると、
ABCD EFGH -> 0x CDABGHEF となるか、、、

では、startAddr/burnAddr の 0x10000 って何?


MeoBankSD

楽天市場
amazon

←(前のページ)
ファームウェアと RTL819X SDK
当月のハックの記録
MeoBankSD をハックしよう トップ
(次のページ)→
ファームウェアの展開

ツイート Tweet to @yasunari_y @yasunari_yをフォロー

Copyright (C) 2003-2013 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市