ファームウェア アップデータ Ver.1.31 の解析


ファームウェア アップデータ Ver.1.31 を解析する

hlan131.exe を実行すると、

2003/09/09  17:27         3,006,967 FIRMIMG.BIN
2003/12/08  18:34           106,496 HD-HLAN FWUpdate.exe
2003/12/10  11:12        33,012,806 IMAGE.DAT
2003/12/08  09:32                13 linkstation_version.txt
2003/12/08  19:09             6,832 README.TXT
が復元される
おそらく、
  • FIRMIMG.BIN (ファームイメージ.バイナリ)が FLASH ROM に書かれるカーネル
  • IMAGE.DAT が / からのファイル一式
    であろう

    なお、ファームウェア アップデータ Ver.1.30 は、

    2003/09/09  17:27         3,006,967 firmimg.bin
    2003/09/11  13:08           106,496 HD-HLAN FWUpdate.exe
    2003/09/10  10:56        32,804,895 IMAGE.DAT
    2003/09/09  11:07                13 linkstation_version.txt
    2003/09/11  16:46             6,053 README.TXT
    
    であった。
    firmimg.bin が 1.31 では英大文字になっているのと、 IMAGE.DAT のサイズが変わっている。
    バイナリで比較してみると、
  • firmimg.bin とFIRMIMG.BIN とはファイル名の大文字/小文字以外の差なし
  • HD-HLAN FWUpdate.exe はサイズは同じだが 249 バイト目あたりに差あり
    であった。

    FIRMIMG.BIN

    先日
    linkstatinVine# cat /dev/fl1 > /tmp/fl1
    
    して作成した /tmp/fl1 と同じであることを予想したが、 サイズからして違う。
    ただ、
    linkstatinVine# strings /tmp/fl1 | head
    HD-HLAN(PLUS)
    FLASH 2.2
    vmlinux
    iNx(
    M       u*
    kIRuM
    ~bqJ
    lbM u
    cmoF
    DpM*
    
    linkstatinVine# strings FIRMIMG.BIN | head
    HD-HLAN(PLUS)
    FLASH 2.2
    vmlinux
    iNx(
    M       u*
    kIRuM
    ~bqJ
    lbM u
    cmoF
    DpM*
    
    との結果が同じなので、
    FIRMIMG.BIN に何らかの加工をした後 /dev/fl1 に書き込めばよいのであろう。

    /tmp/fl1 のサイズの 3145728 は16進で 300000、 つまり、FLASH ROM 全体が cat されただけで、 そのサイズに意味はないのかもしれない。
    また、FIRMIMG.BIN のサイズは 3006967 であるが、 /tmp/fl1 の先頭から3006967 バイトを切り出して比較

    linkstatinVine# head -c 3006967 /tmp/fl1 > /tmp/f
    linkstatinVine# cmp /tmp/f FIRMIMG.BIN
    
    とすると差は出ないので、 単に FIRMIMG.BIN を /dev/fl1 に書くだけなのかも。

    linkstatinVine# od -xc FIRMIMG.BIN | less
    
    していて、気が付いた。
  • 先頭4バイトが1
  • 続く4バイトが3
    1.30 をあらわすバージョン番号か? でも、では、1.31 だったらどうあらわすのか???

    109 バイト目に、gzip ファイルのマジックナンバである 0x1f8b が あるのにも気が付いた。
    119 バイト目からは vmlinux の文字が見えるので、 圧縮された vmlinuz に違いない。
    109 バイト目以降を取り出してみる

    linkstatinVine# tail -c 3006859 FIRMIMG.BIN > vmlinuz
    linkstatinVine# file vmlinuz
    vmlinuz: gzip compressed data, was "vmlinux", from Unix, max compression
    
    ついに Flash ROM (に書き込まれるイメージと思われるもの)から カーネルを取り出せた。

    ただし、書き込み方の詳細は、相変わらず不明。
    書き込み試して起動不能になっても困るし、 Flash ROM だから書くにもそれなりに手順が必要だろうし。
    おそらく ap_servd がやってるように TTTT / UUUU を AVR に送る事によって Flash ROM 書き込めるようになるんだろうけど。

    IMAGE.DAT

    tar でも、tar + gzip でもないようである。
    残るは、zip か lzh, cpio か、、、
    unzip を試してみる
    linkstatinVine# unzip IMAGE.DAT
    Archive:  IMAGE.DAT
    [IMAGE.DAT] tmpimage.tgz password:
    
    と zip フォーマットであるようだ。ただしパスワードがかかっている
    パスワードは、、、予想通り
    linkstatinlinux# strings /usr/sbin/ap_servd
    
    を実行すると、書いてあった。
    再度 unzip する。
    linkstatinVine# unzip IMAGE.DAT
    Archive:  IMAGE.DAT
    [IMAGE.DAT] tmpimage.tgz password:
      inflating: tmpimage.tgz
    
    無事取り出すことができた。

    linkstatinlinux# tar ztvf tmpimage.tgz
    
    を実行する。予想通り / からのファイルたちそのものが収められていた。

    lib/modules 以下は、

    drwxr-xr-x root/root         0 2003-09-05 19:53:27 ./lib/modules/
    drwxr-xr-x root/root         0 2003-09-05 16:29:26 ./lib/modules/2.4.17_mvl21-sandpoint/
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/scsi/
    -rw-r--r-- root/root    103442 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/scsi/scsi_mod.o
    -rw-r--r-- root/root     21308 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/scsi/sd_mod.o
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/
    -rw-r--r-- root/root    106614 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/usbcore.o
    -rw-r--r-- root/root     29476 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/usb-ohci.o
    -rw-r--r-- root/root     12680 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/printer.o
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/hcd/
    -rw-r--r-- root/root     26748 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/hcd/ehci-hcd.o
    drwxr-xr-x root/root         0 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/storage/
    -rw-r--r-- root/root     35665 2003-09-05 16:29:25 ./lib/modules/2.4.17_mvl21-sandpoint/kernel/drivers/usb/storage/usb-storage.o
    lrwxrwxrwx root/root         0 2003-11-20 11:59:00 ./lib/modules/2.4.17_mvl21-sandpoint/build -> /home/toda/nas_project/hd-hlan/1.30/kernel_melext3
    drwxr-xr-x root/root         0 2003-09-05 16:29:26 ./lib/modules/2.4.17_mvl21-sandpoint/pcmcia/
    
    となっていて、1.30 となんら変わりはない。

    Link Station Linux のカーネル、カーネルモジュールしか使用していない私にとっては、 このアップデートは必要ないようである。

    ところで、あちらこちらに出てくる toda って何だ?
    埼玉県戸田市にBUFFALOの事業所は無いようだし、 開発担当の方のお名前か???


     BUFFALO Link Station をハックしよう  → バックアップ
    Copyright (C) 2003 Yasunari Yamashita. All Rights Reserved.
    yasunari @ yamasita.jp
    山下康成京都府向日市