OpenWrt 化した WSR-2533DHP2 を Buffalo 純正ファームウェアに戻す (Restoring Stock Firmware)

## この記事の目的

この記事は [以前の記事](https://qiita.com/Bacalhau/items/0e5e1ee2382257bf7ef8) の続編です。

[以前の記事](https://qiita.com/Bacalhau/items/0e5e1ee2382257bf7ef8) では OpenWrt の導入手順について説明しましたが、今回の記事では OpenWrt 化した WSR-2533DHP2 を Buffalo 純正ファームウェアに戻す手順を説明します。

同様の手順で [WSR-1166DHP](https://techinfodepot.shoutwiki.com/wiki/Buffalo_WSR-1166DHP) や [WSR-2533DHP / DHPL](https://taiha.hatenablog.jp/entry/2020/04/13/buffalo-wsr-2533dhpl/) / [DHPL2](https://taiha.hatenablog.jp/entry/2024/06/08/205236) も Buffalo 純正ファームウェアに戻せます。🎉

WSR-3200AX4S については少し手順が異なるため、別記事を作成しました。

ネット脅威ブロッカー機能がある [WSR-2533DHPLS](https://taiha.hatenablog.jp/entry/2024/06/08/205236) も WSR-3200AX4S と同じ手順なのではないかと思います。

<!-- OpenWrt 化した WSR-3200AX4S を Buffalo 純正ファームウェアに戻す (Restoring Stock Firmware) -->

https://qiita.com/Bacalhau/items/15731f0c15080f30afd2

## TL;DR

[OpenWrt 公式サイトの解説](https://openwrt.org/docs/guide-user/installation/generic.uninstall) の通り、以下のコマンドで純正ファームウェアに戻せます。

> 以下のコマンドの最後の引数の `firmware` はパーティション名です。
> 機種によっては異なるパーティション名を指定する必要があります。

```shell
mtd -r write original_firmware.bin firmware
```

この記事では、上記コマンドで指定している **`original_firmware.bin`** の取得方法について説明します。

> 💡 純正ファームウェアの書き込みに [`ubiformat`](http://linux-mtd.infradead.org/faq/ubi.html#L_flash_img) を使う [方法](https://wifi-manual.net/install-openwrt-on-wxr-6000ax12s/#toc14) もありますが、本記事では [公式サイトの手順](https://openwrt.org/docs/guide-user/installation/generic.uninstall) と同じく `mtd write` を使って説明します。

## 簡単編: Buffalo 公式ファームウェアから取得

簡単編では Buffalo の公式ファームウェアからリカバリデータを作成します。

👉 ここで説明しているのは、2025 年 4 月時点での手順です。  
バージョンが更新されている場合は、バージョンに合わせてコマンドを変更してください。

### 1. WSR-2533DHP2 の公式ファームウェアの取得

[Buffalo 公式サイト](https://www.buffalo.jp/product/detail/software/wsr-2533dhp2-cb.html)から最新のファームウェアをダウンロードします。

https://www.buffalo.jp/product/detail/software/wsr-2533dhp2-cb.html

📌 Windows 版は拡張子が exe の自動解凍ファイルのため、zip ファイルである Mac 版の方が便利です。

👉 2025 年 4 月時点のファイル名は `wsr2533dhp2-128.zip` です。

### 2. ダウンロードしたファイルを解凍して、ファームウェアを取得する

ダウンロードしたファイルを解凍して、`wsr_2533dhp2_jp_xyy` といったファイルを取得します。

👉 2025 年 4 月時点のファイル名は `wsr_2533dhp2_jp_128` です。

### 3. `firmware-wintools` を取得する

以下の GitHub ページから最新の `firmware-wintools_x.y.z.zip` を取得します。

<!-- OpenWrtのfirmware-utilsのWindows移植版 -->

https://github.com/musashino205/firmware-wintools/releases

👉 2025 年 4 月時点のファイル名は `firmware-wintools_0.8.0.zip` です。

`firmware-wintools_x.y.z.zip` を解凍して、`firmware-wintools.exe` を取得します。

### 4. `firmware-wintools` で WSR-2533DHP2 の公式ファームウェアをリカバリデータに変換

取得した Buffalo ファームウェアを `firmware-wintools.exe` と同じフォルダに移動/コピーして、コマンドラインで以下のコマンドを実行します。

<details>
<summary>👉 コマンドライン(コマンドプロンプト)を簡単に開く方法 🤩</summary>

エクスプローラーのアドレスバーに `cmd` と入力して `Enter` キーを押せば、コマンドライン(コマンドプロンプト)が開きます。

![How to open Command Prompt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/fb067473-b4af-44e5-8c99-a22f743139d2.png)

</details>

```bat
firmware-wintools buffalo-enc -i wsr_2533dhp2_jp_128 -o wsr_2533dhp2_jp_128.dec -d -O 0xc8 -l

: 改行を加えて見やすくするとこんな感じ 🎉
firmware-wintools buffalo-enc ^
  -i wsr_2533dhp2_jp_128 ^
  -o wsr_2533dhp2_jp_128.dec ^
  -d -O 0xc8 -l
```

以下のような出力が表示されれば成功です。🎉

```
===== buffalo-enc モード (復号) =====
 マジック       : 'start'
 シード値       : 0xA1
 プロダクト名   : 'WSR-2533DHP2'
 バージョン     : '1.28'
 データ長       : 11608064 bytes
 チェックサム   : 0x2c545978
```

`wsr_2533dhp2_jp_128.dec` が生成されます。

![`wsr_2533dhp2_jp_128.dec` is created.](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/05657b67-85cd-4c8f-a7d9-3f84dee57fa2.png)

生成されたファイルを [WinSCP](https://qiita.com/Bacalhau/items/3ee93499083bcaffcd91#winscp-%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) や以下のようなコマンドで WSR-2533DHP2 に転送します。

```shell
scp -O wsr_2533dhp2_jp_128.dec root@192.168.1.1:/tmp
```

転送したファイルがあるディレクトリで以下のコマンドを実行すれば Buffalo 純正ファームウェアに戻せます。

```shell
mtd -r write wsr_2533dhp2_jp_128.dec firmware
```

⚠️ Flash の空き容量が足りない場合は、 `/tmp` に転送してください。

## 確実編: OpenWrt 化前の WSR-2533DHP2 からデータを取得

確実編では、OpenWrt 化前のルーターからデータを取得し、それを利用してリカバリを行います。

### 1. Kernel イメージ ( xxx-initramfs-kernel.bin ) で起動

1. [Tftpd64](https://pjo2.github.io/tftpd64/) を利用して、TFTP が利用できるようにします  
   👉 `tftpd64.xxx.zip` をダウンロードして使うのが簡単です
2. [WSR-2533DHP2 の Kernel イメージ](https://firmware-selector.openwrt.org/?target=mediatek%2Fmt7622&id=buffalo_wsr-2533dhp2) をダウンロードし、ファイル名を `linux.trx-recovery` に変更します
3. `linux.trx-recovery` を上記手順 1. で作成した解凍フォルダ内に移動します  
   ![Move `linux.trx-recovery` to Tftpd64 folder](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/cc2c3463-185c-4c52-95bd-68853d58f09c.png)
4. PC のイーサネットの IP 割り当てを `192.168.11.2` に設定します  
   ![Set IPv4 `192.168.11.2`](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/affeceef-a1fd-43f2-9d00-741c69fd22f3.png)
5. Tftpd64 を起動して、`Server interfaces` を `192.168.11.2` に設定します  
   ![Set Server Interfaces `192.168.11.2`](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/279f6d19-9548-4d8f-b7a6-7ed522009b24.png)
6. PC のファイアウォール設定で TFTP の通信が許可されていることを確認します  
   ![Confirm firewall settings](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/76567015-f356-4f1a-a418-285f6e3cc4c7.png)
7. ルーターの AOSS ボタンを押しながら電源コードを挿し込み、Tftpd64 のウィンドウでデータが転送されることを確認します  
   ![Transfer recovery data](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/4caee87e-7528-4bd3-8054-8a9b14a4fb6e.png)
8. Kernel イメージでルーターが起動できたら、PC のイーサネットの IP 割り当てを「自動 (DHCP)」に戻します

### 2. `firmware` mtdblock をダウンロード

1. ブラウザを使用して、OpenWrt ルーターに http://192.168.1.1 でログインします  
   👉 パスワードは不要です 🎉
2. `System` > `Backup / Flash Firmware` と移動します
3. `Save mtdblock contents` の `Choose mtdblock` で `firmware` を選択します  
   ![Select `firmware`](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/7eba8fb7-71b4-40d6-8917-940d51990ba3.png)
4. `Save mtdblock` をクリックし、リカバリ用の mtdblock をダウンロードします
5. ダウンロードした `OpenWrt.mtd5.firmware.bin` をリカバリに備えて保存します

リカバリを行う際は、[WinSCP](https://qiita.com/Bacalhau/items/3ee93499083bcaffcd91#winscp-%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) などで WSR-2533DHP2 にデータを転送し、転送したファイルがあるディレクトリで以下のコマンドを実行すれば Buffalo 純正ファームウェアに戻せます。

```shell
mtd -r write OpenWrt.mtd5.firmware.bin firmware
```

⚠️ Flash の空き容量が足りない場合は、 `/tmp` に転送してください。

## 参考資料

### 謝辞

今回の記事は以下の 2 つの記事を参考にしています。

これらの記事に出会わなければ、私は今回の記事を書くことはできませんでした。 🙏

https://qiita.com/9hnder/items/35e0cbfb3dc9828d8852

https://writening.net/page?uLy3gN

### 公式サイトの解説

CLI で全ての mtdblock をバックアップしたい場合には以下の記事が参考になります。🎉

https://openwrt.org/docs/guide-user/installation/generic.backup

## 補足

### WinSCP の接続設定について

[WinSCP](https://winscp.net/eng/docs/lang:jp) を使う場合は、 `File protocol` を `SCP` にしてください。

![WinSCP_SCP](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566576/64139f6d-9cc0-7216-4037-3cede8122ad3.png)

以下のコマンドの `-O` オプションも、上記設定と同様に SCP プロトコルを使うための設定です。

```shell
scp -O original_firmware.bin root@192.168.1.1
```

> 📌 [OpenWrt で SFTP を使うためには追加パッケージのインストールが必要になります](https://openwrt.org/docs/guide-user/services/nas/sftp.server)。  
> そのため、[SCP で接続した方が簡単です](https://openwrt.org/docs/guide-user/base-system/dropbear)。🎉

### データの転送先に `/tmp` を使う理由

`/tmp` はメインメモリ内の領域です。  
そのため、Flash としては空き容量が無くても、`/tmp` であればリカバリデータが転送できます。

> 💡 OpenWrt では、[起動時に圧縮されたカーネルイメージをメインメモリ (RAM) 上に展開して動作します](https://openwrt.org/ja/docs/techref/process.boot)。  
> `/tmp` や `/var` はそれらのファイルの一時的な保存場所です。 (👉 そのため再起動すると消去されます。)

> 💡 NAND メモリは [読むだけでも劣化していく 😱](https://openwrt.org/docs/techref/flash#nand_vs_nor1) ため、`/tmp` を使用する方が Flash への負担が少なくなります。