459
Commento:
|
38149
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 6: | Linea 6: |
#pragma section-numbers off [[TableOfContents]] WORK IN PROGRESS!!! |
#pragma section-numbers on '''Questo tutorial riguarda la fonera 2100. Per un hack veloce della fonera 2100: QuickFoneraHack. Per la fonera 2200: Fon2200Hack''' ''''' ...::: La Fonera: dalla scatola a Open-Wrt :::... ''''' <<BR>> a cura di BlaXwan<<BR>> Ultimo aggiornamento: 22/01/2008 ---- <<TableOfContents>> ---- == Disclaimer == Prima di iniziare ci sono un pò di cose che vorrei sottolineare.<<BR>> [[http://it.fon.com/|Fon]] ha investito e continua a investire molte risorse ed energie per diffondere la sua idea di condivisione dell'accesso ad Internet in tutto il mondo. Modificare i suoi "social router", specialmente se ottenuti gratuitamente, con un firmware che non collabora al loro progetto non è una bella cosa. Il presente tutorial rappresenta quindi solo un'occasione di studio per imparare il funzionamento dei router wireless e dei firmware linux embedded. Dopo aver esaurito la nostra sete di conoscenza ed imparato ciò che si voleva su [[https://shop.fon.com/FonShop/shop/IT/ShopController?view=product&product=PRD-001|La Fonera]], consiglio vivamente di riportare La Fonera a firmware originale Fon almeno fin quando non sarà possibile installare ed utilizzare i servizi originali Fon anche su una versione di firmware diverso, cosa del tutto realizzabile considerando che il firmware Fon è esso stesso basato su OpenWrt. Le informazioni contenute in questo tutorial, inoltre, non sono farina del mio sacco. Mi sono semplicemente limitato a cercare su Internet le migliori (a mio avviso) informazioni disponibili per riprogrammare il router e qui riporto semplicemente il racconto passo passo di come ho installato [[http://openwrt.org/|OpenWrt]] in "salsa" [[http://wiki.openwrt.org/OpenWrtDocs/KamikazeConfiguration|Kamikaze]] su La Fonera. Ovviamente ho solo riportato i passi che ho eseguito sulla mia Fonera, ma non ho (ancora) ripetuto il tutto basandomi su questo tutorial. Perciò ogni segnalazione di inesattezza o suggerimento è più che bene accetto. Il tutorial è ancora da considerarsi Work in progress, quindi verrà aggiornato man mano con nuove informazioni/integrazioni. Questo tutorial è da considerarsi a solo scopo informativo e ogni tipo di modifica che apporterete alle vostre Fonera sono a vostro rischio, pericolo e responsabilità. Così come gli autori originali delle informazioni che qui riporto e ringrazio, non mi assumo alcuna responsabilità riguardo a danni causati a cose e persone per quanto riportato in queste pagine. Happy hacking!<<BR>> '''...::..:::'''BlaXwan''':::..::...''' <<BR>> 25 gennaio 2007 == Overview == Il '''FON2100A''', meglio conosciuto come '''La Fonera''', è un bellissimo '''''router sociale''''' basato su un System on a Chip (SOC) della [[http://www.atheros.com/|Atheros]] (Atheros AR2315) venduto da Fon ad un prezzo estremamente basso. In un'unità di dimensioni molto compatte, tanto da stare nel palmo di una mano, integra un processore MIPS 4KEc V6.4, una scheda wireless, una scheda Ethernet, una flash da 8 MB e 16 MB di RAM!<<BR>> {{attachment:fonera.gif}} La procedura qui descritta permette di installare OpenWrt in configurazione Kamikaze via software, senza alcun intervento hardware e senza necessità alcuna di aprire il router. Ovviamente sarebbe molto più facile e diretto operando via HW ma, per farlo, sarebbe necessario disporre di un'interfaccia JTAG o almeno di un'interfaccia seriale per questo router rendendo, alla fine, comunque più complicata (e rischiosa) la modifica.<<BR>> Si presume abbiate già collegato la prima volta la vostra Fonera ed abbiate eseguito i passi riportati nella guida Fon per attivare le due reti wireless che fornisce di default '''FON_AP''' e '''My``Place''' e che sappiate già come connettervi a My``Place e connettervi all'interfaccia http del router stesso. <<BR>> Per la modifica, innanzitutto faremo (se necessario) un downgrade del firmware Fon per riportarlo ad una versione che ha un bug tale da permetterci di aprire una shell via SSH, in seguito ci garantiremo la possibilità di modificare direttamente il contenuto della flash allo scopo di ottenere l'accesso a [[http://sourceware.org/redboot/|RedBoot]], l'ambiente di bootstrap del router, allo scopo di caricare l'immagine dell'OS e il kernel di Kamikaze. |
Linea 13: | Linea 46: |
'''Warning - Con le Fonere arrivate a dicembre 2007 questo step non è stato necessario, potete andare avanti al prossimo capitolo''' Alla data in cui scrivo, La Fonera arriva con un firmware versione 7.1.2 o 7.1.3, versioni che correggono il bug che invece ci è necessario per garantirci un accesso via SSH. Per questo la prima operazione sarà quella di riportare il router alla versione 7.1.1 (0.7.1 r1). Se invece il vostro router ha già a bordo questa versione potete saltare al paragrafo successivo. Per il downgrade è possibile procedere almeno in tre modi (thanks to OnE), nel mio caso il primo ha funzionato: * '''Reset'''. E' il metodo più semplice: * disconnettere La Fonera da Internet (cavo Ethernet) * premere e tener premuto il pulsante di reset (posto sotto il router) per più di 15 secondi * riavviare il router scollegando e ricollegando l'alimentazione * connettersi all'interfaccia http della Fonera senza connettere La Fonera stessa ad Internet (si può fare via wireless o con un cavo crossed utilizzando sul PC l'indirizzo 169.254.255.2/24 per trovare La Fonera all'indirizzo http://169.254.255.1/) e verificare che il firmware sia quello giusto (7.1.1) * '''Downgrade via http'''. * disconnettere La Fonera da Internet (cavo Ethernet) * scaricare sul PC il firmware 7.1.1, [[attachment:fonera_0.7.1.1.fon]] * collegarsi alla Fonera via wireless oppure con cavo cross (169.254.255.2/24 sul PC, Fonera all'indirizzo 169.254.255.1) * aprire l'interfaccia di amministrazione della Fonera, andare in firmware upgrade e caricare il firmware 7.1.1 * molto probabilmente il router non accetterà il downgrade a 7.1.1 dandovi il seguente output: {{{ Stopping services... kill: Could not kill pid '620': No such process kill: Could not kill pid '458': No such process Memoria liberata7872 Salvataggio configurazioni... tar: Removing leading '/' from member names Unlocking config ... Writing from /tmp/config.tar.gz to config ... [ ][e][w] This is a FON reflash v2 archive Verified OK Upgrade name: reflash_all This hotfix is intended for 0.7.0. The firmware version on this router is 0.7.1. Il processo di aggiornamento non è andato a buon fine Controlla che l'aggiornamento .fon che stai installando sia valido per questa versione del firmware e per questo modello di router Riavviamento servizi... }}} Ma, nonostante questo errore, il firmware dovrebbe essere installato, riavviare La Fonera e controllare che sia così * '''2-step downgrade'''. Se non si è riusciti nel downgrade precedente è perchè la 7.1.1 è un'aggiornamento della 7.0.x quindi verrà accettato solo da questa serie di firmware. Per questo possiamo portare la Fonera prima alla 7.0.4 e quindi alla 7.1.1 * disconnettere La Fonera da Internet (cavo Ethernet) * scaricare sul PC il firmware 7.0.4, attualmente si può trovarlo a [[http://www.paologatti.it/wp-content/uploads/fonera-r1.zip|questo indirizzo]] in versione compressa, decomprimerlo prima di utilizzarlo * collegarsi alla Fonera via wireless oppure con cavo cross (169.254.255.2/24 sul PC, Fonera all'indirizzo 169.254.255.1) * aprire l'interfaccia di amministrazione della Fonera, andare in firmware upgrade e caricare il firmware 7.0.4 * La Fonera si riavvia, alla ripartenza controllare di avere il firmware 7.0.4 installato * connettere La Fonera ad Internet e connettersi alla wireless della Fonera * sulla Fonera partirà la procedura automatica di download che installerà il firmware 7.1.1 * disconnettere La Fonera da Internet non appena l'aggiornamento sarà completato, possiamo accorgercene dall'interruzione del collegamento wireless. Questo per evitare che successivamente La Fonera scarichi ed installi anche la versione 7.1.2 A questo punto, se uno dei quattro metodi ha funzionato, avremo La Fonera con firmware Fon 7.1.1, pronti per hackerarne l'interfaccia http ed aprire una shell via SSH. * '''RADIUS + DNS spoofing''' (http://stefans.datenbruch.de/lafonera/#kolofonium) * attraverso l'interfaccia http inserire come DNS l'indirizzo 88.198.165.155 (corrispondente a kolofonium.datenbruch.de - DISCLAIMER: per utilizzare questo metodo vi dovete fidare del proprietario del server) * riavviare il router ed entrare in ssh attraverso la rete wireless interna * vedere [[#keepsshopen|qui]] le istruzioni per tenere l'ssh aperto * ri-cambiare il DNS |
|
Linea 14: | Linea 102: |
Questo hack (thanks to Mart) semplice semplice ci permette di aprire una shell SSH iniettando comandi tramite postdata in una delle cgi della Fonera. Attenzione però: funziona solo con il firmware 7.1.1 che a questo punto dovremmo avere. Nel caso abbiamo firmware precedenti e non vogliamo installare il 7.1.1 possiamo provare ad utilizzare il primo o il secondo hack linkati nel paragrafo '''Fonti'''. Procediamo: * creare un file html (ad es. primo.html) sul PC con il contenuto seguente: {{{ <html> <head></head><body><center> <form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data"> <input name="username" value="$(/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT)" size="68" /> <input type="submit" name="submit" value="Submit" /> </form> </center></body></html> }}} * creare un'altro file html (ad es. secondo.html) con il contenuto seguente: {{{ <html> <head></head><body><center> <form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data"> <input name="username" value="$(/etc/init.d/dropbear)" size="68" ><input type="submit" name="submit" value="Submit" /> </form> </center></body></html> }}} * collegare la fonera al PC con un cavo cross ed impostare sul PC un'indirizzo del tipo 169.254.255.2/24 * aprire il primo file html, cliccare su "Submit", verranno chieste le credenziali di accesso alla Fonera, inserirle (se non le si è modificate sono username admin, password admin) * aprire il secondo file html, cliccare su "Submit", verranno chieste le credenziali di accesso alla Fonera, inserirle * in questo modo, tramite il post dei due form contenuti nei file html abbiamo iniettato i comandi {{{ /usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT /etc/init.d/dropbear }}} per, rispettivamente, aprire la porta 22 (SSH) nel firewall della Fonera e lanciare il daemon SSH (Dropbear) <<Anchor(keepsshopen)>> A questo punto abbiamo la possibilità di entrare in SSH nella Fonera, prima di andare oltre però, vogliamo assicurarci che il router mantenga aperto l'SSH anche dopo un reboot e che non tenti più di auto-aggiornarsi via Internet con un nuovo firmware tagliandoci fuori. * lanciare il client SSH sull'indirizzo della Fonera 169.254.255.1 * loggarsi come root, stessa password di prima * dare il comando {{{ mv /etc/init.d/dropbear /etc/init.d/S50dropbear }}} il daemon SSH ora partirà automaticamente all'avvio * dare {{{ vi /etc/firewall.user }}} e editare il file /etc/firewall.user che contiene le regole che il firewall carica all'avvio, trovare le linee {{{ # iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport 22 -j ACCEPT # iptables -A input_rule -i $WAN -p tcp –dport 22 -j ACCEPT }}} e decommentarle togliendo il "#" e lo spazio * allo stesso modo, editare il file /bin/thinclient (vi /bin/thinclient) e commentare (aggiungendo un "#" all'inizio riga) la linea {{{ . /tmp/.thinclient.sh }}} per evitare di far partire lo script che aggiorna automaticamente La Fonera non appena questa ha una connessione ad Internet, dopodichè aggiungere di seguito (sotto la riga "# . /tmp/.thinclient.sh"): {{{ cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M') }}} per mantenere inattivi in file temporanei ogni script di aggiornamento scaricato dalla Fonera A questo punto saremo in una condizione molto favorevole, avendo il firmware Fon (che è una versione di OpenWrt) running sulla Fonera ed un accesso SSH che ci permette di configurare il router stesso come meglio crediamo. Come accennato nel Disclaimer, potremmo anche limitarci a questo potendo giocare con La Fonera e continuando a mantenenere la promessa fatta a Fon. |
|
Linea 15: | Linea 165: |
== Flashing con Kamikaze == == Prime configurazioni == |
Non avevo il minimo dubbio che avreste continuato a leggere per tirar via del tutto il firmware Fon ed installare una Kamikaze fresca fresca sulla Fonera! Per far questo abbiamo bisogno di accedere a Red``Boot che è il bootloader (un pò come lilo o grub per linux) della Fonera e di molti altri devices con linux embedded. La configurazione di Red``Boot è presente nella partizione "Red``Boot config" della Fonera (/dev/mtd6): {{{ root@OpenWrt:~# cat /proc/mtd dev: size erasesize name mtd0: 00030000 00010000 "RedBoot" mtd1: 006f0000 00010000 "rootfs" mtd2: 00570000 00010000 "rootfs1" mtd3: 00010000 00010000 "config" mtd4: 000b0000 00010000 "vmlinux.bin.l7" mtd5: 0000f000 00010000 "FIS directory" mtd6: 00001000 00010000 "RedBoot config" mtd7: 00010000 00010000 "board_config" }}} Purtroppo la configurazione del kernel presente nel firmware Fon non ne permette la scrittura. Il kernel, contenuto nella partizione "vmlinux.bin.l7" (/dev/mtd4), però è modificabile. Per questo caricheremo prima una versione modificata del kernel compatibile con il firmware della Fonera che permetta la scrittura nella partizione che contiene la configurazione di Red``Boot per poi caricare una configurazione di Red``Boot che ci permetta di collegarci via telnet a Red``Boot stesso ed avere la shell del bootloader. <<BR>> Prima di procedere conviene procurarci i files necessari per l'intera operazione. Nelle versioni precedenti di questo tutorial spiegavo come scaricarli direttamente dalla Fonera ma (thanks Cett1) in seguito si è riscontrato che questo può essere decisamente pericoloso. Può succedere infatti che i siti da cui prelevare i files non siano disponibili e lanciando wget dalla Fonera per scaricare i files si vada invece a scaricare la pagina "Object not found" e possiamo immaginare quale può essere il risultato di installare una pagina HTML al posto del kernel! Quindi scarichiamo i files: * openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma (kernel) * out.hex (nuova configurazione Red``Boot) Questi files possiamo trovarli all'indirizzo "originale": * <<Icon(updated)>> ATTENZIONE: i vecchi link http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma e http://coppercore.net/~kevin/fon/out.hex non sono più validi, per evitare di brickare la fonera vi conviene utilizzare i files allegati a questa pagina (link seguenti). Oppure, se il sito non fosse disponibile, ho allegato questi due files come attachment nel wiki di questo tutorial ([[attachment:md5sums.txt|md5sums]]): * [[attachment:openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma|openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma]] * [[attachment:out.hex|out.hex]] Una volta che ci saremo procurati i files, possiamo passare all'azione vera e propria: * collegare la Fonera al proprio PC come prima, tramite switch o cavo incrociato, impostare sul proprio PC il solito indirizzo 169.254.255.2/24 e copiare nella fonera il file del kernel con scp: {{{ scp openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma root@169.254.255.1:/tmp/ }}} * se proprio non disponiamo di scp, possiamo far si che la Fonera scarichi direttamente da Internet i files in questione (ma lo sconsiglio per i motivi di cui sopra). Per farlo, aprire una shell SSH sulla Fonera e dare il comando: {{{ cd /tmp wget http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma }}} * una volta che il file del kernel è sulla Fonera nella cartella /tmp, sempre in ssh, dare i comandi: {{{ cd /tmp mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7 reboot }}} per installare il nuovo kernel. Si dovrebbe avere un output come questo (l'esempio è con dowload del file da internet): {{{ root@OpenWrt:~#cd /tmp root@OpenWrt:~#wget http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma Connecting to coppercore.net[64.27.5.164]:80 openwrt-ar531x-2.4-vm100% |*****************************| 524288 00:00 ETA root@OpenWrt:~# mtd -e mtd4 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma mtd4 Unlocking mtd4 ... Erasing mtd4 ... Writing from openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma to mtd4 ... [w] root@OpenWrt:~#reboot }}} l'output riportato è quel che ho ottenuto sulla mia Fonera, nel comando mtd write ho sostituito "vmlinux.bin.17" con "mtd4" perchè mtd si rifiutava di scrivere nella partizione se usavo la sua label invece che il nome del device * completato il reboot la Fonera ci farà scrivere nella partizione di configurazione di Red``Boot * come fatto per il kernel, dal PC copiamo nella Fonera il file out.hex con scp: {{{ scp out.hex root@169.254.255.1:/tmp/ }}} * se come prima, non si dispone proprio di di scp, si farà scaricare direttamente alla Fonera il file da Internet (sempre sconsigliato). Per farlo, aprire una shell SSH sulla Fonera e dare il comando: {{{ cd /tmp wget http://coppercore.net/~kevin/fon/out.hex }}} * una volta che il file della nuova configurazione di Red``Boot è sulla Fonera nella cartella /tmp, sempre in ssh, dare i comandi: {{{ cd /tmp mtd -e "RedBoot config" write out.hex "RedBoot config" reboot }}} per installare la nuova configurazione di Red``Boot che ne attivi la shell via telnet. Attenzione: la sovrascrittura del Redboot config renderà la fonera non più bootabile normalmente. Si dovrebbe avere un output come questo (esempio con download del file da Internet): {{{ root@OpenWrt:~# wget http://coppercore.net/~kevin/fon/out.hex Connecting to coppercore.net[64.27.5.164]:80 out.hex 100% |*****************************| 4096 00:00 ETA root@OpenWrt:~# mtd -e "RedBoot config" write out.hex "RedBoot config" Unlocking RedBoot config ... Erasing RedBoot config ... Writing from out.hex to RedBoot config ... [w] root@OpenWrt:~#reboot }}} A questo punto ad ogni riavvio Red``Boot, prima di caricare il firmware, si metterà in ascolto all'indirizzo 192.168.1.254 porta 9000 per darci una shell via telnet. Per questo dovremo disconnettere e riconnettere La Fonera e collegarci via telnet entro i primi 10 secondi premendo ^C (Ctrl+C) per interrompere la sequenza di boot. Molto probabilmente però, il comando precedente avrà distrutto le partizioni della flash, impedendo alla Fonera di avviarsi. Per questo potremmo avere a disposizione molto più dei 10 secondi per fare il nostro telnet: * settiamo sul PC l'indirizzo 192.168.1.166/24 * facciamo partire il server TFTP e facciamolo puntare alla cartella dove abbiamo memorizzato i due files scaricati precedentemente * riavviamo La Fonera scollegando e ricollegando l'alimentazione * facciamo un telnet all'indirizzo 192.168.1.254 porta 9000 * dovrebbe comparire il prompt di Red``Boot: {{{ RedBoot> }}} Attenzione: puTTY in telnet con Red``Boot non ci fa vedere i comandi che scriviamo, è necessario attivare l'eco locale. Ovviamente possiamo utilizzare qualsiasi client telnet. == Installare OpenWrt Kamikaze == === UPDATE SU INSTALLARE OPENWRT KAMIKAZE === Leggete FreifunkFonera per usare AP51 Easy Flash per caricare l'ultimo kamikaze su la Fonera. Il metodo TFTP ormai è antico, e le immagine linkate a questo wiki sono vecchie perchè siamo alla versione 7.09 di Kamikaze. Riassumendo: * FreifunkFonera per scaricare il software che serve a caricare il firmware * http://downloads.openwrt.org/kamikaze/ per scaricare l'ultima versione di Kamikaze * FirmwareNinux se volete provare il firmware sperimentale di Ninux.org derivato da Kamikaze === ORIGINAL: Installare OpenWrt Kamikaze === Red``Boot, oltre ad accettare connessioni in telnet, è capace anche di caricare files dalla rete via TFTP (Trivial File Transfer Protocol) permettendoci così di caricare le immagini del firmware che vogliamo scrivere. Per questo, prima di connetterci a Red``Boot per le modifiche, scarichiamo i files da installare sulla Fonera (a big-big-big thanks to Camicia, Heini66 and Timbuktu): * [[http://ipkg.k1k2.de/openwrt-atheros-2.6-root.jffs2-64k|Root di OpenWrt Kamikaze r6193 compilato per La Fonera]] * [[http://ipkg.k1k2.de/openwrt-atheros-2.6-vmlinux.lzma|Immagine del kernel Kamikaze compilato per La Fonera]] Alternativamente è possibile compilarci da soli l'immagine Open``Wrt, su questo stesso wiki c'è un [[self:OpenWRTCompile|howto per la compilazione]] e, nella stessa pagina trovate anche un'immagine del kernel e della root compilata (e occasionalmente mantenuta) da me. A questo punto ci occorrerà anche procurarci un TFTP server per trasferire questi file alla Fonera. Camicia consiglia [[http://tftpd32.jounin.net/|tftpd32]] per Windows o [[http://ecos.sourceware.org/docs-latest/redboot/configuring-the-redboot-environment.html#AEN351|TFTP server]] per linux. Fatto questo possiamo procedere a flashare La Fonera: * settiamo sul PC l'indirizzo 192.168.1.166/24 * facciamo partire il server TFTP e facciamolo puntare alla cartella dove abbiamo memorizzato i due files scaricati precedentemente * riavviamo La Fonera scollegando e ricollegando l'alimentazione * facciamo un telnet all'indirizzo 192.168.1.254 porta 9000 * al prompt di Red``Boot, diamo un "fis list" per vedere se effettivamente è andato perso il partizionamento della flash; si dovrebbe avere: {{{ RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot> }}} niente paura, reinizializzeremo le partizioni * riformattiamo la flash con: {{{ fis init }}} Le istruzioni seguite finora sono necessarie soltanto la prima volta che flasheremo la nostra Fonera. Potremo eseguire i passi seguenti anche per flashare di nuovo la Fonera nel caso, ad esempio in cui compiliamo una nuova immagine OpenWrt: * diciamo a Red``Boot qual'è il suo indirizzo e qual'è l'indirizzo del nostro TFTP server da cui prendere le immagini con {{{ ip_addr -h 192.168.1.166 -l 192.168.1.254/24 }}} * e carichiamo l'immagine OpenWrt {{{ load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k }}} * quindi creiamo la partizione di OpenWrt scrivendoci l'immagine caricata: {{{ fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs }}} attenzione: questo comando può richiedere fino a 20 minuti per l'esecuzione! Sulla mia Fonera ha richiesto 16 minuti. Non toccate assolutamente nulla mentre viene eseguito il comando! * carichiamo quindi l'immagine del kernel Kamikaze con: {{{ load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma }}} * e creiamo la partizione per il kernel scrivendoci l'immagine con: {{{ fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 }}} attenzione: anche questo comando può richiedere molto tempo. Sulla mia Fonera ha richiesto 2 minuti e mezzo, non toccate nulla finchè non ha finito! * a questo punto possiamo dire a Red``Boot di caricare il nuovo kernel ed eseguirlo con: {{{ fis load -l vmlinux.bin.l7 exec }}} * l'output che dovreste avere dall'intera sessione di modifiche con Red``Boot è: {{{ RedBoot> ip_addr -h 192.168.1.166 -l 192.168.1.254/24 IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0 Default server: 192.168.1.166 RedBoot> fis init About to initialize [format] FLASH image system - continue (y/n)? y *** Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k Using default protocol (TFTP) - Raw file loaded 0x80040450-0x802c044f, assumed entry at 0x80040450 RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs ... Erase from 0xa8030000-0xa8730000: .................................................................................. .............................. ... Program from 0x80040450-0x80740450 at 0xa8030000: .................................................................. .............................................. ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800 RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 ... Erase from 0xa8730000-0xa87e0000: ........... ... Program from 0x80040800-0x800f0800 at 0xa8730000: ........... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> fis load -l vmlinux.bin.l7 Image loaded from 0x80041000-0x80283084 RedBoot> exec }}} Se tutto è andato bene, al prossimo riavvio sulla Fonerà girerà il nostro OpenWrt Kamikaze. '''ATTENZIONE!!!''' Le ultime versioni del kernel sono passate da 704k (0xB0000) a 756k (0xC0000). Per questo, se la fonera vi restituisce questo tipo di errore: {{{ RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x801007ff, assumed entry at 0x80040800 RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 Can't locate c0000(786432) bytes free in FLASH }}} Significa che non c'è spazio a sufficenza per caricare il kernel! E' perciò necessario creare una partizione rootfs di 0x10000 più piccola. Quindi i comandi da dare saranno: {{{ RedBoot> fis init RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-root.jffs2-64k RedBoot> fis create -f 0xA8030000 -l 0x006F0000 rootfs RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 RedBoot> fis load -l vmlinux.bin.l7 }}} (Grazie a bberto84 per la segnalazione e a Thomas per la wikizzazione!) == Login e prime configurazioni == A questo punto la nostra Fonera sarà partita con OpenWrt, la sua configurazione iniziale è fatta in modo che connettendoci via Ethernet ci assegni un indirizzo in DHCP (solitamente 192.168.1.124) e si faccia trovare all'indirizzo 192.168.1.1. Apriamo il browser e colleghiamoci a quest'indirizzo (http://192.168.1.1) per trovare l'intefaccia X-Wrt basata su WebIf che ci chiederà di impostare la password di root: {{attachment:primo accesso.gif}} Una volta impostata la password potremo iniziare a divertirci con l'ottima GUI X-Wrt o connetterci allo stesso indirizzo via SSH: {{attachment:xwrt.gif}} {{{ login as: root password: BusyBox v1.3.1 (2007-01-22 07:45:03 CET) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M KAMIKAZE (bleeding edge, r6193) ------------------- * 10 oz Vodka Shake well with ice and strain * 10 oz Triple sec mixture into 10 shot glasses. * 10 oz lime juice Salute! --------------------------------------------------- root@OpenWrt:~# }}} Attenzione, molte delle funzionalità della GUI non saranno disponibili per la mancanza di pacchetti installati o perchè non ne è stato completato il porting su questa piattaforma. Ad ogni modo le comunità di !OpenWrt e di X-Wrt sono estremamente attive e producono almeno 3-4 changelog al giorno. Per questo compilando le immagini a partire dai sorgenti si avrà la certezza di avere la maggior quantità di funzionalità e i minor numero di bug attualmente disponibili. In questo wiki è presente un'altro tutorial che spiega passo per passo la [[OpenWRTCompile|compilazione di OpenWrt e X-Wrt]]. Alternativamente si può comunque far riferimento a questo repository per molti pacchetti precompilati: http://ipkg.k1k2.de/packages/ == Tornare al firmware Fon == I firmware originali Fon, si compongono principalmente di due parti: - un header - un tarball In genere nell'header si trovano le informazioni riguardanti la versione, le versioni di upgrade supportate e spesso degli hash che consentono di verificare l'autenticità del firmware e l'integrità del file binario. Proprio tramite questo header che il firmware originale di Fon accetterà solo upgrade verso firmware originali Fon, per questo abbiamo dovuto seguire tutta questa complessa procedura per installare qualcosa di diverso, altrimenti avremmo solo caricato un'immagine di firmware OpenWrt dall'interfaccia http della Fonera originale. Per quel che riguarda poi l'altra porzione del firmware, va ripetuto che il firmware Fon si basa esso stesso su OpenWrt, per questo i loro firmware contengono esattamente un'immagine kernel ed un'immagine del sistema come quelle prodotte dalla compilazione di OpenWrt. Per questo, per riportare una Fonera hackerata al firmware originale Fon, ci basterà estrarre dal tarball i due file del kernel e della root e caricarli nella Fonera da Red``Boot così come fatto per le immagini OpenWrt installate nel par. 6. Procediamo: * procuriamoci un firmware Fon originale (ovviamente preferiremo la versione 7.1.1 facilmente "bucabile") * diamo il comando: {{{ dd if=fonera_0.7.1.1.fon of=fonera.tar.gz bs=519 skip=1 }}} che farà copiare il file fonera_0.7.1.1.fon nel file fonera.tar.gz a blocchi da 519 bytes saltando il primo. Avremo: {{{ blaxwan@fabbblnx $ dd if=fonera_0.7.1.1.fon of=fonera.tar.gz bs=519 skip=1 3903+1 records in 3903+1 records out 2026164 bytes (2.0 MB) copied, 0.017765 s, 114 MB/s blaxwan@fabbblnx $ ls -la drwxr-xr-x 2 blaxwan users 4096 Jan 28 15:14 . drwxr-xr-x 6 blaxwan users 4096 Jan 28 15:11 .. -rw-r--r-- 1 blaxwan users 2026164 Jan 28 15:14 fonera.tar.gz -r-xr-xr-x 1 blaxwan users 2026683 Jan 28 15:13 fonera_0.7.1.1.fon }}} * in sostanza, in questo modo, abbiamo eliminato i primi 519 byte dal firmware originale Fon, la parte restante non è altro che un archivio compresso che contiene i file che ci interessano, quindi possiamo decomprimerlo: {{{ tar -xzf fonera.tar.gz }}} * a questo punto dovremmo avere i due files che compongono il firmware vero e proprio, più un file con qualche informazione sulla versione dell'hotfix e lo script che la Fonera utilizza per installarsi l'upgrade: {{{ blaxwan@fabbblnx $ tar -xzf fonera.tar.gz blaxwan@fabbblnx $ ls -la total 6040 drwxr-xr-x 2 blaxwan users 4096 Jan 28 15:35 . drwxr-xr-x 6 blaxwan users 4096 Jan 28 15:11 .. -rw-r--r-- 1 blaxwan users 2026164 Jan 28 15:14 fonera.tar.gz -r-xr-xr-x 1 blaxwan users 2026683 Jan 28 15:13 fonera_0.7.1.1.fon -rw-r--r-- 1 blaxwan users 105 Nov 17 16:08 hotfix -rw-r--r-- 1 blaxwan users 524288 Nov 23 13:12 kernel.lzma -rw-r--r-- 1 blaxwan users 1572864 Nov 23 13:12 rootfs.squashfs -rwxr-xr-x 1 blaxwan users 761 Nov 21 19:18 upgrade blaxwan@fabbblnx $ }}} A questo punto abbiamo a disposizione i due files che ci occorrono per ri-flashare la Fonera. Possiamo seguire la stessa procedura descritta al par. 6 di questo tutorial per installare queste due immagini. Quindi copieremo questi due files nella root del nostro TFTP server (o faremo puntare il TFTP server alla directory in cui abbiamo estratto i due files). Dopodichè configureremo sul nostro computer un indirizzo ip idoneo a comunicare con Red``Boot (192.168.1.X) e riavvieremo la fonera connettendoci a Red``Boot tramite telnet. {{{ blaxwan@fabbblnx ~ $ telnet 192.168.1.254 9000 Trying 192.168.1.254... Connected to 192.168.1.254. Escape character is '^]'. RedBoot> }}} Quindi comunichiamo a Red``Boot qual'è il suo indirizzo e a quale indirizzo può trovare il server TFTP con il comando: {{{ ip_addr -h 192.168.1.166 -l 192.168.1.254/24 }}} Non farà male dare una riformattata alla flash prima di ricrearne le partizioni, niente paura, la formattazione della flash lascerà inalterate le partizioni contenenti Red``Boot e la sua configurazione, potremo poi verificarlo con un "fis list": {{{ fis init }}} A questo punto possiamo caricare il file rootfs.squashfs e creare la partizione della root nella flash della Fonera con il comando: {{{ load -r -v -b 0x80040450 rootfs.squashfs }}} e creare la partizione della root nella flash della Fonera con il comando: {{{ fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs }}} L'ultimo passaggio sarà il caricare il file del kernel con: {{{ load -r -b %{FREEMEMLO} kernel.lzma }}} e creare la partizione relativa: {{{ fis create -l 0x000b0000 -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 }}} ATTENZIONE: a differenza dei comandi impartiti nell'installazione di OpenWrt, nella reinstallazione del firmware originale Fon è importante aggiungere '''-l 0x000b0000 ''' al comando '''fis create''' della partizione del kernel altrimenti Red``Boot creerà una partizione più piccola del dovuto impedendo poi upgrade a firmware superiori (con immagine kernel superiore ai 512 Kbyte). Finite queste operazioni dovreste avere una flash di questo tipo: {{{ RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 rootfs 0xA8030000 0xA8030000 0x00700000 0x00000000 vmlinux.bin.l7 0xA8730000 0x80041000 0x000B0000 0x80041000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000 }}} L'output dell'intera sessione di modifiche dovrebbe essere identico a questo: {{{ blaxwan@fabbblnx ~ $ telnet 192.168.1.254 9000 Trying 192.168.1.254... Connected to 192.168.1.254. Escape character is '^]'. RedBoot> RedBoot> ip_addr -h 192.168.1.166 -l 192.168.1.254/24 IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0 Default server: 192.168.1.166 RedBoot> RedBoot> fis init About to initialize [format] FLASH image system - continue (y/n)? y *** Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000 RedBoot> RedBoot> load -r -v -b 0x80040450 rootfs.squashfs Using default protocol (TFTP) - Raw file loaded 0x80040450-0x801c044f, assumed entry at 0x80040450 RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs ... Erase from 0xa8030000-0xa8720000: ................................................................................... ... Program from 0x80040450-0x80730450 at 0xa8030000: ................................................................................... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> RedBoot> load -r -b %{FREEMEMLO} kernel.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x800c07ff, assumed entry at 0x80040800 RedBoot> RedBoot> fis create -l 0x000b0000 -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 ... Erase from 0xa8730000-0xa87e0000: ........... ... Program from 0x80040800-0x800c0800 at 0xa8730000: ........ ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . }}} Se tutto è andato bene potete caricare il kernel ed eseguirlo (o riavviare la Fonera) con: {{{ RedBoot> fis load -l vmlinux.bin.l7 Image loaded from 0x80041000-0x801ba000 RedBoot> exec }}} e usare la Fonera....originale! Happy Hacking!<<BR>> '''...::..:::'''BlaXwan''':::..::...''' <<BR>> |
Linea 19: | Linea 577: |
== Fonti == * http://www.paologatti.it/index.php/2007/01/19/effettuare-il-downgrade-della-fonera-al-firmware-071r1/ Firmware downgrade * http://stefans.datenbruch.de/lafonera/ Primo hack * http://bingobommel.blogspot.com/2006/11/hacking-la-fonera-part-ii.html Secondo hack * http://www.notmart.org/index.php/BlaBla/Hacking_la_fonera..._part_III Terzo hack * http://www.dd-wrt.com/phpBB2/viewtopic.php?t=9011 Tutorial completo per flashare La Fonera * http://www.dd-wrt.com/phpBB2/viewtopic.php?p=49785&sid=61857c536f41d249b201703a4fe166ba#49785 Tutorial per tornare al firmware Fon == Ringraziamenti == Si ringrazia immensamente: * la comunità '''[[http://www.ninux.org|ninux.org]]''' (di cui faccio parte) che ospita questo tutorial, per avermi fatto venire una voglia matta di smanettare sugli apparati wireless * Raffaele (aka Thomas Anderson), Oscar e [[http://zioproto.ninux.org/|Saverio]] (aka Zio``PRo``To) per i suggerimenti in m-list e le pagine di trucchi e consigli su La Fonera scritte su questo wiki * Paolo Gatti (aka OnE) per i metodi di downgrade * Stefan Tomanek e Michael Kebe per il primo hack * BingoBommel per il secondo hack * Mart per il terzo hack * Camicia, Heini66 e Timbuktu per il kernel modificato per la scrittura, la configurazione di Red``Boot, l'immagine del kernel Kamikaze, OpenWrt compilato, e gli splendidi tutorial! * e, ovviamente, tutta la comunità di sviluppo di '''[[http://openwrt.org|OpenWrt]]''' ---- |
Questo tutorial riguarda la fonera 2100. Per un hack veloce della fonera 2100: QuickFoneraHack. Per la fonera 2200: Fon2200Hack
...::: La Fonera: dalla scatola a Open-Wrt :::...
a cura di BlaXwan
Ultimo aggiornamento: 22/01/2008
Indice
1. Disclaimer
Prima di iniziare ci sono un pò di cose che vorrei sottolineare.
Fon ha investito e continua a investire molte risorse ed energie per diffondere la sua idea di condivisione dell'accesso ad Internet in tutto il mondo. Modificare i suoi "social router", specialmente se ottenuti gratuitamente, con un firmware che non collabora al loro progetto non è una bella cosa. Il presente tutorial rappresenta quindi solo un'occasione di studio per imparare il funzionamento dei router wireless e dei firmware linux embedded. Dopo aver esaurito la nostra sete di conoscenza ed imparato ciò che si voleva su La Fonera, consiglio vivamente di riportare La Fonera a firmware originale Fon almeno fin quando non sarà possibile installare ed utilizzare i servizi originali Fon anche su una versione di firmware diverso, cosa del tutto realizzabile considerando che il firmware Fon è esso stesso basato su OpenWrt.
Le informazioni contenute in questo tutorial, inoltre, non sono farina del mio sacco. Mi sono semplicemente limitato a cercare su Internet le migliori (a mio avviso) informazioni disponibili per riprogrammare il router e qui riporto semplicemente il racconto passo passo di come ho installato OpenWrt in "salsa" Kamikaze su La Fonera. Ovviamente ho solo riportato i passi che ho eseguito sulla mia Fonera, ma non ho (ancora) ripetuto il tutto basandomi su questo tutorial. Perciò ogni segnalazione di inesattezza o suggerimento è più che bene accetto. Il tutorial è ancora da considerarsi Work in progress, quindi verrà aggiornato man mano con nuove informazioni/integrazioni.
Questo tutorial è da considerarsi a solo scopo informativo e ogni tipo di modifica che apporterete alle vostre Fonera sono a vostro rischio, pericolo e responsabilità. Così come gli autori originali delle informazioni che qui riporto e ringrazio, non mi assumo alcuna responsabilità riguardo a danni causati a cose e persone per quanto riportato in queste pagine.
Happy hacking!
...::..:::BlaXwan:::..::...
25 gennaio 2007
2. Overview
Il FON2100A, meglio conosciuto come La Fonera, è un bellissimo router sociale basato su un System on a Chip (SOC) della Atheros (Atheros AR2315) venduto da Fon ad un prezzo estremamente basso. In un'unità di dimensioni molto compatte, tanto da stare nel palmo di una mano, integra un processore MIPS 4KEc V6.4, una scheda wireless, una scheda Ethernet, una flash da 8 MB e 16 MB di RAM!
La procedura qui descritta permette di installare OpenWrt in configurazione Kamikaze via software, senza alcun intervento hardware e senza necessità alcuna di aprire il router. Ovviamente sarebbe molto più facile e diretto operando via HW ma, per farlo, sarebbe necessario disporre di un'interfaccia JTAG o almeno di un'interfaccia seriale per questo router rendendo, alla fine, comunque più complicata (e rischiosa) la modifica.
Si presume abbiate già collegato la prima volta la vostra Fonera ed abbiate eseguito i passi riportati nella guida Fon per attivare le due reti wireless che fornisce di default FON_AP e MyPlace e che sappiate già come connettervi a MyPlace e connettervi all'interfaccia http del router stesso.
Per la modifica, innanzitutto faremo (se necessario) un downgrade del firmware Fon per riportarlo ad una versione che ha un bug tale da permetterci di aprire una shell via SSH, in seguito ci garantiremo la possibilità di modificare direttamente il contenuto della flash allo scopo di ottenere l'accesso a RedBoot, l'ambiente di bootstrap del router, allo scopo di caricare l'immagine dell'OS e il kernel di Kamikaze.
3. Tornare al firmware 7.1.1
Warning - Con le Fonere arrivate a dicembre 2007 questo step non è stato necessario, potete andare avanti al prossimo capitolo
Alla data in cui scrivo, La Fonera arriva con un firmware versione 7.1.2 o 7.1.3, versioni che correggono il bug che invece ci è necessario per garantirci un accesso via SSH. Per questo la prima operazione sarà quella di riportare il router alla versione 7.1.1 (0.7.1 r1). Se invece il vostro router ha già a bordo questa versione potete saltare al paragrafo successivo. Per il downgrade è possibile procedere almeno in tre modi (thanks to OnE), nel mio caso il primo ha funzionato:
Reset. E' il metodo più semplice:
- disconnettere La Fonera da Internet (cavo Ethernet)
- premere e tener premuto il pulsante di reset (posto sotto il router) per più di 15 secondi
- riavviare il router scollegando e ricollegando l'alimentazione
connettersi all'interfaccia http della Fonera senza connettere La Fonera stessa ad Internet (si può fare via wireless o con un cavo crossed utilizzando sul PC l'indirizzo 169.254.255.2/24 per trovare La Fonera all'indirizzo http://169.254.255.1/) e verificare che il firmware sia quello giusto (7.1.1)
Downgrade via http.
- disconnettere La Fonera da Internet (cavo Ethernet)
scaricare sul PC il firmware 7.1.1, fonera_0.7.1.1.fon
- collegarsi alla Fonera via wireless oppure con cavo cross (169.254.255.2/24 sul PC, Fonera all'indirizzo 169.254.255.1)
- aprire l'interfaccia di amministrazione della Fonera, andare in firmware upgrade e caricare il firmware 7.1.1
- molto probabilmente il router non accetterà il downgrade a 7.1.1 dandovi il seguente output:
Stopping services... kill: Could not kill pid '620': No such process kill: Could not kill pid '458': No such process Memoria liberata7872 Salvataggio configurazioni... tar: Removing leading '/' from member names Unlocking config ... Writing from /tmp/config.tar.gz to config ... [ ][e][w] This is a FON reflash v2 archive Verified OK Upgrade name: reflash_all This hotfix is intended for 0.7.0. The firmware version on this router is 0.7.1. Il processo di aggiornamento non è andato a buon fine Controlla che l'aggiornamento .fon che stai installando sia valido per questa versione del firmware e per questo modello di router Riavviamento servizi...
- Ma, nonostante questo errore, il firmware dovrebbe essere installato, riavviare La Fonera e controllare che sia così
2-step downgrade. Se non si è riusciti nel downgrade precedente è perchè la 7.1.1 è un'aggiornamento della 7.0.x quindi verrà accettato solo da questa serie di firmware. Per questo possiamo portare la Fonera prima alla 7.0.4 e quindi alla 7.1.1
- disconnettere La Fonera da Internet (cavo Ethernet)
scaricare sul PC il firmware 7.0.4, attualmente si può trovarlo a questo indirizzo in versione compressa, decomprimerlo prima di utilizzarlo
- collegarsi alla Fonera via wireless oppure con cavo cross (169.254.255.2/24 sul PC, Fonera all'indirizzo 169.254.255.1)
- aprire l'interfaccia di amministrazione della Fonera, andare in firmware upgrade e caricare il firmware 7.0.4
- La Fonera si riavvia, alla ripartenza controllare di avere il firmware 7.0.4 installato
- connettere La Fonera ad Internet e connettersi alla wireless della Fonera
- sulla Fonera partirà la procedura automatica di download che installerà il firmware 7.1.1
- disconnettere La Fonera da Internet non appena l'aggiornamento sarà completato, possiamo accorgercene dall'interruzione del collegamento wireless. Questo per evitare che successivamente La Fonera scarichi ed installi anche la versione 7.1.2
A questo punto, se uno dei quattro metodi ha funzionato, avremo La Fonera con firmware Fon 7.1.1, pronti per hackerarne l'interfaccia http ed aprire una shell via SSH.
RADIUS + DNS spoofing (http://stefans.datenbruch.de/lafonera/#kolofonium)
- attraverso l'interfaccia http inserire come DNS l'indirizzo 88.198.165.155 (corrispondente a kolofonium.datenbruch.de - DISCLAIMER: per utilizzare questo metodo vi dovete fidare del proprietario del server)
- riavviare il router ed entrare in ssh attraverso la rete wireless interna
vedere qui le istruzioni per tenere l'ssh aperto
- ri-cambiare il DNS
4. Aprire l'ssh (e tenerlo aperto)
Questo hack (thanks to Mart) semplice semplice ci permette di aprire una shell SSH iniettando comandi tramite postdata in una delle cgi della Fonera. Attenzione però: funziona solo con il firmware 7.1.1 che a questo punto dovremmo avere. Nel caso abbiamo firmware precedenti e non vogliamo installare il 7.1.1 possiamo provare ad utilizzare il primo o il secondo hack linkati nel paragrafo Fonti. Procediamo:
- creare un file html (ad es. primo.html) sul PC con il contenuto seguente:
<html> <head></head><body><center> <form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data"> <input name="username" value="$(/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT)" size="68" /> <input type="submit" name="submit" value="Submit" /> </form> </center></body></html>
- creare un'altro file html (ad es. secondo.html) con il contenuto seguente:
<html> <head></head><body><center> <form method="post" action="http://169.254.255.1/cgi-bin/webif/connection.sh" enctype="multipart/form-data"> <input name="username" value="$(/etc/init.d/dropbear)" size="68" ><input type="submit" name="submit" value="Submit" /> </form> </center></body></html>
- collegare la fonera al PC con un cavo cross ed impostare sul PC un'indirizzo del tipo 169.254.255.2/24
- aprire il primo file html, cliccare su "Submit", verranno chieste le credenziali di accesso alla Fonera, inserirle (se non le si è modificate sono username admin, password admin)
- aprire il secondo file html, cliccare su "Submit", verranno chieste le credenziali di accesso alla Fonera, inserirle
- in questo modo, tramite il post dei due form contenuti nei file html abbiamo iniettato i comandi
/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT /etc/init.d/dropbear
- per, rispettivamente, aprire la porta 22 (SSH) nel firewall della Fonera e lanciare il daemon SSH (Dropbear)
A questo punto abbiamo la possibilità di entrare in SSH nella Fonera, prima di andare oltre però, vogliamo assicurarci che il router mantenga aperto l'SSH anche dopo un reboot e che non tenti più di auto-aggiornarsi via Internet con un nuovo firmware tagliandoci fuori.
- lanciare il client SSH sull'indirizzo della Fonera 169.254.255.1
- loggarsi come root, stessa password di prima
- dare il comando
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
- il daemon SSH ora partirà automaticamente all'avvio
- dare
vi /etc/firewall.user
- e editare il file /etc/firewall.user che contiene le regole che il firewall carica all'avvio, trovare le linee
# iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport 22 -j ACCEPT # iptables -A input_rule -i $WAN -p tcp –dport 22 -j ACCEPT
- e decommentarle togliendo il "#" e lo spazio
- allo stesso modo, editare il file /bin/thinclient (vi /bin/thinclient) e commentare (aggiungendo un "#" all'inizio riga) la linea
. /tmp/.thinclient.sh
- per evitare di far partire lo script che aggiorna automaticamente La Fonera non appena questa ha una connessione ad Internet, dopodichè aggiungere di seguito (sotto la riga "# . /tmp/.thinclient.sh"):
cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M')
- per mantenere inattivi in file temporanei ogni script di aggiornamento scaricato dalla Fonera
A questo punto saremo in una condizione molto favorevole, avendo il firmware Fon (che è una versione di OpenWrt) running sulla Fonera ed un accesso SSH che ci permette di configurare il router stesso come meglio crediamo. Come accennato nel Disclaimer, potremmo anche limitarci a questo potendo giocare con La Fonera e continuando a mantenenere la promessa fatta a Fon.
5. Accesso a RedBoot
Non avevo il minimo dubbio che avreste continuato a leggere per tirar via del tutto il firmware Fon ed installare una Kamikaze fresca fresca sulla Fonera! Per far questo abbiamo bisogno di accedere a RedBoot che è il bootloader (un pò come lilo o grub per linux) della Fonera e di molti altri devices con linux embedded. La configurazione di RedBoot è presente nella partizione "RedBoot config" della Fonera (/dev/mtd6):
root@OpenWrt:~# cat /proc/mtd dev: size erasesize name mtd0: 00030000 00010000 "RedBoot" mtd1: 006f0000 00010000 "rootfs" mtd2: 00570000 00010000 "rootfs1" mtd3: 00010000 00010000 "config" mtd4: 000b0000 00010000 "vmlinux.bin.l7" mtd5: 0000f000 00010000 "FIS directory" mtd6: 00001000 00010000 "RedBoot config" mtd7: 00010000 00010000 "board_config"
Purtroppo la configurazione del kernel presente nel firmware Fon non ne permette la scrittura. Il kernel, contenuto nella partizione "vmlinux.bin.l7" (/dev/mtd4), però è modificabile. Per questo caricheremo prima una versione modificata del kernel compatibile con il firmware della Fonera che permetta la scrittura nella partizione che contiene la configurazione di RedBoot per poi caricare una configurazione di RedBoot che ci permetta di collegarci via telnet a RedBoot stesso ed avere la shell del bootloader.
Prima di procedere conviene procurarci i files necessari per l'intera operazione. Nelle versioni precedenti di questo tutorial spiegavo come scaricarli direttamente dalla Fonera ma (thanks Cett1) in seguito si è riscontrato che questo può essere decisamente pericoloso. Può succedere infatti che i siti da cui prelevare i files non siano disponibili e lanciando wget dalla Fonera per scaricare i files si vada invece a scaricare la pagina "Object not found" e possiamo immaginare quale può essere il risultato di installare una pagina HTML al posto del kernel! Quindi scarichiamo i files:
- openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma (kernel)
out.hex (nuova configurazione RedBoot)
Questi files possiamo trovarli all'indirizzo "originale":
ATTENZIONE: i vecchi link http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma e http://coppercore.net/~kevin/fon/out.hex non sono più validi, per evitare di brickare la fonera vi conviene utilizzare i files allegati a questa pagina (link seguenti).
Oppure, se il sito non fosse disponibile, ho allegato questi due files come attachment nel wiki di questo tutorial (md5sums):
Una volta che ci saremo procurati i files, possiamo passare all'azione vera e propria:
- collegare la Fonera al proprio PC come prima, tramite switch o cavo incrociato, impostare sul proprio PC il solito indirizzo 169.254.255.2/24 e copiare nella fonera il file del kernel con scp:
scp openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma root@169.254.255.1:/tmp/
- se proprio non disponiamo di scp, possiamo far si che la Fonera scarichi direttamente da Internet i files in questione (ma lo sconsiglio per i motivi di cui sopra). Per farlo, aprire una shell SSH sulla Fonera e dare il comando:
cd /tmp wget http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
- una volta che il file del kernel è sulla Fonera nella cartella /tmp, sempre in ssh, dare i comandi:
cd /tmp mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7 reboot
- per installare il nuovo kernel. Si dovrebbe avere un output come questo (l'esempio è con dowload del file da internet):
root@OpenWrt:~#cd /tmp root@OpenWrt:~#wget http://coppercore.net/~kevin/fon/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma Connecting to coppercore.net[64.27.5.164]:80 openwrt-ar531x-2.4-vm100% |*****************************| 524288 00:00 ETA root@OpenWrt:~# mtd -e mtd4 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma mtd4 Unlocking mtd4 ... Erasing mtd4 ... Writing from openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma to mtd4 ... [w] root@OpenWrt:~#reboot
- l'output riportato è quel che ho ottenuto sulla mia Fonera, nel comando mtd write ho sostituito "vmlinux.bin.17" con "mtd4" perchè mtd si rifiutava di scrivere nella partizione se usavo la sua label invece che il nome del device
completato il reboot la Fonera ci farà scrivere nella partizione di configurazione di RedBoot
- come fatto per il kernel, dal PC copiamo nella Fonera il file out.hex con scp:
scp out.hex root@169.254.255.1:/tmp/
- se come prima, non si dispone proprio di di scp, si farà scaricare direttamente alla Fonera il file da Internet (sempre sconsigliato). Per farlo, aprire una shell SSH sulla Fonera e dare il comando:
cd /tmp wget http://coppercore.net/~kevin/fon/out.hex
una volta che il file della nuova configurazione di RedBoot è sulla Fonera nella cartella /tmp, sempre in ssh, dare i comandi:
cd /tmp mtd -e "RedBoot config" write out.hex "RedBoot config" reboot
per installare la nuova configurazione di RedBoot che ne attivi la shell via telnet. Attenzione: la sovrascrittura del Redboot config renderà la fonera non più bootabile normalmente.
Si dovrebbe avere un output come questo (esempio con download del file da Internet):
root@OpenWrt:~# wget http://coppercore.net/~kevin/fon/out.hex Connecting to coppercore.net[64.27.5.164]:80 out.hex 100% |*****************************| 4096 00:00 ETA root@OpenWrt:~# mtd -e "RedBoot config" write out.hex "RedBoot config" Unlocking RedBoot config ... Erasing RedBoot config ... Writing from out.hex to RedBoot config ... [w] root@OpenWrt:~#reboot
A questo punto ad ogni riavvio RedBoot, prima di caricare il firmware, si metterà in ascolto all'indirizzo 192.168.1.254 porta 9000 per darci una shell via telnet. Per questo dovremo disconnettere e riconnettere La Fonera e collegarci via telnet entro i primi 10 secondi premendo ^C (Ctrl+C) per interrompere la sequenza di boot. Molto probabilmente però, il comando precedente avrà distrutto le partizioni della flash, impedendo alla Fonera di avviarsi. Per questo potremmo avere a disposizione molto più dei 10 secondi per fare il nostro telnet:
- settiamo sul PC l'indirizzo 192.168.1.166/24
- facciamo partire il server TFTP e facciamolo puntare alla cartella dove abbiamo memorizzato i due files scaricati precedentemente
- riavviamo La Fonera scollegando e ricollegando l'alimentazione
- facciamo un telnet all'indirizzo 192.168.1.254 porta 9000
dovrebbe comparire il prompt di RedBoot:
RedBoot>
Attenzione: puTTY in telnet con RedBoot non ci fa vedere i comandi che scriviamo, è necessario attivare l'eco locale. Ovviamente possiamo utilizzare qualsiasi client telnet.
6. Installare OpenWrt Kamikaze
6.1. UPDATE SU INSTALLARE OPENWRT KAMIKAZE
Leggete FreifunkFonera per usare AP51 Easy Flash per caricare l'ultimo kamikaze su la Fonera. Il metodo TFTP ormai è antico, e le immagine linkate a questo wiki sono vecchie perchè siamo alla versione 7.09 di Kamikaze.
Riassumendo:
FreifunkFonera per scaricare il software che serve a caricare il firmware
http://downloads.openwrt.org/kamikaze/ per scaricare l'ultima versione di Kamikaze
FirmwareNinux se volete provare il firmware sperimentale di Ninux.org derivato da Kamikaze
6.2. ORIGINAL: Installare OpenWrt Kamikaze
RedBoot, oltre ad accettare connessioni in telnet, è capace anche di caricare files dalla rete via TFTP (Trivial File Transfer Protocol) permettendoci così di caricare le immagini del firmware che vogliamo scrivere. Per questo, prima di connetterci a RedBoot per le modifiche, scarichiamo i files da installare sulla Fonera (a big-big-big thanks to Camicia, Heini66 and Timbuktu):
Alternativamente è possibile compilarci da soli l'immagine OpenWrt, su questo stesso wiki c'è un howto per la compilazione e, nella stessa pagina trovate anche un'immagine del kernel e della root compilata (e occasionalmente mantenuta) da me. A questo punto ci occorrerà anche procurarci un TFTP server per trasferire questi file alla Fonera. Camicia consiglia tftpd32 per Windows o TFTP server per linux. Fatto questo possiamo procedere a flashare La Fonera:
- settiamo sul PC l'indirizzo 192.168.1.166/24
- facciamo partire il server TFTP e facciamolo puntare alla cartella dove abbiamo memorizzato i due files scaricati precedentemente
- riavviamo La Fonera scollegando e ricollegando l'alimentazione
- facciamo un telnet all'indirizzo 192.168.1.254 porta 9000
al prompt di RedBoot, diamo un "fis list" per vedere se effettivamente è andato perso il partizionamento della flash; si dovrebbe avere:
RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot>
- niente paura, reinizializzeremo le partizioni
- riformattiamo la flash con:
fis init
Le istruzioni seguite finora sono necessarie soltanto la prima volta che flasheremo la nostra Fonera. Potremo eseguire i passi seguenti anche per flashare di nuovo la Fonera nel caso, ad esempio in cui compiliamo una nuova immagine OpenWrt:
diciamo a RedBoot qual'è il suo indirizzo e qual'è l'indirizzo del nostro TFTP server da cui prendere le immagini con
ip_addr -h 192.168.1.166 -l 192.168.1.254/24
e carichiamo l'immagine OpenWrt
load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k
quindi creiamo la partizione di OpenWrt scrivendoci l'immagine caricata:
fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
- attenzione: questo comando può richiedere fino a 20 minuti per l'esecuzione! Sulla mia Fonera ha richiesto 16 minuti. Non toccate assolutamente nulla mentre viene eseguito il comando!
- carichiamo quindi l'immagine del kernel Kamikaze con:
load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
- e creiamo la partizione per il kernel scrivendoci l'immagine con:
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
- attenzione: anche questo comando può richiedere molto tempo. Sulla mia Fonera ha richiesto 2 minuti e mezzo, non toccate nulla finchè non ha finito!
a questo punto possiamo dire a RedBoot di caricare il nuovo kernel ed eseguirlo con:
fis load -l vmlinux.bin.l7 exec
l'output che dovreste avere dall'intera sessione di modifiche con RedBoot è:
RedBoot> ip_addr -h 192.168.1.166 -l 192.168.1.254/24 IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0 Default server: 192.168.1.166 RedBoot> fis init About to initialize [format] FLASH image system - continue (y/n)? y *** Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k Using default protocol (TFTP) - Raw file loaded 0x80040450-0x802c044f, assumed entry at 0x80040450 RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs ... Erase from 0xa8030000-0xa8730000: .................................................................................. .............................. ... Program from 0x80040450-0x80740450 at 0xa8030000: .................................................................. .............................................. ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800 RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 ... Erase from 0xa8730000-0xa87e0000: ........... ... Program from 0x80040800-0x800f0800 at 0xa8730000: ........... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> fis load -l vmlinux.bin.l7 Image loaded from 0x80041000-0x80283084 RedBoot> exec
Se tutto è andato bene, al prossimo riavvio sulla Fonerà girerà il nostro OpenWrt Kamikaze.
ATTENZIONE!!! Le ultime versioni del kernel sono passate da 704k (0xB0000) a 756k (0xC0000). Per questo, se la fonera vi restituisce questo tipo di errore:
RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x801007ff, assumed entry at 0x80040800 RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 Can't locate c0000(786432) bytes free in FLASH
Significa che non c'è spazio a sufficenza per caricare il kernel! E' perciò necessario creare una partizione rootfs di 0x10000 più piccola. Quindi i comandi da dare saranno:
RedBoot> fis init RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-root.jffs2-64k RedBoot> fis create -f 0xA8030000 -l 0x006F0000 rootfs RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 RedBoot> fis load -l vmlinux.bin.l7
(Grazie a bberto84 per la segnalazione e a Thomas per la wikizzazione!)
7. Login e prime configurazioni
A questo punto la nostra Fonera sarà partita con OpenWrt, la sua configurazione iniziale è fatta in modo che connettendoci via Ethernet ci assegni un indirizzo in DHCP (solitamente 192.168.1.124) e si faccia trovare all'indirizzo 192.168.1.1. Apriamo il browser e colleghiamoci a quest'indirizzo (http://192.168.1.1) per trovare l'intefaccia X-Wrt basata su WebIf che ci chiederà di impostare la password di root:
Una volta impostata la password potremo iniziare a divertirci con l'ottima GUI X-Wrt o connetterci allo stesso indirizzo via SSH:
login as: root password: BusyBox v1.3.1 (2007-01-22 07:45:03 CET) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M KAMIKAZE (bleeding edge, r6193) ------------------- * 10 oz Vodka Shake well with ice and strain * 10 oz Triple sec mixture into 10 shot glasses. * 10 oz lime juice Salute! --------------------------------------------------- root@OpenWrt:~#
Attenzione, molte delle funzionalità della GUI non saranno disponibili per la mancanza di pacchetti installati o perchè non ne è stato completato il porting su questa piattaforma. Ad ogni modo le comunità di OpenWrt e di X-Wrt sono estremamente attive e producono almeno 3-4 changelog al giorno. Per questo compilando le immagini a partire dai sorgenti si avrà la certezza di avere la maggior quantità di funzionalità e i minor numero di bug attualmente disponibili. In questo wiki è presente un'altro tutorial che spiega passo per passo la compilazione di OpenWrt e X-Wrt. Alternativamente si può comunque far riferimento a questo repository per molti pacchetti precompilati: http://ipkg.k1k2.de/packages/
8. Tornare al firmware Fon
I firmware originali Fon, si compongono principalmente di due parti: - un header - un tarball In genere nell'header si trovano le informazioni riguardanti la versione, le versioni di upgrade supportate e spesso degli hash che consentono di verificare l'autenticità del firmware e l'integrità del file binario. Proprio tramite questo header che il firmware originale di Fon accetterà solo upgrade verso firmware originali Fon, per questo abbiamo dovuto seguire tutta questa complessa procedura per installare qualcosa di diverso, altrimenti avremmo solo caricato un'immagine di firmware OpenWrt dall'interfaccia http della Fonera originale. Per quel che riguarda poi l'altra porzione del firmware, va ripetuto che il firmware Fon si basa esso stesso su OpenWrt, per questo i loro firmware contengono esattamente un'immagine kernel ed un'immagine del sistema come quelle prodotte dalla compilazione di OpenWrt. Per questo, per riportare una Fonera hackerata al firmware originale Fon, ci basterà estrarre dal tarball i due file del kernel e della root e caricarli nella Fonera da RedBoot così come fatto per le immagini OpenWrt installate nel par. 6. Procediamo:
- procuriamoci un firmware Fon originale (ovviamente preferiremo la versione 7.1.1 facilmente "bucabile")
- diamo il comando:
dd if=fonera_0.7.1.1.fon of=fonera.tar.gz bs=519 skip=1
- che farà copiare il file fonera_0.7.1.1.fon nel file fonera.tar.gz a blocchi da 519 bytes saltando il primo. Avremo:
blaxwan@fabbblnx $ dd if=fonera_0.7.1.1.fon of=fonera.tar.gz bs=519 skip=1 3903+1 records in 3903+1 records out 2026164 bytes (2.0 MB) copied, 0.017765 s, 114 MB/s blaxwan@fabbblnx $ ls -la drwxr-xr-x 2 blaxwan users 4096 Jan 28 15:14 . drwxr-xr-x 6 blaxwan users 4096 Jan 28 15:11 .. -rw-r--r-- 1 blaxwan users 2026164 Jan 28 15:14 fonera.tar.gz -r-xr-xr-x 1 blaxwan users 2026683 Jan 28 15:13 fonera_0.7.1.1.fon
- in sostanza, in questo modo, abbiamo eliminato i primi 519 byte dal firmware originale Fon, la parte restante non è altro che un archivio compresso che contiene i file che ci interessano, quindi possiamo decomprimerlo:
tar -xzf fonera.tar.gz
- a questo punto dovremmo avere i due files che compongono il firmware vero e proprio, più un file con qualche informazione sulla versione dell'hotfix e lo script che la Fonera utilizza per installarsi l'upgrade:
blaxwan@fabbblnx $ tar -xzf fonera.tar.gz blaxwan@fabbblnx $ ls -la total 6040 drwxr-xr-x 2 blaxwan users 4096 Jan 28 15:35 . drwxr-xr-x 6 blaxwan users 4096 Jan 28 15:11 .. -rw-r--r-- 1 blaxwan users 2026164 Jan 28 15:14 fonera.tar.gz -r-xr-xr-x 1 blaxwan users 2026683 Jan 28 15:13 fonera_0.7.1.1.fon -rw-r--r-- 1 blaxwan users 105 Nov 17 16:08 hotfix -rw-r--r-- 1 blaxwan users 524288 Nov 23 13:12 kernel.lzma -rw-r--r-- 1 blaxwan users 1572864 Nov 23 13:12 rootfs.squashfs -rwxr-xr-x 1 blaxwan users 761 Nov 21 19:18 upgrade blaxwan@fabbblnx $
A questo punto abbiamo a disposizione i due files che ci occorrono per ri-flashare la Fonera. Possiamo seguire la stessa procedura descritta al par. 6 di questo tutorial per installare queste due immagini. Quindi copieremo questi due files nella root del nostro TFTP server (o faremo puntare il TFTP server alla directory in cui abbiamo estratto i due files). Dopodichè configureremo sul nostro computer un indirizzo ip idoneo a comunicare con RedBoot (192.168.1.X) e riavvieremo la fonera connettendoci a RedBoot tramite telnet.
blaxwan@fabbblnx ~ $ telnet 192.168.1.254 9000 Trying 192.168.1.254... Connected to 192.168.1.254. Escape character is '^]'. RedBoot>
Quindi comunichiamo a RedBoot qual'è il suo indirizzo e a quale indirizzo può trovare il server TFTP con il comando:
ip_addr -h 192.168.1.166 -l 192.168.1.254/24
Non farà male dare una riformattata alla flash prima di ricrearne le partizioni, niente paura, la formattazione della flash lascerà inalterate le partizioni contenenti RedBoot e la sua configurazione, potremo poi verificarlo con un "fis list":
fis init
A questo punto possiamo caricare il file rootfs.squashfs e creare la partizione della root nella flash della Fonera con il comando:
load -r -v -b 0x80040450 rootfs.squashfs
e creare la partizione della root nella flash della Fonera con il comando:
fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
L'ultimo passaggio sarà il caricare il file del kernel con:
load -r -b %{FREEMEMLO} kernel.lzma
e creare la partizione relativa:
fis create -l 0x000b0000 -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
ATTENZIONE: a differenza dei comandi impartiti nell'installazione di OpenWrt, nella reinstallazione del firmware originale Fon è importante aggiungere -l 0x000b0000 al comando fis create della partizione del kernel altrimenti RedBoot creerà una partizione più piccola del dovuto impedendo poi upgrade a firmware superiori (con immagine kernel superiore ai 512 Kbyte).
Finite queste operazioni dovreste avere una flash di questo tipo:
RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 rootfs 0xA8030000 0xA8030000 0x00700000 0x00000000 vmlinux.bin.l7 0xA8730000 0x80041000 0x000B0000 0x80041000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
L'output dell'intera sessione di modifiche dovrebbe essere identico a questo:
blaxwan@fabbblnx ~ $ telnet 192.168.1.254 9000 Trying 192.168.1.254... Connected to 192.168.1.254. Escape character is '^]'. RedBoot> RedBoot> ip_addr -h 192.168.1.166 -l 192.168.1.254/24 IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0 Default server: 192.168.1.166 RedBoot> RedBoot> fis init About to initialize [format] FLASH image system - continue (y/n)? y *** Initialize FLASH Image System ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000 RedBoot> RedBoot> load -r -v -b 0x80040450 rootfs.squashfs Using default protocol (TFTP) - Raw file loaded 0x80040450-0x801c044f, assumed entry at 0x80040450 RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs ... Erase from 0xa8030000-0xa8720000: ................................................................................... ... Program from 0x80040450-0x80730450 at 0xa8030000: ................................................................................... ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: . RedBoot> RedBoot> load -r -b %{FREEMEMLO} kernel.lzma Using default protocol (TFTP) Raw file loaded 0x80040800-0x800c07ff, assumed entry at 0x80040800 RedBoot> RedBoot> fis create -l 0x000b0000 -r 0x80041000 -e 0x80041000 vmlinux.bin.l7 ... Erase from 0xa8730000-0xa87e0000: ........... ... Program from 0x80040800-0x800c0800 at 0xa8730000: ........ ... Erase from 0xa87e0000-0xa87f0000: . ... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
Se tutto è andato bene potete caricare il kernel ed eseguirlo (o riavviare la Fonera) con:
RedBoot> fis load -l vmlinux.bin.l7 Image loaded from 0x80041000-0x801ba000 RedBoot> exec
e usare la Fonera....originale!
Happy Hacking!
...::..:::BlaXwan:::..::...
9. Fonti
http://www.paologatti.it/index.php/2007/01/19/effettuare-il-downgrade-della-fonera-al-firmware-071r1/ Firmware downgrade
http://stefans.datenbruch.de/lafonera/ Primo hack
http://bingobommel.blogspot.com/2006/11/hacking-la-fonera-part-ii.html Secondo hack
http://www.notmart.org/index.php/BlaBla/Hacking_la_fonera..._part_III Terzo hack
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=9011 Tutorial completo per flashare La Fonera
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=49785&sid=61857c536f41d249b201703a4fe166ba#49785 Tutorial per tornare al firmware Fon
10. Ringraziamenti
Si ringrazia immensamente:
la comunità ninux.org (di cui faccio parte) che ospita questo tutorial, per avermi fatto venire una voglia matta di smanettare sugli apparati wireless
Raffaele (aka Thomas Anderson), Oscar e Saverio (aka ZioPRoTo) per i suggerimenti in m-list e le pagine di trucchi e consigli su La Fonera scritte su questo wiki
- Paolo Gatti (aka OnE) per i metodi di downgrade
- Stefan Tomanek e Michael Kebe per il primo hack
BingoBommel per il secondo hack
- Mart per il terzo hack
Camicia, Heini66 e Timbuktu per il kernel modificato per la scrittura, la configurazione di RedBoot, l'immagine del kernel Kamikaze, OpenWrt compilato, e gli splendidi tutorial!
e, ovviamente, tutta la comunità di sviluppo di OpenWrt
(BlaXwan) to be continued...