
code.google.com/p/firmware-mod-kit から自動エクスポートされました。
code.google.com/p/firmware-mod-kit から自動的にエクスポートされました
ファームウェア修正キット
このキットは、Linuxベースのファームウェアイメージを抽出および再構築するためのスクリプトとユーティリティのコレクションです。
ファームウェアイメージをそのコンポーネント部分に抽出する
ユーザーがファームウェアのファイルシステムまたはWeb UI (webif) に希望の変更を加える
ファームウェアを再構築する
変更したファームウェアをデバイスにフラッシュして文鎮化する(ha)
警告: このキットを使用するとデバイスを文鎮化します(そうでないかもしれませんが、そうなると言った方が良いでしょう)。「文鎮化」とは、事実上機能しない「文鎮」に変えることを意味します。ハードウェアの改造なしで回復できる場合もあります。場合によっては、ハードウェアの改造が必要です(例:PCBに半田付けされたシリアルまたはJTAGヘッダー)。時にはそれが不可能であったり、総回復コストがユニットの価値よりも高くなることもあります。
ルーターが文鎮化する覚悟がないなら、このキットを使用しないでください!
EULA: このキットをダウンロードまたは使用することにより、ファームウェアMod Kitの使用または誤用の結果に対する責任を負うことに同意するものとします。これにはデバイスの文鎮化が含まれます。このキットの作成者は十分に警告しました。このキットは組み込みシステムソフトウェアエンジニア専用です。
ファームウェアMod Kitを使用すると、さまざまな組み込みデバイス用のファームウェアイメージを簡単に分解および再構築できます。主にLinuxベースのルーターを対象としていますが、TRX/uImageやSquashFS/CramFSなどの一般的なファームウェア形式およびファイルシステムを使用するほとんどのファームウェアと互換性があるはずです。
ファームウェアMod Kitを使用するには、Subversionクライアント、標準のLinux開発ツール(gcc、makeなど)、python-magicモジュール、およびzlibとlzmaの開発パッケージが必要です。apt-getを使用するLinuxディストリビューション(例:UbuntuまたはDebian)を実行している場合は、次を使用します:
For Ubuntu 18.04 and older:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic autoconf
For Ubuntu 20.04 and newer:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python3-magic autoconf python-is-python3
For RedHat:
yum groupinstall "Development Tools"
yum install git zlib1g-dev xz-devel python-magic zlib-devel util-linux
For Arch Linux:
AURパッケージがあります: https://aur.archlinux.org/packages/firmware-mod-kit/
他のディストリビューションの場合は、ディストリビューションのパッケージマネージャを使用して同等のパッケージをインストールしてください。
git clone https://github.com/rampageX/firmware-mod-kit.git
cd firmware-mod-kit/src
make
Binwalk 2.1.1
[Back in firmware-mod-kit directory]
cd src/binwalk-2.1.1
sudo python2 setup.py install
ファームウェアMod KitはLinuxプラットフォームでのみサポートされています。いくつかの小さな変更を加えれば、他のPOSIXプラットフォームでも動作するはずです。
ファームウェアMod KitリポジトリをGitクローンします。
ファームウェアMod Kitは、ユーティリティとシェルスクリプトのコレクションです。ユーティリティは直接使用することも、シェルスクリプトを使用して一般的なファームウェア操作(例:抽出と再構築)を自動化および組み合わせることもできます。ファームウェア操作を容易にするためのコアスクリプトを以下に示します。
プライマリスクリプト:
| スクリプト | 説明 |
|---|---|
| extract-firmware.sh | ファームウェア抽出スクリプト |
| build-firmware.sh | ファームウェア再構築スクリプト |
セカンダリスクリプト:
| ddwrt-gui-extract.sh | 抽出されたDD-WRTファームウェアからWeb GUIファイルを抽出します。 |
|---|---|
| ddwrt-gui-rebuild.sh | 変更されたWeb GUIファイルを抽出されたDD-WRTファームウェアに復元します。 |
ファームウェアMod Kitは、'fmk'という'ハードコードされた'作業ディレクトリを使用します。抽出スクリプトはこのフォルダに抽出し、再構築スクリプトはこのフォルダから再構築します。代替の作業ディレクトリの許可は一部の操作でサポートされていますが、すべてではありません。今後拡張していく予定です。現時点では、複数の作業ディレクトリがある場合は、現在操作していないディレクトリの名前を変更することをお勧めします。
自動化されたファームウェア抽出は通常、uImage/TRXファームウェアヘッダーを採用し、SquashFSまたはCramFSファイルシステムを使用するほとんどのファームウェアイメージで機能します。現在、extract-firmware.shが推奨される抽出方法であり、古いold-extract.shスクリプトよりも多くのファームウェアタイプをサポートしています。ただし、old-extract.shは引き続き含まれており、多くのファームウェア形式で動作します。
extract-firmware.sh と build-firmware.sh の両方の使用方法は簡単です:
./extract-firmware.sh firmware.bin
デフォルトでは、extract-firmware.shの出力は'fmk'ディレクトリに配置されますが、old-extract.shは抽出データを指定された作業ディレクトリに配置します。
使用するビルドスクリプトは、使用された抽出スクリプトに依存します。extract-firmware.shでファームウェアイメージを抽出した場合は、build-firmware.shを使用して再構築する必要があります。同様に、old-extract.shを使用した場合は、イメージを再構築する際にold-build.shを呼び出す必要があります:
./build-firmware.sh [-nopad] [-min]
build-firmware.shによって生成された新しいファームウェアは'fmk/new-firmware.bin'に配置されますが、old-build.shはいくつかの異なる形式でファームウェアイメージを生成し、指定された出力ディレクトリに保存します。
オプションの -nopad スイッチは、build-firmware.shにファームウェアを元のサイズまでパディングしないように指示します。
オプションの -min スイッチは、最大のsquashfsブロックサイズである1MBを使用します。これにより、ターゲットデバイスで使用される追加のCPUおよびRAMリソースを犠牲にして、ファームウェアイメージサイズが減少します。どうしても必要な場合以外はこのスイッチを使用しないでください。これは組み込みシステムにとって非常に大きなブロックサイズです。元のファームウェアのsquashfsブロックサイズは再構築時に保持され、自分が何をしているか確信がない限り、元のブロックサイズを使用する必要があります。ブロックサイズが大きすぎると正常に動作するように見えるかもしれませんが、ファームウェアの実行時パフォーマンスが一部またはすべての負荷で低下する可能性があります。
ファームウェアMod Kitの非常にユニークな機能の1つは、DD-WRT Web GUIからファイルを抽出および再構築できることです。これはddwrt-gui-extract.shおよびddwrt-gui-restore.shスクリプトによって自動化されています。
extract-firmwware.shを使用してDD-WRTファームウェアイメージを抽出したら、次を実行してWebファイルを抽出できます:
./ddwrt-gui-extract.sh
これにより、'www'という名前のディレクトリが作成され、そこにWebファイルが抽出されます。ファイルは好きなように変更できますが、ファイルの追加や削除はできません。
編集が終了したら、次を実行してWebファイルを再構築できます:
./ddwrt-gui-rebuild.sh
時には、GargoyleやDD-WRTのようなサードパーティ製ファームウェアを熱心にフラッシュしても、必要な機能が不足していたり、ベンダーファームウェアほど性能が良くなかったり、機能的な問題があったりすることがあります。このような状況では、ベンダーファームウェアに戻りたいと思うかもしれませんが、その方法がないかもしれません!
ファームウェアMod Kitがベンダーファームウェアに戻すのにどのように役立つかを以下に示します。プロセスは次のとおりです:
ベンダーファームウェアに戻ると、再びベンダーファームウェアイメージを受け入れるようになります。
この例では、ファームウェアイメージを抽出し、既存のtelnetデーモンをカスタムビルドしたものと置き換え、新しいファームウェアイメージをビルドする方法を示します:
./extract-firmware.sh firmware.bin
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
./build-firmware.sh
以下は、DD-WRTファームウェアイメージを抽出し、Webインデックスページを変更し、新しいファームウェアイメージをビルドするために実行するコマンドの例です:
./extract-firmware.sh firmware.bin
./ddwrt-gui-extract.sh
echo "HELLO WORLD" > www/index.asp
./ddwrt-gui-rebuild.sh
./build-firmware.sh
Linksysはチェックサムチェック付きのカスタムフッタを持っているため、このスクリプトはイメージのチェックサムを計算し、それに応じてフッタを変更するプロセスを自動化するために作成されました。新しいイメージはmodified_checksum.imgに書き込まれます。変更後、build-firmware.shの後にこれを実行してください。
./linksys_footer.sh modified_firmware.img
ファームウェアMod Kitは、組み込みファームウェアイメージを扱う際に役立つツールのコレクションで構成されています。以下にリストされているものを含みますが、ここにリストされていないさらに多くのツールがあります。
| ツール | 説明 |
|---|
| AsusTRX | ASUSTRXの拡張版で、「通常の」TRXファイルと、オプションでASUS addverスタイルのヘッダーが追加されたTRXファイルの両方をビルドできます。また、Marvell ASUSデバイス(WL-530gなど)との互換性のために、TRX内のセグメントオフセットを強制することもできます(-bスイッチを使用)。このツールは「通常の」trxツールとaddverの両方を置き換えます。含まれている現在のバージョン:0.90 beta。 |
| AddPattern | TRXにLinksysスタイルのHDR0ヘッダーを先頭に追加するユーティリティ。 |
| AddVer | バージョン情報を含むヘッダーをTRXイメージに追加するASUSユーティリティ。ASUSTRXにはこの機能が含まれています。現在のバージョン:バージョンなし。 |
| Binwalk | ファームウェアイメージをスキャンして既知のファイルタイプ(ファームウェアヘッダー、圧縮カーネル、ファイルシステムなど)を検出します。 |
| CramFSCK | CRAMFSファイルシステムイメージのチェッカーおよび抽出器。含まれている現在のバージョン:2.4x。 |
| CramFSSwap | CramFSイメージのエンディアンを入れ替えるユーティリティ。 |
| CRCalc | 指定されたファームウェアイメージ内のすべてのuImageおよびTRXヘッダーをパッチするユーティリティ。 |
| MkSquashFS | squashfsファイルシステムイメージをビルドします。含まれている現在のバージョン:2.1-r2, 3.0。 |
| MkCramFS | cramfsファイルシステムイメージをビルドします。次のバージョンで追加予定。含まれている現在のバージョン:2.4x。 |
| MotorolaBin | MotorolaデバイスWR850G、WA840G、WE800G用のTRXイメージに8バイトのヘッダーを先頭に追加するユーティリティ。現在のバージョン:バージョンなし。 |
| Splitter3 | ファームウェアイメージのコンポーネント部分をスキャンして抽出するユーティリティ。 |
| Tpl-tool | TP-Linkベンダー形式のイメージを操作するユーティリティ。 |
| UnCramFS | cramfsファイルシステムイメージを抽出する代替ツール。可能な限りcramfsckを使用してください。より信頼性が高いようです。含まれている現在のバージョン:0.7(cramfs v2.x用)。 |
| UnCramFS-LZMA | OpenRGなどで使用されるLZMA圧縮cramfsファイルシステムイメージを抽出する代替ツール。 |
| UnSquashFS | zlib squashfsファイルシステムイメージを抽出します。含まれている現在のバージョン:3.0イメージ用1.0、2.xイメージ用1.0(独自ブレンド)。 |
| UnSquashFS-LZMA | lzma squashfsファイルシステムイメージを抽出します。含まれている現在のバージョン:3.0イメージ用1.0、2.xイメージ用1.0(独自ブレンド)。注:すべてのsquashfs-lzmaパッチが互いに互換性があるわけではありません。一般的なsquashfs-lzmaのバリエーションすべてのサポートを追加する作業を進めています。 |
| UnTRX | TRXスタイルのファームウェアをそのコンポーネント部分に分割します。また、先頭に追加されたaddpattern HDR0スタイルのヘッダーもサポートします。これはこのキット専用に開発されました。含まれている現在のバージョン:0.45。 |
| WebDecomp | DD-WRTファームウェアイメージからWeb GUIファイルを抽出および復元し、Webページの変更を可能にします。 |
| WRTVxImgTool | WRT54G(S) v5シリーズ用のVxWorks互換ファームウェアイメージを生成するユーティリティ。 |