HD-LAN V2 のファームウェア


ハックキット関連から「HD-LAN は対応してません」を消したのはいいけれど、 いまいち自信がないので、 HD-LAN V2 のファームウェアがどうなっているのかを確認する。

ファームウェアのダウンロード

Buffaloから、hdlan213a.exe をダウンロードしてきて、 実行すると、HD-LAN FWUpdate.exe と README.TXT が作成された

ダンプ

いつものように strings。
ファームウェアアップデータは、差分である hdlan_diffimg.tar.gz が入っているだけだと思っていたのだが、、、
[yasunari@giga hdlan213a]$ strings HD-LAN\ FWUpdate.exe | less
	:
FIRMWARE
\firmimg.bin
\hdlan_version.txt
\hdlan_diffimg.tar.gz
	:
予想通り、hdlan_version.txt と hdlan_diffimg.tar.gz という 文字列が見えるのだが、その前に firmimg.bin も見える。
[yasunari@giga hdlan213a]$ strings HD-LAN\ FWUpdate.exe | less
	:
HD-LAN(IEYASU)
FLASH 1.1
vmlinux
	:
といういつもの並びも見える。

ところが、hdlan_diffimg.tar.gz が入っている形跡が見えない。
gzip してあるファイルなら、0x1f8b というマジックナンバーがあって、 その 10 バイト後に hdlan_diffimg.tar という文字列があるはずなのだが、、、

firmimg.bin の取り出し

とりあえず、firmimg.bin を取り出す。
firmimg.bin の先頭は、8進20017240 なので10進で 4202144、 HD-LAN FWUpdate.exe のサイズが 7258112 なので 4202144 を引いた 後から 3055968 バイトを取り出す。
[yasunari@giga hdlan213a]$ tail -c 3055968 HD-LAN\ FWUpdate.exe > firmimg.bin
続いて、ファームウェア取り出しツールにかける
[yasunari@giga hdlan213a]$ /home/linkstation/getfirm/getfirm firmimg.bin
info_ver 00000001
firmid 00000002
firmname HD-LAN(IEYASU)
subver FLASH 1.1
ver_major 0002
ver_minor 000d
build 0000
date 6805 1215 1613
size 002e96bb
chksum d83a6a1a
kernel_offset 0000006c(108)
kernel_size 000b8ede(757470)
initrd_offset 000b8f4a(757578)
initrd_size 00230771(2295665)
「家康」なら、私でもわかるぞッと。
FirmID は予想通り2。

ramdisk.image.gz を展開する

[yasunari@giga hdlan213a]$ ls -l
合計 20080
-rwxrw-r--    1 yasunari root      7258112 May 31 16:09 HD-LAN FWUpdate.exe*
-rwxrw-r--    1 yasunari root         8364 May 31 16:26 README.TXT*
-rwxrw-r--    1 yasunari root      3055968 Jul  1 22:21 firmimg.bin*
-rwxrw-r--    1 yasunari root      7138237 Jul  1 22:11 hdlan213a.exe*
-rw-r--r--    1 yasunari root      2295665 Jul  1 22:21 ramdisk.image.gz
-rw-r--r--    1 yasunari root       757470 Jul  1 22:21 vmlinux.gz
[yasunari@giga hdlan213a]$ gunzip ramdisk.image.gz
[yasunari@giga hdlan213a]$
[yasunari@giga hdlan213a]$ su
Password:
[root@giga hdlan213a]# mkdir root
[root@giga hdlan213a]# mount -o loop ramdisk.image root
[root@giga hdlan213a]# cd root
[root@giga root]# ls
bin  dev  etc  lib  lost+found  mnt  mnt2  proc  root  sbin  tmp  usr  var  www
[root@giga root]# tar zcvf ../root.tar.gz .
./
./lost+found/
./bin/
  :
  :
[root@giga root]# cd ..
[root@giga hdlan213a]# umount root
[root@giga hdlan213a]# cd root
[root@giga root]# tar zxvf ../root.tar.gz
./
./lost+found/
./bin/
  :
  :

