BLR3-TX4をシリアルポート無しでいけるところまでやる 
Sunday, August 5, 2012, 02:30 PM - OS / Misc
Posted by Administrator
BLR3-TX4で遊ぶ
ぶろぐの内容は実際と時系列的に逆になってしまうが、ここまでの流れは……

・pfsenseでUT-VPNを動かす→想定した動作と異なる、BSDでは完全ではないっていうか色々バグってる
・linuxでは完全、OpenWRTなら簡単に動くだろう→動く
・余ってるBLR3-TX4にOpenWRTを入れれるといいなあ

BLR3-TX4はお得意の192.168.11.1もwebからもファームの更新ができない
ようわからん専用のアップデータを使う必要がある
例外はこういう基盤改造とまではいかないが、H/W的なもの
生憎こういうのはちょっと手持ちがない

この専用のアップデータはどうもここによるとバイナリが丸ごと埋め込まれているだけなので簡単に取り出せるらしい

適当に取り出してみる
$ perl -e '($b=join(undef,<STDIN>));print substr($b,index($b,"BLR3-TX4")-8)' <blr3f145.exe >BLR3F145.bin
と。凄く投げやりな方法だが問題なさげ

次は展開
ここを参考にしてコードを書いてみる

書いた……が、展開したファームを書き換えて作り直さないとならないのだが、チェックサムの計算方法がわからない
どーしたもんかな、と調べてみると……

なんと7年も前に完成品がここに転がってた、ワロタ
完成品があるならコードを書くのは馬鹿馬鹿しい限りなので、これを使わせてもらうことにする
が……64bitだとSegmentation faultで死んでしまう
またバッファサイズが不足して動かないので書き換える必要がある
$ wget http://www.geocities.jp/trstat/firmimgtool.c
$ sed -i 's/^\(\#define MAXSIZE\).*/\1 10485760/' firmimgtool.c
$ gcc -o firmimgtool firmimgtool.c


Telnetを使えるように弄る
$ gunzip wlmr_loopfiles.gz
$ mkdir image
$ sudo mount -o loop wlmr_loopfiles image
$ sudo sed -i 's/^#\(telnet\)/\1/' image/etc/inetd.conf
$ sudo umount image
$ gzip -9 wlmr_loopfiles
$ ./firmimgtool -m -k vmlinux.gz -r wlmr_loopfiles.gz -f BLR3F145.bin BLR3F145.bin.new


若干危惧していたが、やはりこのまま.exeに埋め込んでもうまく動かない
ポインタ的なものがめちゃくちゃになって不正終了する始末
自前のアップデータで転送する方法もやってみた
UDP22360へ何か送った後にTCP22360へファームをそのまま転送しているのはわかったが、結局UDP22360へ送る"何か"が毎回変動してこれがよくわからなかった

しかしよく考えてみれば.exeへ埋め込む方法が失敗するのはwlmr_loopfiles.gzが大きいため、何かポインタ的なものがおかしくなっているから
なので小さい分には特に問題にならないんじゃないかと、容量を削る策をとるがこれもうまくいかない
そこで……
$ ls -al *.EXE
-rw-r--r-- 1 a a 6234112 May 13 2004 BLR3F141b.EXE
-rw-rw-r-- 1 a a 6180864 May 11 2005 BLR3F145.EXE

1.45のファームを改造して1.41bの.exeに乗せて転送する案

$ (perl -e '($b=join(undef,<STDIN>));print substr($b,0,index($b,"BLR3-TX4")-8)';cat BLR3F145.bin.new) <BLR3F141b.EXE >BLR3F141b.EXE_mod.exe
$ ls -al BLR3F141b.EXE BLR3F141b.EXE_mod.exe
-rw-r--r-- 1 a a 6234112 May 13 2004 BLR3F141b.EXE
-rw-rw-r-- 1 a a 6187115 Aug 4 03:14 BLR3F141b.EXE_mod.exe

6234112 - 6187115なので46997付け足せば完璧
$ tail -c 46997 BLR3F141b.EXE >>BLR3F141b_mod.exe
で、最後にバイナリエディタで0x0000E1E4からの007A255Eを新しいファームのサイズに書き換える
今回の場合はAB7A5D00だった
これでアップデータがうまく動き、Telnetが使用可能なBLR3-TX4になった
以後ファームはddで/dev/fl1に書き込むだけでよい

……と調子にのってBLR3-TX4->WHR-G54->DD-WRTとwlmr_loopfiles.gzを色々弄ったら文鎮になった
シリアルがないのでここで終わり

ちなみにWHR-G54は正常に動かなかった、無線がないからかもしれないがwebconのcgiがクラッシュしている
DD-WRTはrootfsをwlmr_loopfiles.gzに乗せるだけでいけるかな、と思ったがそうでもなかった
add comment ( 1405 views )   |  permalink

<<First <Back | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Next> Last>>