LoginSignup
3
2

普通のルーターへの戻し方

Last updated at Posted at 2018-08-23

DD-WRTとかZRouterでルーターのファームを書き換えた後に、何らかの事情で元に戻したい場合があるかもしれません。猛牛さんのルーターを戻してみたので、そのやり方を書いてみます。私はFreeBSDで操作してますが、おそらくLinuxでも同じようにできるのではないかと思います。

とりあえずメーカーのサイトからファームをダウンロードして展開しておきます。

u-boot編

猛牛さん仕様のフォーマットはブロックがstartで始まるようなのでまずその間所を確認します。

bufimage.png

% strings -t d wzr2g300n_155 | grep start
    156 start
 509264 start

この場合、一つ目がLinuxカーネルで二つ目がrootfsです。

まずカーネルを抜き出してみます。buffalo-encというツールを使います。抜き出し開始位置は上で調べた値+1になります。

% tail -c+157 wzr2g300n_155 > kernel.org
% ./buffalo-enc -d -i kernel.org  -o kernel.bin
Magic       : 'start'
Seed        : 0x6e
Product     : 'WZR2-G300N'
Version     : '1.55'
Data len    : 509069
Checksum    : 0x511e7aa0

startの位置からデータを抜き出して、それをbuffalo-encで変換します。後ろにrootfsが付いていますが、それは変換しないようです。

encriptのキーはデフォルトはBuffaloになっていますが、モデルによっては別のものになっていて、展開できない事があります。

[buffalo-enc] *** error: unable to decrypt

続いてrootfsを戻してみます。

% tail -c+509265 wzr2g300n_155 > rootfs.org
% ./buffalo-enc -d -i rootfs.org  -o rootfs.bin
Magic       : 'start'
Seed        : 0x6e
Product     : 'WZR2-G300N'
Version     : '1.55'
Data len    : 1867776
Checksum    : 0x0d76fc1d

カーネルとrootfsをつなげたものがイメージになるのですが、カーネルの最後の方にはFlashのブロックサイズに合わせてパディングされています。

uimage.png

パディングされたlinuxのパティションのサイズが分からなければ、一度kernel.binをメモリに貼り付けて起動してログを確認してみます。

Creating 7 MTD partitions on "5VT13XX_mapped_flash":
0x00000000-0x0000e000 : "uboot"
0x0000e000-0x00010000 : "uboot_environ"
0x00010000-0x000c0000 : "linux"
0x000c0000-0x003d0000 : "rootfs"
0x003d0000-0x003e0000 : "user_property"
0x003e0000-0x003f0000 : "factory_default"
0x003f0000-0x00400000 : "nvram"

たまにu-bootの環境変数にパーティションのデータが入っているケースもありますが、間違っている場合もかなりあります。

このターゲットではlinuxパーティションは704K(0xb0000)とってあるので、カーネルファイルをその大きさに変えます。

% dd if=kernel.bin of=kernel.sync bs=704k conv=sync

これでカーネルとrootfsをひっつけて出来上がりです。

% cat kernel.sync rootfs.bin > original.img
% file original.img
original.img: u-boot legacy uImage, Linux-2.4.20_mvl31-5VT9000-MPW1, Linux/ARM, OS Kernel Image (lzma), 509005 bytes, Wed Dec  9 09:41:56 2009, Load Address: 0x40008000, Entry Point: 0x40008000, Header CRC: 0x6027AB9F, Data CRC: 0xEF277621

original.imgをu-bootで焼けば元通りです。

CFE編

Broadcomの初期のSOCを使ったモデルを戻してみました。このターゲットはCFEというブトローダーを使用しています。メーカーからダウンロードできるfirmwareは以下のようなヘッダーが付いています。

$ hexdump -c wbrbg_223.dms
0000000   W   B   R   -   B   1   1       2   .   2   3       1   .   0
0000010   1   _   K   o   p   t  \n   f   i   l   e   l   e   n   =   3
0000020   1   0   0   6   7   2  \n   H   D   R   0  \0   P   /  \0   ?

これを落としてHDRから始まるCFEのTRXといわれる形式にします。

$ dd if=wbrbg_223.dms of=wbr.trx bs=1 skip=39

これをこの方法で焼くと元に戻ります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2