
Esportato automaticamente da code.google.com/p/firmware-mod-kit
Esportato automaticamente da code.google.com/p/firmware-mod-kit
Kit di modifica del firmware
Questo kit è una raccolta di script e utilità per estrarre e ricostruire immagini firmware basate su Linux.
Estrai un'immagine firmware nelle sue parti componenti
L'utente apporta le modifiche desiderate al filesystem del firmware o all'interfaccia web (webif)
Ricostruisci il firmware
Lampeggia il firmware modificato sul dispositivo e brickalo (ah)
ATTENZIONE: Brickerai il tuo dispositivo usando questo kit (forse no, ma è meglio dire che lo farai). Brick significa trasformarlo efficacemente in un 'mattone' non funzionante. Il recupero è talvolta possibile senza modifiche hardware. A volte richiede modifiche hardware (ad esempio connettori seriali o JTAG saldati sul PCB). A volte non è fattibile, o costerebbe più del valore dell'unità.
Non utilizzare questo kit se non sei preparato a brickare il tuo router!
EULA: Scaricando o utilizzando questo kit, accetti di accettare la responsabilità per le conseguenze dell'uso o dell'abuso del Firmware Mod Kit. Queste includono il brick del tuo dispositivo. Gli autori di questo kit ti hanno debitamente avvertito. Questo kit è solo per ingegneri software di sistemi embedded.
Il Firmware Mod Kit permette la facile decostruzione e ricostruzione di immagini firmware per vari dispositivi embedded. Sebbene sia principalmente mirato a router basati su Linux, dovrebbe essere compatibile con la maggior parte dei firmware che utilizzano formati e filesystem comuni come TRX/uImage e SquashFS/CramFS.
Per utilizzare il Firmware Mod Kit, devi avere un client subversion, strumenti di sviluppo Linux standard (gcc, make, ecc.), il modulo python-magic e i pacchetti di sviluppo zlib e lzma. Se stai usando una distribuzione Linux che usa apt-get, ad esempio Ubuntu o Debian, usa:
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
Per RedHat:
yum groupinstall "Development Tools"
yum install git zlib1g-dev xz-devel python-magic zlib-devel util-linux
Per Arch Linux:
C'è un pacchetto AUR per https://aur.archlinux.org/packages/firmware-mod-kit/
Per altre distribuzioni, installa i pacchetti equivalenti usando il gestore pacchetti della tua distribuzione.
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
Il Firmware Mod Kit è supportato solo sulla piattaforma Linux. Con alcune piccole modifiche, dovrebbe funzionare su altre piattaforme POSIX.
Clona il repository del Firmware Modification Kit con Git.
Il Firmware Mod Kit è una raccolta di utilità e script shell. Le utilità possono essere utilizzate direttamente, oppure gli script shell possono essere usati per automatizzare e combinare operazioni comuni sul firmware (ad esempio estrazione e ricostruzione). Gli script principali per facilitare le operazioni sul firmware sono elencati di seguito.
Script primari:
| Script | Descrizione |
|---|---|
| extract-firmware.sh | Script di estrazione del firmware |
| build-firmware.sh | Script di ricostruzione del firmware |
Script secondari:
| ddwrt-gui-extract.sh | Estrae i file dell'interfaccia Web dal firmware DD-WRT estratto. |
|---|---|
| ddwrt-gui-rebuild.sh | Ripristina i file modificati dell'interfaccia Web nel firmware DD-WRT estratto. |
Il Firmware Mod Kit utilizza una directory di lavoro 'hard coded' chiamata 'fmk'. Lo script di estrazione estrae in questa cartella e lo script di ricostruzione ricostruisce da questa cartella. Il supporto per directory di lavoro alternative è disponibile per alcune operazioni, ma non per tutte. Amplieremo questa funzionalità in futuro. Per ora, se hai più directory di lavoro, ti suggeriamo di rinominare quelle su cui non stai operando attualmente.
L'estrazione automatica del firmware funziona tipicamente con la maggior parte delle immagini firmware che impiegano header uImage/TRX e utilizzano filesystem SquashFS o CramFS. Attualmente, extract-firmware.sh è il metodo di estrazione preferito poiché supporta più tipi di firmware rispetto al vecchio script old-extract.sh. Tuttavia, old-extract.sh è ancora incluso e funziona con molti formati di firmware.
L'utilizzo sia di extract-firmware.sh che di build-firmware.sh è semplice:
./extract-firmware.sh firmware.bin
Per impostazione predefinita, l'output di extract-firmware.sh si troverà nella directory 'fmk', mentre old-extract.sh inserirà i dati estratti nella directory di lavoro specificata.
Quale script di build utilizzare dipende da quale script di estrazione è stato usato. Se hai estratto un'immagine firmware con extract-firmware.sh, allora devi usare build-firmware.sh per ricostruirla. Allo stesso modo, se è stato usato old-extract.sh, allora old-build.sh deve essere invocato per ricostruire un'immagine:
./build-firmware.sh [-nopad] [-min]
Il nuovo firmware generato da build-firmware.sh si troverà in 'fmk/new-firmware.bin', mentre old-build.sh genererà immagini firmware in diversi formati e le salverà nella directory di output specificata.
Lo switch opzionale -nopad istruirà build-firmware.sh a NON riempire il firmware fino alla sua dimensione originale.
Lo switch opzionale -min utilizza la dimensione massima del blocco squashfs di 1MB. Questo ridurrà la dimensione dell'immagine firmware a scapito di risorse CPU e RAM aggiuntive utilizzate sul dispositivo di destinazione. Non usare questo switch se non necessario. Questa è una dimensione del blocco molto grande per sistemi embedded. La dimensione originale del blocco squashfs del firmware viene preservata durante la ricostruzione e la dimensione del blocco originale dovrebbe essere quella utilizzata a meno che tu non sia sicuro di ciò che stai facendo. Una dimensione del blocco troppo grande può sembrare funzionare bene, ma le prestazioni in fase di esecuzione del firmware potrebbero risentirne in tutti o alcuni carichi.
Una caratteristica molto unica del Firmware Mod Kit è la capacità di estrarre e ricostruire file dall'interfaccia Web DD-WRT. Questo è automatizzato dagli script ddwrt-gui-extract.sh e ddwrt-gui-restore.sh.
Una volta estratto un'immagine firmware DD-WRT usando extract-firmware.sh, puoi estrarre i file Web eseguendo:
./ddwrt-gui-extract.sh
Questo creerà una directory chiamata 'www' ed estrarrà i file Web lì. Puoi modificare i file come preferisci, ma non puoi aggiungere o eliminare file.
Quando hai finito le modifiche, puoi ricostruire i file Web eseguendo:
./ddwrt-gui-rebuild.sh
A volte lampeggerai entusiasticamente un firmware di terze parti come Gargoyle o DD-WRT solo per scoprire che manca di funzionalità di cui hai bisogno, non funziona bene come il firmware del produttore o ha problemi funzionali. In questa situazione, potresti voler tornare al firmware del produttore, ma non hai modo di farlo!
Ecco come il Firmware Mod Kit può aiutarti a tornare a un firmware del produttore. Il processo è il seguente:
Una volta tornato al firmware del produttore, questo accetta di nuovo le immagini firmware del produttore.
Questo esempio mostra come estrarre un'immagine firmware, sostituire il suo demone telnet esistente con uno personalizzato, e quindi costruire una nuova immagine firmware:
./extract-firmware.sh firmware.bin
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
./build-firmware.sh
Di seguito è riportato un esempio dei comandi da eseguire per estrarre un'immagine firmware DD-WRT, modificare la pagina Web index e costruire una nuova immagine firmware:
./extract-firmware.sh firmware.bin
./ddwrt-gui-extract.sh
echo "HELLO WORLD" > www/index.asp
./ddwrt-gui-rebuild.sh
./build-firmware.sh
Linksys ha piè di pagina personalizzati con controlli del checksum, quindi questo script è stato scritto per tentare di automatizzare il processo di calcolo del checksum dell'immagine e modifica del piè di pagina di conseguenza. La nuova immagine verrà scritta in modified_checksum.img. Esegui questo dopo aver modificato e build-firmware.sh.
./linksys_footer.sh modified_firmware.img
Il Firmware Mod Kit è composto da una raccolta di strumenti utili quando si lavora con immagini firmware embedded. Questi includono quelli elencati di seguito, anche se ce ne sono MOLTI ALTRI non elencati qui.
| Strumento | Descrizione |
|---|
| AsusTRX | Una versione estesa di ASUSTRX che può costruire sia file TRX 'normali' che, opzionalmente, quelli con un'intestazione in stile ASUS addver aggiunta. Può anche, in modo unico, forzare gli offset dei segmenti nel TRX (con l'opzione -b) per la compatibilità con dispositivi Marvell ASUS come il WL-530g. Questo strumento sostituisce sia lo strumento TRX 'normale' che addver. Le versioni correnti incluse sono: 0.90 beta. |
| AddPattern | Utilità per anteporre un'intestazione HDR0 in stile Linksys a un TRX. |
| AddVer | Utilità ASUS per aggiungere un'intestazione a un'immagine TRX contenente informazioni sulla versione. ASUSTRX include questa capacità. Versione corrente: non versionata. |
| Binwalk | Scansiona le immagini firmware alla ricerca di tipi di file noti (intestazioni firmware, kernel compressi, filesystem, ecc.) |
| CramFSCK | Strumento di controllo ed estrazione di immagini filesystem CRAMFS. Versioni correnti incluse: 2.4x. |
| CramFSSwap | Utilità per scambiare l'endianess di un'immagine CramFS |
| CRCalc | Utilità per correggere tutte le intestazioni uImage e TRX all'interno di una data immagine firmware. |
| MkSquashFS | Costruisce un'immagine filesystem squashfs. Versioni correnti incluse: 2.1-r2, 3.0. |
| MkCramFS | Costruisce un'immagine filesystem cramfs. In arrivo nella prossima versione. Versioni correnti incluse: 2.4x. |
| MotorolaBin | Utilità che antepone intestazioni di 8 byte alle immagini TRX per dispositivi Motorola WR850G, WA840G, WE800G. Versione corrente: non versionata. |
| Splitter3 | Utilità per scansionare ed estrarre le parti componenti di un'immagine firmware. |
| Tpl-tool | Utilità per manipolare le immagini in formato TP-Link del produttore. |
| UnCramFS | Strumento alternativo per estrarre un'immagine filesystem cramfs. Usa cramfsck quando possibile poiché sembra più affidabile. Versioni correnti incluse: 0.7 (per cramfs v2.x). |
| UnCramFS-LZMA | Strumento alternativo per estrarre immagini filesystem cramfs compresse con LZMA, come quelle usate da OpenRG. |
| UnSquashFS | Estrae un'immagine filesystem squashfs zlib. Versioni correnti incluse: 1.0 per immagini 3.0 e 1.0 per immagini 2.x (una mia miscela). |
| UnSquashFS-LZMA | Estrae un'immagine filesystem squashfs lzma. Versioni correnti incluse: 1.0 per immagini 3.0 e 1.0 per immagini 2.x (una mia miscela). Nota: non tutte le patch squashfs-lzma sono compatibili tra loro. Sto lavorando per aggiungere supporto per tutte le varianti comuni di squashfs-lzma. |
| UnTRX | Divide i firmware in stile TRX nelle loro parti componenti. Supporta anche intestazioni HDR0 in stile addpattern anteposte. È stato sviluppato esclusivamente per questo kit. Versioni correnti incluse: 0.45. |
| WebDecomp | Estrae e ripristina i file dell'interfaccia Web da immagini firmware DD-WRT, consentendo modifiche alle pagine Web. |
| WRTVxImgTool | Utilità per generare immagini firmware compatibili con VxWorks per la serie WRT54G(S) v5. |