Visualizzazione post con etichetta firmware. Mostra tutti i post
Visualizzazione post con etichetta firmware. Mostra tutti i post

sabato 9 luglio 2016

Hacking firmware La Fonera Atheros AR2315

Frugando nei cassetti è saltata fuori una vecchia Fonera, un Access Point che Fon ha commercializzato qualche anno fa ad un prezzo particolarmente conveniente (per l'epoca) e che consentiva di collegarsi alla rete Fon in tutto il mondo per assicurarsi una connessione WiFi gratis.
Ormai nei cassetti da almeno 7 - 8 anni e' venuto il momento di passarla in rassegna e di tentare di utilizzarla in qualche modo.
In giro per la rete si trovano molti articoli su come modificarne il firmware ed installare OpenWrt, il noto programma di gestione per Router.
Ho quindi tentato anche io la strada dell'hacking.
La maggior parte degli articoli la mettono giu' complicata, considerando la connessione seriale al connettore ICSP come una cosa estremamente difficile ed onerosa; Io non ho trovato tutta questa difficolta, devo essere sincero, anzi, e' stato piu' pesante il lavoro di lettura ed analisi dei tanti sistemi alternativi alla semplice connessione seriale, che sconsiglio proprio di percorrere le strade proposte nella maggior parte dei Blog, che indicano come preferibile la strada di  modificare il firmware originale facendo un down-grade, per utilizzare un bug di una vecchia versione Fon ed ottenere i privilegi di root.

Semplicemente collegando un convertitore seriale alla porta ICSP, facilmente individuabile all'interno del circuito,  si ottiene immediatamente la possibilita' di comunicare con il Bootloader della macchina.

Hardware

ArchitectureMIPS 4KEc
Vendorn/a
BootloaderRedBoot
System-On-ChipAtheros AR2315
CPU Speed183 MHz
Flash size8 MiB
RAM16 MiB
WirelessIntegrated Atheros 802.11b/g
Ethernet1x RJ45
USBNo
SerialYes
JTAGNo
 
Puoi guardare la foto del mio circuito i cavi sono collegati cosi:
Grigio -- GND
Viola  --      RX
Arancio ----TX

Qui invece sono riportate le connessioni viste da dietro della scatola:
+-------------------+
|GND| . |TXD|RXD| . |
|VCC| . | . | . | . |
+-------------------+
+-----+ +--------+    +---+
|Power| |Ethernet|    |Ant|
Collegato il tutto e fatto partire il programma di lettura dei dati ricevuti su seriale (per Windows per esempio Putty e in Linux o MacOsx puoi usare Minicom) questo riportato qui di seguito e' quello che dovresti leggere
+PHY ID is 0022:5521
Ethernet eth0: MAC address xx:xx:xx:xx:xx
IP: 0.0.0.0/255.255.255.255, Gateway: 0.0.0.0
Default server: 0.0.0.0
RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version v1.3.0 - built 16:57:58, Aug  7 2006
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
Board: ap51
RAM: 0x80000000-0x81000000, [0x80040450-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 1.000 seconds - enter ^C to abort
^C
RedBoot>



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

Il firmware piu' aggiornato al momento in cui scrivo lo puoi trovare a questo indirizzo

Scarica i due file e passali nella cartella su cui punta il server TFTP che avrai gia' predisposto magari leggendo questa guida che ho fatto proprio ieri

Con questa istruzione setterai il numero IP del AP  (-l)ocal  e quello del server dove si collegherà con la prossima istruzione per scaricare il firmware (il tuo server TFTP) (-h)ost

RedBoot> ip_address -h 192.168.0.2 -l 192.168.0.1/24
Con questa istruzione il AP si collega al Server TFTP e si scarica il novo Firmware:

RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded [...], assumed entry at [...]
Questa istruzione serve per cancellare dalla Flash memory il precedente firmware (sei sicuro???)



RedBoot> fis init
Poi si installa il nuovo :

RedBoot> fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
... Erase from 0xa8730000-0xa87e0000: ...........
... Program from 0x80041000-0x800f1000 at 0xa8730000: ...........
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
Stessa cosa per le partizioni:
RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
Using default protocol (TFTP)

Raw file loaded 0x80041000-0x80200fff, assumed entry at 0x80041000


RedBoot> fis create rootfs
... Erase from 0xa8030000-0xa8730000: ................................................................................................................
... Program from 0x80041000-0x80741000 at 0xa8030000: ..............................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
il comando sotto serve per controllare che tutto sia andato a buon fine
fconfig -l -n
Nel caso che il parametro  boot_script_data  sia diverso da 

.. fis load -l vmlinux.bin.l7 
.. exec
Allora :
RedBoot> fconfig boot_script_data 
boot_script_data: 
.. fis load -l vmlinux.bin.1
.. exec
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>> 
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> 
A questo punto si puo' resettare il nostro nuovo AP
RedBoot> reset
Adesso dovresti trovare il tuo nuovo Access Point con OpenWrt che risponderà chimandolo con un browser web all'indirizzo:
http://192.168.1.1

E' inutile dire che devi avere i parametri corretti per poterlo collegare nella configurazione della tua scheda di rete.









lunedì 4 gennaio 2016

Recenti battaglie con ESP8266


Dopo una lunga inattività blogghereccia, provo a ricominciare a documentare alcune delle esperienze che ho fatto in questo lungo periodo di assenza dai social.
Una delle ultime fide alle quali ho dedicato  del tempo, è stata quella di domare la scheda ESP8266-01, il modulo riportato in foto qui a fianco.
Grande come un francobollo (forse meno!) la schedina monta un microcontrollore a 40Mhz di tutto rispetto e consente (dopo che sarai riuscito a domarla!!) di avere semplicemente una connessione internet ovunque tu abbia una seriale disponibile. Infatti puo' essere collegata a qualsiasi periferica o microprocessore, o computer, soltanto collegando GND TX ed RX, in questo modo si potra' accedere ad internet attraverso il WiFi standard per la quale questa meravigliosa scheda è stata progettata.

Purtroppo chi ha commissionato il progetto, doveva avere necessita' soltanto di un paio di PIN del microprocessore, magari e' stata utilizzata come interruttore remoto, oppure come controllo remoto della temperatura. Sta di fatto che, sebbene il microcontrollore ESP8266 che è il chip contenuto nella scheda, abbia a disposizione molti PIN, la circuiteria ne mette a disposizione solo 2, GPIO0 e GPIO2.

Sebbene molti blog riportano tanti esperimenti e circuiti dedicati, ho trovato in pochissimi Blog la descrizione  dettagliata di come fare la programmazione della schedina; Questo fatto mi fa pensare che la maggior parte dei blasonati blog in giro per la rete, in effetti sia soltanto online per produrre contenuti a cottimo, senza effettivamente testare quanto descritto nei tutorial pubblicati. Il lavoro maggiore per chi ha la passione del Maker, è proprio quello di mediare le tante ciarlonerie che si trovano in giro per ottenere il risultato desiderato.
Dico questo perchè dopo aver letto una diecina di blog e tutorial in giro, in nessuno ho trovato la semplice descrizione di come fare per programmare VERAMENTE la scheda. La maggior parte ti descrive come ricevere i dati, ma se prima non la programmi....c'è poco da ricevere!!!

Quindi come si fa?

Questo di seguito e' il circuito da montare per poter programmare la schedina. Vanno montati due pulsanti (ma si puo' fare anche facendo corto tra due fili, tanto serve soltanto per la fase di programmazione, se sei bravo col codice e ti funziona tutto alla "prima botta" puoi anche montare tutto volante e fare contatto tra due fili)
Per mettere il microcontrollore in modalità programmazione si deve mettere a GND in PIN  GPIO0 durante la fase di accensione oppure durante il Reset (secondo pulsante).
Quindi collegato il modulino e preparato lo sketch sulla IDE di Arduino, basta premere e tenere premuto il pulsante P1 (GPIO0 - GND) e poi premere P2 (RST - GND) - Rilasciare P2 e in fine  rilasciare P1 ma solo  dopo iniziato l'upload del binario

Questa notizia, direi quasi banale, e' fondamentale da conoscere per poter inserire il proprio codice nel microcontrollore, ma, controllate voi, nessuno lo spiega chiaramente, quindi per poterlo fare ho perduto giorni di prove senza risultato.
Adesso sappiamo come fare a inserire il codice nel modulo.
Alla prossima puntata, un esempio di come utilizzare il modulino in un progettino.
Ciao