Sblocco modem ADSL AGTWI su linux e senza saldature

Il modem ADSL2+ Wi-Fi N Technicolor, detto anche AGTWI, è fornito da Telecom Italia per i contratti residenziali; il provider non prevede il suo uso come router. Questa è evidentemente una limitazione artificiale del software fornito dal provider, dato che l'hardware è pienamente capace di funzionare come router ADSL.

L'hardware è basato su quello del router Technicolor TG582n, la variante usata da Telecom viene chiamata TG582Tn.

La procedura di sblocco del modem ADSL AGTWI per permetterne l'uso come router è interessante: invece di sfruttare una vulnerabilità (o una backdoor) del software per ottenere privilegi e modificare la configurazione predefinita, si aggira completamente il problema sostituendo il bootloader con quello di un dispositivo abbastanza simile; dopo aver fatto ciò diventa possibile installare software di altri provider che permettono l'uso del dispositivo come router.

È possibile trovare il TG582n in due revisioni hardware, con relativa variante software: DANT-T con flash da 8MiB e DANT-1 con flash da 16MiB in configurazione dual-bank (cioè con la possibilità di contenere due immagini software da 8MiB, una alternativa all'altra). Il TG582Tn di Telecom Italia invece usa la variante software DANT-V.

La procedura per sostituire il bootloader DANT-V con quello DANT-T è stata proposta da roleo (necessaria la registrazione al forum) sul forum Il Punto Tecnico e ADSL, ed è stata ripresa fra gli altri da Rix94 e Bestemmie Digitali.

I documenti attualmente presenti in rete spiegano come saldare una interfaccia SPI per porta parallela alla memoria flash per modificarne il contenuto, e dicono di modificare il bootloader a mano copiando e incollando regioni di memoria da un file all'altro.

La procedura può essere semplificata e resa più robusta se mettiamo meglio a fuoco gli obiettivi:

  1. Leggere da una memoria flash che usa il protocollo SPI.
  2. Modificare un file binario sostituendo alcune sue regioni con quelle di un altro file binario.
  3. Scrivere su una memoria flash che usa il protocollo SPI.

Interfaccia seriale

Per lo sblocco del modem nessuna saldatura è strettamente necessaria, tuttavia, per avere maggiore controllo su cosa sta succedendo, si può saldare opzionalmente una striscia di pin sulla piazzola J3 e cortocircuitare le piazzole R62 e R63 per avere accesso all'interfaccia seriale:

Interfaccia seriale su TG582Tn

Per il collegamento si può usare un adattatore USB-seriale basato su chip Prolific PL-2303HX o un adattatore multi protocollo basato su chip FTDI FT2232H o simili.

Leggere la memoria flash SPI

La memoria flash nel mio caso è una Spansion S25FL129P; per accedere al suo contenuto può essere usato un qualsiasi programmatore SPI, non necessariamente uno auto-costruito per porta parallela.

Come programmatore SPI si può usare per esempio un TIAO USB Multi-Protocol Adapter seguendo questo schema:

Collegamento TUMPA-S25FL129P

NOTA: il datasheet di S25FL129P riporta che i pin HOLD# (per mettere il chip in pausa) e #W (per abilitare la protezione dalla scrittura) sono active-low quindi per disabilitarne le funzioni dovrebbero essere collegati a VCC, ma in questo caso va bene anche collegarli a GND, per questi motivi:

  • la funzione HOLD# si attiva al fronte discendente, cioè al cambio di livello logico da alto a basso, e collegando il pin a GND il livello è sempre basso, quindi non si attiva mai;
  • l'effetto di W# dipende anche da altri registri di stato del chip, in questo caso viene del tutto disabilitata la funzione di protezione (dal datasheet: SRWD: 0 = No protection, even when W#/ACC is low).

Per il collegamento si può usare un morsetto di test per chip SOIC-16 come il Pomona 5252, in questo modo nessuna saldatura è strettamente necessaria:

Collegamento TUMPA-TG582Tn

Per leggere la memoria usando il TUMPA si può usare flashrom:

sudo flashrom -p ft2232_spi:type=tumpa,port=A -Vr dump.bin

È utile conservare una copia di backup del contenuto della flash; potrà essere usata per riportare il dispositivo al suo stato originale.

Modificare il bootloader

A questo punto basterebbe scrivere il file bootloader_pn.bin fornito da roleo per avere un dispositivo DANT-T ed essere in grado di installare un firmware generico per DANT-T, ma così facendo si avrebbero gli stessi dati (chiavi, certificati, MAC address, serial number, product version) del modem da cui è stato preso quel file.

Per mantenere i dati del nostro dispositivo, si dovrà applicare una “patch” al file bootloader_pn.bin.

Il file bootloader_pn.bin è composto da due regioni:

  • da 0x00000000 a 0x0001ffff c'è il bootloader; più precisamente c'è una routine di unpacking ed il binario vero e proprio del bootloader compresso con LZMA.
  • da 0x00020000 a 0x0003ffff c'è la “configurazione di fabbrica”; la regione viene anche chiamata mtdss e contiene i dati identificativi del singolo dispositivo.

Invece di copiare e incollare regioni di file binari a mano, è possibile usare dd in uno script di shell per automatizzare la procedura:

#!/bin/sh
#
# patch_dant-v_dump.sh - patch DANT-V flash dump with DANT-T bootloader
#
# Copyright (C) 2014  Antonio Ospite <ao2@ao2.it>
#
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.

set -e

copy_region()
{
  local INPUT_FILE="$1"
  local OUTPUT_FILE="$2"

  local START_ADDRESS=$3
  local END_ADDRESS=$4

  local SIZE=$(($END_ADDRESS - $START_ADDRESS + 1))

  dd if="$INPUT_FILE" of="$OUTPUT_FILE" \
    skip=$(($START_ADDRESS)) count=$SIZE seek=$(($START_ADDRESS)) \
    conv=notrunc iflag=skip_bytes,count_bytes oflag=seek_bytes
}

erase_region()
{
  local OUTPUT_FILE="$1"
  local START_ADDRESS=$2
  local END_ADDRESS=$3

  local SIZE=$(($END_ADDRESS - $START_ADDRESS + 1))

  # Write all 0xff to $OUTPUT_FILE
  dd if=/dev/zero count=$SIZE iflag=count_bytes | \
    tr '\0' '\377' | \
    dd of="$OUTPUT_FILE" seek=$(($START_ADDRESS)) conv=notrunc oflag=seek_bytes
}

DANT_V_DUMP_FILE=dump.bin
DANT_T_BOOTLOADER=bootloader_pn.bin
PATCHED_DANT_V_DUMP_FILE=dump_patched.bin

# Take the DANT-T bootloader
copy_region "$DANT_T_BOOTLOADER" "$PATCHED_DANT_V_DUMP_FILE" 0x00000000 0x0001ffff

# Take the DANT-V mtdss region (the board specific data: serial number,
# certificates, mac addresses, etc.)
copy_region "$DANT_V_DUMP_FILE" "$PATCHED_DANT_V_DUMP_FILE" 0x00020000 0x0003ffff

# Patch the product code and the firmware variant code, e.g.:
#   DANT-V -> WL
#   DANT-T -> WJ
# This does not appear to be strictly necessary, DANT-T firmwares will install
# even if we keep the DANT-V data here.
copy_region "$DANT_T_BOOTLOADER" "$PATCHED_DANT_V_DUMP_FILE" 0x000216fc 0x00021713

# Patch the mtdss region in order to make the device look like a DANT-T,
# otherwise the client will still ask a DANT-V file (output of bootpd):
#
#   bootpd: info(6):   requested path=""  file="DANT-V"
#
# It is not enough to patch only the board name (0x00021727 0x00021728), some
# more data needs to be copied in order to prevent a failure with
# BLFLAG_INV_RI
copy_region "$DANT_T_BOOTLOADER" "$PATCHED_DANT_V_DUMP_FILE" 0x00021727 0x00021730

# Erase all the rest of the flash, this will prevent a failure with:
#
#   Version BL: 1.0.5
#   Unhandled TLB
#
#   Unhandled exception
#   EPC=0x8130ff30, BadVAddr=0xc0830000, RA=8130fef8
#   ...
#
# The bootloader will still output the message BLFLAG_FLASH_FAIL (bad FVP) but
# that is OK, it will be fixed whith the firmware installation via tftp.
erase_region "$PATCHED_DANT_V_DUMP_FILE" 0x00040000 0x0ffffff

Scrivere la memoria flash SPI

Il file dump_patched.bin creato dallo script precedente può essere scritto con flashrom:

sudo flashrom -p ft2232_spi:type=tumpa,port=A -Vw patched_dump.bin

Installare un nuovo firmware

Per installare un nuovo firmware si può evitare di usare il Technicolor Home Install Wizard se si configura un server tftp.


CommentsSyndicate content

Ma senza una interfaccia

Anonymous's picture

Ma senza una interfaccia seriale come posso aggiornare il firmware?

L'interfaccia seriale non è

ao2's picture

L'interfaccia seriale non è necessaria per l'aggiornamento, serve solo a vedere i messaggi del modem prima o dopo la modifica del firmware, per curiosità; non verrebbe comunque usata durante la scrittura del firmware.

L'aggiornamento si fa collegando il morsetto SOIC-16 direttamente al chip di memoria (senza saldature) ed eseguendo flashrom su un PC, con il modem spento.

Ciao ciao, Antonio

Grazie per la guida, ho

Sandro's picture

Grazie per la guida, ho questo modem anche io e mi piacerebbe provare ad aggiornarlo. Tanto tempo fa ho costruito un programmatore usb con Pic 18f255 con lo schema di "Darkstar" per leggere la nand della xbox. Secondo lei potrei usarlo per eseguire la procedura? Basta trovare i 7 pin corrispondenti ai segnali di clk, mosi, miso, etc del Pic? Grazie in anticipo.

Ciao Sandro, qualsiasi

ao2's picture

Ciao Sandro, qualsiasi programmatore SPI (Serial Peripheral Interface) va bene, non conosco quello a cui fai riferimento.

Ciao ciao, Antonio

Ringrazio x la cortese

Sandro's picture

Ringrazio x la cortese risposta....con piacere riporterò il risultato della mia prova appena possibile.

Buongiorno, Sarei

Davide's picture

Buongiorno,
Sarei intenzionato a sbloccare un modem come quello dell'articolo... qual'è l'attrezzatura necessaria? Dall'articolo non è molto chiaro.

L'unica cosa strettamente

ao2's picture

L'unica cosa strettamente necessaria è il programmatore SPI (uno qualsiasi che operi a 3.3V) da collegare alla flash del modem per poterla riprogrammare.

Se si vogliono evitare saldature si deve aggiungere un morsetto di test (in formato SOIC-16) che facilita il collegamento programmatore-modem.

Ciao, Antonio

Salve, ma tale procedura si

Anonymous's picture

Salve,

ma tale procedura si può utilizzare anche per i modem forniti da infostrada che hanno la versione DANT-8? O si sa come si deve procedere per questi TG582 v2?

Grazie mille,
Andrea

Ciao Andrea, non conosco i

ao2's picture

Ciao Andrea, non conosco i TG582 v2 quindi non so se le stesse modifiche software sono valide.

Comunque se hai il programmatore SPI puoi sempre fare un backup della flash e provare; in caso di fallimento puoi ripristinare il contenuto originale della memoria flash.

Ciao ao2, grazier per la

Andrea's picture

Ciao ao2,

grazier per la risposta. In realtà questa sembrerebbe essere la versione del TG582 che fornisce ultimamente Infostrada con a bordo un firmware castrato per benino (non c'e' nemmeno il telnet aperto). Mi chiedo se addirittura DANT-V per Telecom e DANT-8 per Infostrada non siano due modi diversi di chiamare lo stesso chip flash. Una domanda, ma in quello che hai tu lasciando la flash originale il software Thomson rilevava il router? Nel mio caso no.

Grazie ancora,
Andrea

Aprilo; ma se l'hanno

ao2's picture

Aprilo; ma se l'hanno chiamato TG582 probabilmente avrà la stessa CPU e magari la stessa RAM, il chip della memoria flash potrebbe anche essere diverso (produttore, dimensione) ma credo sarà compatibile coi firmware dei modelli da 8MiB di flash, magari c'è qualche altra piccola differenza hardware (configurazione dei LED per esempio), ma questo non pregiudicherebbe il funzionamento generale.

Per questo ti dicevo che puoi provare la procedura descritta qui, una volta che sei sicuro di poter ripristinare, via SPI o via JTAG, un backup completo del sistema originale.

Ma non mi assumo responsabilità su eventuali danni, eh :)

Non ho provato il software Thomson originale, non ho Windows, ho fatto tutto via tftp.

Ottima guida. Per quanto

Gianamedeo's picture

Ottima guida. Per quanto concerne invece il modello DA2210 di ADB, vi sono novità su come sbloccarlo? Grazie.

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
A
b
C
1
X
Y
Enter the code without spaces.