hdlan_diffimg.tar.gz

上には、hdlan_diffimg.tar.gz が入っている形跡が見えない と書いたが、、、、
gzip hdlan_diffimg.tar とファイルを gzip したならファイル名が残るが、 tar zcvf hdlan_diffimg.tar.gz と パイプからファイルを与えて gzip したなら ファイル名が残らないはず。
そうなると、HD-LAN FWUpdate.exe から gzip のマジックナンバ 0x1f8b を探して その後ろを gunzip してみれば良いと考えた。
0x1f8b って、HD-LAN FWUpdate.exe 内にいったいいくつあるんだろう???

と途方にくれていたが、、、、

[yasunari@giga hdlan213a]$ strings HD-LAN\ FWUpdate.exe | less
	:
FIRMWARE
\firmimg.bin
\hdlan_version.txt
\hdlan_diffimg.tar.gz
	:
と、 hdlan_version.txt と hdlan_diffimg.tar.gz とが 並んでいるので、hdlan_version.txt の近くにあるのではないだろうか。
2.13 をキーワードに探す。
[yasunari@giga hdlan213a]$ od -xc HD-LAN\ FWUpdate.exe | less
	:
	:
0164500 0000 0000 2573 2056 6572 2573 0000 0000
         \0  \0  \0  \0   %   s       V   e   r   %   s  \0  \0  \0  \0
0164520 322e 3133 6100 0000 5753 4149 6f63 746c
          2   .   1   3   a  \0  \0  \0   W   S   A   I   o   c   t   l
0164540 0000 0000 5753 4153 6f63 6b65 7441 0000
         \0  \0  \0  \0   W   S   A   S   o   c   k   e   t   A  \0  \0
これは違う
0235400 0000 0100 0000 0000 5052 4f44 5543 544e
         \0  \0 001  \0  \0  \0  \0  \0   P   R   O   D   U   C   T   N
0235420 414d 453d 4844 2d4c 414e 2849 4559 4153
          A   M   E   =   H   D   -   L   A   N   (   I   E   Y   A   S
0235440 5529 0a56 4552 5349 4f4e 3d32 2e31 330a
          U   )  \n   V   E   R   S   I   O   N   =   2   .   1   3  \n
0235460 5355 4256 4552 5349 4f4e 3d48 4444 2032
          S   U   B   V   E   R   S   I   O   N   =   H   D   D       2
0235500 2e30 2853 4a49 5329 0a50 524f 4455 4354
          .   0   (   S   J   I   S   )  \n   P   R   O   D   U   C   T
0235520 4944 3d30 7830 3030 3030 3030 320a 4255
          I   D   =   0   x   0   0   0   0   0   0   0   2  \n   B   U
0235540 494c 4444 4154 453d 3230 3034 2f30 352f
          I   L   D   D   A   T   E   =   2   0   0   4   /   0   5   /
0235560 3235 2030 393a 3431 3a31 320a 0000 0000
          2   5       0   9   :   4   1   :   1   2  \n  \0  \0  \0  \0
0235600 1f8b 0800 2896 b240 0003 ec9a 0bbc e653
        037 213  \b  \0   ( 226 262   @  \0 003 354 232  \v 274 346   S
これだぁ!。思ったとおり、0235600 には 1f8b も見える。
8進の 235600 は10進で 80768。 HD-LAN FWUpdate.exe のサイズが 7258112 なので 80768 を引いた 後から 7177344 バイトを取り出す。
[root@giga hdlan213a]# tail -c 7177344 HD-LAN\ FWUpdate.exe | tar ztvf -
drwxr-xr-x root/root         0 2003-08-08 15:51:28 ./
drwxrwxr-x root/root         0 2004-05-17 13:15:25 ./bin/
	:
	:
./var/dhcp/

gzip: stdin: decompression OK, trailing garbage ignored
tar: 子プロセスがシグナル 13 で終了しました
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました
よーし。
ハックの記録 → HD-LAN V2 のファームウェア(2)

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