WZR-HP-G450H のファムウェアアップデータを分解する手順を調べたのでメモ.
使用ツール
- OpenWrt の buffalo-enc.c
- firmware-mod-kit の unsquashfs-lzma
- binwalk
buffalo-enc
$ cd $ git clone git://git.openwrt.org/openwrt.git --depth 1 $ cd openwrt/tools/firmware-utils/src $ gcc -o ~/buffalo-enc buffalo-enc.c buffalo-lib.c
unsquashfs-lzma
$ cd $ git clone https://github.com/mirror/firmware-mod-kit.git --depth 1 $ cd firmware-mod-kit/src/others/squashfs-4.0-lzma $ make $ cp unsquashfs-lzma ~
分解する
$ cd $ unzip -x wzrhpg450h-188.exe $ cd wzrhpg450h-188 $ grep -abo start wzr_hp_g450h_jp_188 20:start 208:start $ tail -c+209 < wzr_hp_g450h_jp_188 > b1.bin $ ~/buffalo-enc -d -i b1.bin -o b2.bin Magic : 'start' Seed : 0xec Product : 'WZR-HP-G450H' Version : '1.88' Data len : 21651456 Checksum : 0x20bd9f5c $ binwalk b2.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 uImage header, header size: 64 bytes, header CRC: 0x5AF62ABA, created: Thu Jan 21 17:59:24 2016, image size: 21651392 bytes, Data Address: 0x80002000, Entry Point: 0x8020A9F0, data CRC: 0x95476FBA, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "Linux Rootfs Combined Image" 64 0x40 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2873876 bytes 1048576 0x100000 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 20599552 bytes, 4063 inodes, blocksize: 131072 bytes, created: Thu Jan 21 17:59:22 2016 $ tail -c+1048577 < b2.bin > b3.bin $ ~/unsquashfs-lzma b3.bin
所感
重要なバイナリの多くが /bin/busybox
か /bin/rc
へのシンボリックリンクになっている. GPL に感染しているコードは
http://opensource.buffalo.jp/gpl_wireless.html
で公開されていて, /bin/busybox
もこれに含まれているが,
プラットフォーム固有の機能, 特に /www/cgi-bin/*
の実体である
/bin/rc
は含まれていないようだ.
例えば /etc
下のいくつかのファイルは /tmp
下へのシンボリックリンクになっていて,
推測であるが, /bin/rc
内にコードされているデータをシステム起動時にそこへ書き出す仕様になっているようだ.
今回, この簡単な調査を行った動機としてファームウェアバージョン 1.88
において一部界隈で有名な bufpy アカウントにアクセスできなくなった問題があり,
パスワードが変更されただけなら調べられるだろうと思ったのだが, どうやら
/bin/rc
にハードコードされていた bufpy アカウントの設定がまるごと削除されたらしく,
どうにもならないことがわかった.
なおファームウェアは通常のアップデートと同じ手順で旧バージョンを食わせればダウングレード可能だが, 設定が吹き飛ぶので注意されたい.