目次
初めに
分解なしでインストールが可能です。
以前にURoad-Home2+(URoad-TEC101)へのOpenWRTのインストール方法(U-Boot経由)というURoad-Home2+にOpenWRTをインストールする方法を書きましたが、それから、コマンドインジェクションの方法などを発見したので、分解無しでインストールできるようになりました。今回はその方法の解説です。
OpenWRTのビルドの記録や細かい解説はURoad-Home2+を分解してみた7~OpenWRTの作成~を見てみてください。
URoad-Home関係の記事の一覧と概要はこちら
ダウンロード
カーネルモジュールはこちら。
ビルドの出力物(ファームウェア・SDK・toolchain)は全てこちらの中に入っています。
ソースコードはこちらから。2023/08/20時点でのLast Releaseの22.03.5です。
事前準備
Windowsでの操作を前提として説明します。
・FireFoxのインストール
コマンドインジェクションで使用します。
・TeraTermのインストール
ファームウェアのインストールに使用します。
・3CDaemon
ファームウェアのバックアップ、送信に使用します。任意のFTP、TFTPサーバーで大丈夫です。
・有線LAN
URoad-Home2+とPCを有線LANで接続してください。
手順
1. コマンドインジェクション
URoad-Home2+を分解してみた9~コマンドインジェクションを使用したroot権限奪取とファームウェアダンプ~
と同じ手順です。
1-1. FirefoxでWeb管理者画面に入る
Firefoxで192.169.100.254にアクセスします。ユーザはadmin、パスワードはURoad-Home2+の裏に書いてあるKEYです。
FireFoxで開くのは、Web開発ツールが使いやすいからです。
1-2. Web開発ツールを開く
開いたあとネットワークのタブを開いてください。
1-3. URoad-Home2+の設定のファイアウォール→コンテンツフィルタ設定で適当なものを送る
設定済みURLフィルタで送った文字が出てたら問題ないです。
1-4. Web開発ツールで送られたパケットを見つける
流れていくのが早いので頑張って探してください。3を実行した直後にロギングの停止をした方がいいと思います。ファイルの欄がwebsURLFilterになっているはずです。見つけられなかったら、再び1-3を実施してください。
1-5. パケットを編集の画面を開く
見つけたものを右クリックして、「編集して再送信」を押します。
1-6. セッションキーを見つける
Web開発ツールのデバッガーのタブを開きます。
http://192.168.100.254/usr/web/usr/jp/firewall/content_filtering.asp?tv=46027
みたいなフォルダ(最後の46027の部分は違うかも)を展開していくとcontent_filtering.asp?tv=46027というファイルを見れます。この中の10行目var gSession_Key = "06A5EE6414330624";
がセッションキー(SessionKey)です。メモしておいてください。ちなみに、ページをリロードするたびに変わるので注意してください。
1-7. パケットを書き換えて再送する
ネットワークのタブに戻って、5で現れた左側トレイにある、ボディを書き換えます。
addURLFilter=;sed -i 's/root:x:/root::/g' /etc/passwd;telnetd;&SessionKey=先程メモしたセションキー
そしたら送信を押します。セッションキーのところは数字のみを入れてください。もし、セッションキーが誤っていると400 Page not foundが帰ってきます。(なぜ?400 Bad Requestか404 Not Foundだと思うけど…) 再度1-6を実行してセッションキーを取得しましょう。
1-8. Telnetの接続
TeraTermを使って192.168.100.254にtelnetで接続します。rootでログインができれば成功です!接続ができない場合は、どこかで手順を間違えています。
2. ファームウェアのバックアップ
もとからインストールされているファームウェアのバックアップをします。
2-1. 3CDaemonでTFTPサーバを立てる
TFTP Serverを選択してConfigure TFTP Serverで適当なフォルダを指定してGOを押してサーバーをスタートさせます。
2-2. 自身のIPアドレスを覚える
PCのURoad-Home2+との接続に使用しているインターフェースのIPアドレスを覚えてください。
192.168.100.xxxなはずです。3CDaemonのサーバーを開始したときに右側に表示されるIPアドレスの中から該当するものを発見してください。
2-3. URoad-Home2+のTelnetで/etc/All_Dump.sh 192.168.100.100を実行する
先程1-8で接続したTeraTermのコンソールで、(192.168.100.xxxは先程覚えたIPアドレス)
/etc/All_Dump.sh 192.168.100.xxx
を実行します。
2-4. バックアップが終了するまで待つ
正常にバックアップが実行されていれば、3CDaemonのログに、mtdx.imgがアップロードされたみたいな表示が出るはずです。IPアドレスが間違えている場合は、その旨のエラーがTeraTermのコンソールに出ているはずです。
2-5. 14個のファイルが正常に送信されたことを確認する
すべてで14個のファイル(mtd0.img~mtd13.img)が存在することを確認します。また、3CDaemonのログを見て、途中で送信が中断しているファイルがないかも見てください。もし、あるようでしたら、ファイルを消して2-3からやり直してください。これらのファイルは純正ファームウェアのバックアップです。
3. OpenWRTのインストール
3-1. ファームウェアのダウンロード
ビルド済みのファームウェアはこちらです。
ダウンロードフォルダから、他のフォルダ(ファームウェアのバックアップに使用した)に移動しておくことをおすすめします。
3-2. 3CDaemonでFTPサーバを立てる
FTP Serverを選択してConfigure FTP Serverでダウンロードしたファームウェアが入っているフォルダを選択してください。Profire Nameはディフォルトのanonymous、パスワードは無し、LoginとDownloadにチェックのディフォルトで大丈夫です。あとは、GOでサーバをスタートさせてください。
3-3. URoad-Home2+へのファームウェア転送
TeraTermのコンソールで
cd /tmp
を実行してディレクトリをtmpに移動します。その後、(192.168.100.xxxは2-2で覚えたPCのIPアドレス)
ftp 192.168.100.xxx
を実行してftpサーバに接続します。ユーザーネームが求められるので、3-2のProfire Nameである、anonymousを入力し、パスワードは設定していないのでそのままエンターを押します。そうするとFTPサーバに接続されるはずです。FTP>となっているはずなので
bin
で送受信をバイナリモードにし、
get openwrt-ath79-nand-modacom_uroad-tec101-squashfs-factory.bin
でファームウェアを取得します。最後に
quit
でFTPを終了します。
3-4. ファームウェアの分割
カーネル部分とUBI部分に分割します。TeraTermのコンソールで、
dd if=openwrt-ath79-nand-modacom_uroad-tec101-squashfs-factory.bin of=kernel.bin bs=1 count=$((0x400000))
でカーネル部分をkernel.binに、
dd if=openwrt-ath79-nand-modacom_uroad-tec101-squashfs-factory.bin of=ubi.bin bs=1 skip=$((0x400000))
でubi部分をubi.binに分割します、
3-5. flash_eraseall、nandwriteのRAMへのコピー
TeraTermのコンソールで
cp /bin/flash_eraseall ./
cp /bin/nandwrite ./
を実行します。
3-6. フラッシュのイレース
mtd3~mtd6の内容を削除します。
./flash_eraseall /dev/mtd3
./flash_eraseall /dev/mtd4
./flash_eraseall /dev/mtd5
./flash_eraseall /dev/mtd6
3-7. ファームウェア書き込み
続いてファームウェアの書き込みを行います。
mtd3(カーネル)に書き込み
./nandwrite /dev/mtd3 kernel.bin
mtd4(UBI)に書き込み
./nandwrite /dev/mtd4 ubi.bin
3-8. 再起動
URoad-Home2+本体のリセットボタンを押すか、電源を入り切りして再起動します。
3-9. OpenWRTにアクセスできるようになるまで待つ
待つとURoad-Home2+につないでいるインターフェースに192.168.1.xというIPアドレスが割り当てられるはずです。待っても割り当てられない場合は有線LANを抜いて、URoad-Home2+本体のリセットボタンを押すか、電源を入り切りして再起動して、青いWiFiのLEDの点滅が消えてからLANを差し込んでください。もし、192.168.100.xが割り当てられた場合は、OpenWRT化が失敗しています。下の「3-9でOpenWRTが起動しなかった場合」を見てください。
元のファームウェアへの戻し方
送られてきたファイルのサイズがパーティションサイズと比べて微妙に小さかったり大きかったりするので、初めにファイルを整形して正しいサイズにします。このpythonのプログラムをファームウェアのあるバックアップフォルダと同じところにダウンロードして、コマンドプロンプトでそのディレクトリに移動(cd ディレクトリのパス
)した後、
python ./make_rewirte.py
を実行してください。mtd0_adjusted.img~mtd13_adjusted.imgが生成されるはずです。
mtd3はそのまま焼き、mtd4、mtd5、mtd6を結合してから焼きます。Windowsの場合は、コマンドプロンプトでバックアップしたファイルの有るディレクトリに移動(cd ディレクトリのパス
)した後、
copy /b mtd4_adjusted.img + mtd5_adjusted.img + mtd6_adjusted.img mtd4to6.img
を実行します。SSHでURoad-Home2+に接続し、SCPで/tmpに、mtd3_adjusted.imgとmtd4to6.imgをアップロードします。その後、URoad-Home2+側で
mtd write /tmp/mtd3_adjusted.img linux
mtd write /tmp/mtd4to6.img ubi
を実行し、URoad-Home2+本体の電源を入り切りすると、元のファームウェアに戻ると思います。
しかしながら、自分の環境では、U-Bootからカーネルを起動しようとしたときに、
Verifying Checksum at 0x81000040 …Bad Data CRC
と言われてしまって、起動しませんでした。ただ、3つめのバックアップが自動的に選択されるので、純正のファームウェアが一応起動します。
作業の途中で再起動してしまった場合
コマンドインジェクション後に再起動してしまった場合は、再びコマンドインジェクションから行う必要はなく、URoad-Home2+の設定のファイアウォール→コンテンツフィルタ設定で適当なものを送れば、再びTelnetが有効化されます。
3のフラッシュの書き込み中に再起動してしまった場合は最悪で、分解して、U-Bootからのインストールが必要となります。U-Boot経由からのインストール方法は
URoad-Home2+(URoad-TEC101)へのOpenWRTのインストール方法(U-Boot経由)
を御覧ください。
3-9でOpenWRTが起動しなかった場合
再起動してしまった場合と同じ手順で、もう一度試して見てください。それでだめだった場合は、分解して、U-Bootからのインストールを試してみてください。U-Boot経由からのインストール方法は
URoad-Home2+(URoad-TEC101)へのOpenWRTのインストール方法(U-Boot経由)
を御覧ください。