
Automatisch exportiert von code.google.com/p/firmware-mod-kit
Automatisch exportiert von code.google.com/p/firmware-mod-kit
Firmware-Modifikations-Kit
Dieses Kit ist eine Sammlung von Skripten und Dienstprogrammen zum Extrahieren und Neuerstellen von Linux-basierten Firmware-Images.
Ein Firmware-Image in seine Bestandteile zerlegen
Der Benutzer nimmt die gewünschten Änderungen am Dateisystem der Firmware oder der Weboberfläche (webif) vor
Firmware neu erstellen
Modifizierte Firmware auf das Gerät flashen und es brickieren (ha)
WARNUNG: Sie werden Ihr Gerät durch die Verwendung dieses Kits brickieren (vielleicht nicht, aber es ist besser zu sagen, dass Sie es tun werden). Brickieren bedeutet, dass das Gerät effektiv zu einem funktionslosen 'Ziegelstein' wird. Eine Wiederherstellung ist manchmal ohne Hardware-Modifikationen möglich. Manchmal sind Hardware-Modifikationen erforderlich (z. B. serielle oder JTAG-Header, die auf die Leiterplatte gelötet werden). Manchmal ist es einfach nicht machbar oder die Gesamtwiederherstellungskosten übersteigen den Wert des Geräts.
Verwenden Sie dieses Kit NICHT, wenn Sie nicht bereit sind, dass Ihr Router bricked wird!
EULA: Durch Herunterladen oder Verwenden dieses Kits stimmen Sie zu, die Haftung für die Folgen der Nutzung oder des Missbrauchs des Firmware-Mod-Kits zu übernehmen. Dazu gehört das Brickieren Ihres Geräts. Die Autoren dieses Kits haben Sie gewarnt. Dieses Kit ist nur für Embedded-Systems-Softwareingenieure bestimmt.
Das Firmware Mod Kit ermöglicht die einfache Zerlegung und Neuerstellung von Firmware-Images für verschiedene eingebettete Geräte. Obwohl es sich hauptsächlich an Linux-basierte Router richtet, sollte es mit den meisten Firmware kompatibel sein, die gängige Firmware-Formate und Dateisysteme wie TRX/uImage und SquashFS/CramFS verwendet.
Um das Firmware Mod Kit zu verwenden, benötigen Sie einen Subversion-Client, Standard-Linux-Entwicklungstools (gcc, make, etc.), das Python-Magic-Modul sowie die Entwicklerpakete für zlib und lzma. Wenn Sie eine Linux-Distribution verwenden, die apt-get nutzt, z. B. Ubuntu oder Debian, verwenden Sie:
Für Ubuntu 18.04 und älter:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic autoconf
Für Ubuntu 20.04 und neuer:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python3-magic autoconf python-is-python3
Für RedHat:
yum groupinstall "Development Tools"
yum install git zlib1g-dev xz-devel python-magic zlib-devel util-linux
Für Arch Linux:
Es gibt ein AUR-Paket unter https://aur.archlinux.org/packages/firmware-mod-kit/
Für andere Distributionen sollten Sie die entsprechenden Pakete mit dem Paketmanager Ihrer Distribution installieren.
git clone https://github.com/rampageX/firmware-mod-kit.git
cd firmware-mod-kit/src
make
Binwalk 2.1.1
[Zurück im Verzeichnis firmware-mod-kit]
cd src/binwalk-2.1.1
sudo python2 setup.py install
Das Firmware Mod Kit wird nur auf der Linux-Plattform unterstützt. Mit einigen kleinen Änderungen sollte es auf anderen POSIX-Plattformen funktionieren.
Klonen Sie das Repository des Firmware Mod Kit mit Git.
Das Firmware Mod Kit ist eine Sammlung von Dienstprogrammen und Shell-Skripten. Die Dienstprogramme können direkt verwendet werden, oder die Shell-Skripte können verwendet werden, um gängige Firmware-Operationen (z. B. Extrahieren und Neuerstellen) zu automatisieren und zu kombinieren. Die Kernskripte zur Durchführung von Firmware-Operationen sind unten aufgeführt.
Primäre Skripte:
| Skript | Beschreibung |
|---|---|
| extract-firmware.sh | Skript zum Extrahieren von Firmware |
| build-firmware.sh | Skript zum Neuerstellen von Firmware |
Sekundäre Skripte:
| ddwrt-gui-extract.sh | Extrahiert Web-GUI-Dateien aus extrahierter DD-WRT-Firmware. |
|---|---|
| ddwrt-gui-rebuild.sh | Stellt modifizierte Web-GUI-Dateien in der extrahierten DD-WRT-Firmware wieder her. |
Das Firmware Mod Kit verwendet ein 'hartcodiertes' Arbeitsverzeichnis mit dem Namen 'fmk'. Das Extraktionsskript extrahiert in diesen Ordner, und das Neuerstellungsskript erstellt aus diesem Ordner neu. Die Verwendung alternativer Arbeitsverzeichnisse wird für einige Operationen unterstützt, jedoch nicht für alle. Wir werden dies in Zukunft erweitern. Wenn Sie mehrere Arbeitsverzeichnisse haben, empfehlen wir Ihnen, diejenigen umzubenennen, mit denen Sie gerade nicht arbeiten.
Die automatisierte Firmware-Extraktion funktioniert in der Regel mit den meisten Firmware-Images, die uImage/TRX-Firmware-Header verwenden und SquashFS- oder CramFS-Dateisysteme nutzen. Derzeit ist extract-firmware.sh die bevorzugte Extraktionsmethode, da es mehr Firmware-Typen unterstützt als das ältere Skript old-extract.sh. old-extract.sh ist jedoch weiterhin enthalten und funktioniert mit vielen Firmware-Formaten.
Die Verwendung für extract-firmware.sh und build-firmware.sh ist einfach:
./extract-firmware.sh firmware.bin
Standardmäßig befindet sich die Ausgabe von extract-firmware.sh im Verzeichnis 'fmk', während old-extract.sh die extrahierten Daten in das angegebene Arbeitsverzeichnis legt.
Welches Build-Skript verwendet wird, hängt davon ab, welches Extraktionsskript verwendet wurde. Wenn Sie ein Firmware-Image mit extract-firmware.sh extrahiert haben, müssen Sie build-firmware.sh zum Neuerstellen verwenden. Wenn old-extract.sh verwendet wurde, muss old-build.sh zum Neuerstellen des Images aufgerufen werden:
./build-firmware.sh [-nopad] [-min]
Die von build-firmware.sh generierte neue Firmware befindet sich unter 'fmk/new-firmware.bin', während old-build.sh Firmware-Images in verschiedenen Formaten erzeugt und im angegebenen Ausgabeverzeichnis speichert.
Der optionale Schalter -nopad weist build-firmware.sh an, die Firmware NICHT auf die ursprüngliche Größe aufzufüllen.
Der optionale Schalter -min verwendet die maximale SquashFS-Blockgröße von 1 MB. Dies verringert die Größe des Firmware-Images, erhöht jedoch den CPU- und RAM-Ressourcenverbrauch auf dem Zielgerät. Verwenden Sie diesen Schalter nur, wenn es unbedingt erforderlich ist. Dies ist eine sehr große Blockgröße für eingebettete Systeme. Die ursprüngliche SquashFS-Blockgröße der Firmware bleibt beim Neuerstellen erhalten, und die ursprüngliche Blockgröße sollte verwendet werden, es sei denn, Sie sind sich sicher, was Sie tun. Eine zu große Blockgröße mag zwar funktionieren, aber die Laufzeitleistung der Firmware kann unter allen oder bestimmten Lasten leiden.
Eine sehr einzigartige Funktion des Firmware Mod Kit ist die Möglichkeit, Dateien aus der DD-WRT-Web-GUI zu extrahieren und neu zu erstellen. Dies wird durch die Skripte ddwrt-gui-extract.sh und ddwrt-gui-restore.sh automatisiert.
Sobald Sie ein DD-WRT-Firmware-Image mit extract-firmware.sh extrahiert haben, können Sie die Webdateien wie folgt extrahieren:
./ddwrt-gui-extract.sh
Dadurch wird ein Verzeichnis mit dem Namen 'www' erstellt und die Webdateien dorthin extrahiert. Sie können die Dateien nach Belieben ändern, können jedoch keine Dateien hinzufügen oder löschen.
Wenn Sie mit der Bearbeitung fertig sind, können Sie die Webdateien wie folgt neu erstellen:
./ddwrt-gui-rebuild.sh
Manchmal flasht man begeistert eine Drittanbieter-Firmware wie Gargoyle oder DD-WRT, nur um festzustellen, dass ihr Funktionen fehlen, sie nicht so gut funktioniert wie die Hersteller-Firmware oder funktionale Probleme hat. In dieser Situation möchten Sie vielleicht zur Hersteller-Firmware zurückkehren, haben aber keine Möglichkeit dazu!
Hier erfahren Sie, wie das Firmware Mod Kit Ihnen helfen kann, zu einer Hersteller-Firmware zurückzukehren. Der Vorgang ist wie folgt:
Sobald Sie zur Hersteller-Firmware zurückgekehrt sind, akzeptiert diese wieder Hersteller-Firmware-Images.
Dieses Beispiel zeigt, wie man ein Firmware-Image extrahiert, seinen vorhandenen Telnet-Daemon durch einen selbst erstellten ersetzt und dann ein neues Firmware-Image erstellt:
./extract-firmware.sh firmware.bin
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
./build-firmware.sh
Unten ist ein Beispiel für die Befehle, die ausgeführt werden müssen, um ein DD-WRT-Firmware-Image zu extrahieren, die Web-Indexseite zu ändern und ein neues Firmware-Image zu erstellen:
./extract-firmware.sh firmware.bin
./ddwrt-gui-extract.sh
echo "HELLO WORLD" > www/index.asp
./ddwrt-gui-rebuild.sh
./build-firmware.sh
Linksys hat benutzerdefinierte Fußzeilen mit Prüfsummenchecks, daher wurde dieses Skript geschrieben, um den Prozess der Berechnung der Prüfsumme des Images und der entsprechenden Änderung der Fußzeile zu automatisieren. Das neue Image wird als modified_checksum.img geschrieben. Führen Sie dies nach der Modifikation und build-firmware.sh aus.
./linksys_footer.sh modified_firmware.img
Das Firmware Mod Kit besteht aus einer Sammlung von Werkzeugen, die bei der Arbeit mit Embedded-Firmware-Images nützlich sind. Dazu gehören die unten aufgeführten, es gibt jedoch VIEL MEHR, die hier nicht aufgeführt sind.
| Werkzeug | Beschreibung |
|---|
| AsusTRX | Eine erweiterte Version von ASUSTRX, die sowohl 'normale' TRX-Dateien als auch optional solche mit einem angehängten ASUS-addver-Stil-Header erstellen kann. Es kann auch (mit dem -b-Schalter) Segment-Offsets im TRX erzwingen, für die Kompatibilität mit Marvell-ASUS-Geräten wie dem WL-530g. Dieses Tool ersetzt sowohl das 'normale' trx-Tool als auch addver. Enthaltene aktuelle Versionen: 0.90 beta. |
| AddPattern | Dienstprogramm zum Voranstellen eines Linksys-HDR0-Headers an einen TRX. |
| AddVer | ASUS-Dienstprogramm zum Anhängen eines Headers mit Versionsinformationen an ein TRX-Image. ASUSTRX enthält diese Funktion. Aktuelle Version: unversioniert. |
| Binwalk | Durchsucht Firmware-Images nach bekannten Dateitypen (Firmware-Header, komprimierte Kernel, Dateisysteme usw.) |
| CramFSCK | Prüf- und Extraktionswerkzeug für CRAMFS-Dateisystem-Images. Enthaltene aktuelle Versionen: 2.4x. |
| CramFSSwap | Dienstprogramm zum Tauschen der Endianness eines CramFS-Images |
| CRCalc | Dienstprogramm zum Patchen aller uImage- und TRX-Header in einem bestimmten Firmware-Image. |
| MkSquashFS | Erstellt ein SquashFS-Dateisystem-Image. Enthaltene aktuelle Versionen: 2.1-r2, 3.0. |
| MkCramFS | Erstellt ein CramFS-Dateisystem-Image. Kommt in der nächsten Version. Enthaltene aktuelle Versionen: 2.4x. |
| MotorolaBin | Dienstprogramm, das 8-Byte-Header zu TRX-Images für Motorola-Geräte WR850G, WA840G, WE800G voranstellt. Aktuelle Version: unversioniert. |
| Splitter3 | Dienstprogramm zum Scannen und Extrahieren von Bestandteilen eines Firmware-Images. |
| Tpl-tool | Dienstprogramm zum Manipulieren von TP-Link-Herstellerformat-Images. |
| UnCramFS | Alternatives Tool zum Extrahieren eines CramFS-Dateisystem-Images. Verwenden Sie nach Möglichkeit stattdessen cramfsck, da es zuverlässiger zu sein scheint. Enthaltene aktuelle Versionen: 0.7 (für cramfs v2.x). |
| UnCramFS-LZMA | Alternatives Tool zum Extrahieren von LZMA-komprimierten CramFS-Dateisystem-Images, wie sie von OpenRG verwendet werden. |
| UnSquashFS | Extrahiert ein zlib-komprimiertes SquashFS-Dateisystem-Image. Enthaltene aktuelle Versionen: 1.0 für 3.0-Images und 1.0 für 2.x-Images (eigene Mischung). |
| UnSquashFS-LZMA | Extrahiert ein lzma-komprimiertes SquashFS-Dateisystem-Image. Enthaltene aktuelle Versionen: 1.0 für 3.0-Images und 1.0 für 2.x-Images (eigene Mischung). Hinweis: Nicht alle SquashFS-LZMA-Patches sind miteinander kompatibel. Ich arbeite daran, Unterstützung für alle gängigen SquashFS-LZMA-Varianten hinzuzufügen. |
| UnTRX | Teilt TRX-basierte Firmware in ihre Bestandteile auf. Unterstützt auch vorangestellte addpattern-HDR0-Header. Dies wurde exklusiv für dieses Kit entwickelt. Enthaltene aktuelle Versionen: 0.45. |
| WebDecomp | Extrahiert und stellt Web-GUI-Dateien aus DD-WRT-Firmware-Images wieder her, sodass Änderungen an den Webseiten möglich sind. |
| WRTVxImgTool | Dienstprogramm zum Generieren von VxWorks-kompatiblen Firmware-Images für die WRT54G(S)-Serie v5. |