?>/script>'; } ?> [Desarrollo] OpenWrt en Netgear CG3100Dv3 Widgets Magazine

Autor Tema: [Desarrollo] OpenWrt en Netgear CG3100Dv3  (Leído 39641 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Noltari

  • Visitante
[Desarrollo] OpenWrt en Netgear CG3100Dv3
« en: 28-01-2014, 12:14 (Martes) »
Ahora mismo no hay soporte oficial para este router en OpenWrt.

Firmwares oficiales de Ono
N/A

Wiki
http://wiki.openwrt.org/toh/netgear/cg3100dv3

Código Fuente
N/A

OpenWrt
N/A

Estado
Averiguando los registros del SoC e intentando arrancar una imagen ramdisk...

Agradecimientos
Muchas gracias a unqeko por donar este router a la ciencia ^^.

Saludos!

Pteridium

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #1 en: 28-01-2014, 20:35 (Martes) »
Creo que Florian tiene algo, aunque está atascado con el los drivers para ethernet (AFAIK se llama GMAC) y usb-otg. Además, danitool tiene un Cisco EPC3825.

Buena suerte, que os hará falta.

danitool

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #2 en: 28-01-2014, 22:00 (Martes) »
Dios nos pille confesados.

 La tarea obligatoria ahora mismo es encontrar material para soldar un socket en el lugar de la flash SPI, y así poder desenchufarla, leerla/programarla y volverla a enchufar cuando sea necesario.
Y tal vez o bien comprar un programador de memorias SPI o fabricarlo. Estoy bastante pez con el tema.

Si alguien tiene alguna recomendación sobre esto que lo indique.

Noltari

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #3 en: 29-01-2014, 15:15 (Miércoles) »
Creo que Florian tiene algo, aunque está atascado con el los drivers para ethernet (AFAIK se llama GMAC) y usb-otg. Además, danitool tiene un Cisco EPC3825.

Buena suerte, que os hará falta.
Contactaré con él a ver que me cuenta.
Pensaba que el driver GMAC era para la plataform bcm47xx. De cualquier forma, este lleva un 53115, así que b53 debería valer...

Dios nos pille confesados.

 La tarea obligatoria ahora mismo es encontrar material para soldar un socket en el lugar de la flash SPI, y así poder desenchufarla, leerla/programarla y volverla a enchufar cuando sea necesario.
Y tal vez o bien comprar un programador de memorias SPI o fabricarlo. Estoy bastante pez con el tema.

Si alguien tiene alguna recomendación sobre esto que lo indique.
Esto es lo que llevo hasta el momento:

Le he soldado a la flash unos pines para poder trabajar cómodamente. Yo me apaño así pero lo que propones tú seguro que es mucho mejor xD.

Como primer intento para ver si las conexiones estaban bien he probado a leer la flash con el arduino y una librería llamada S25FLx a la que he tenido que hacer algunos ajustes.
https://github.com/BleepLabs/S25FLx/

Una vez que he comprobado que la flash se podía leer mi primer pensamiento ha sido utilizar el Altera USB Blaster para acceder por SPI y leer los datos, pero por algún motivo no me funciona...
Así que después me he acordado de lo que me dijo danitool de utilizar su livebox para leer la flash por SPI y he pensado "coño, tienes una Raspberry, úsala huevón".
Así que he encontrado un programa que se llama flashrom que puede utilizar la interfaz SPI de la raspberry para leer/escribir/borrar flashes SPI.
http://flashrom.org/RaspberryPi

Ya os contaré cuando tenga más "avances".

P.D: estoy aprendiendo bastante con la tontería xD.

Saludos!
« Última modificación: 08-07-2014, 20:09 (Martes) por Noltari »

Pteridium

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #4 en: 29-01-2014, 15:29 (Miércoles) »
Ya os contaré cuando tenga más "avances".

P.D: estoy aprendiendo bastante con la tontería xD.

Saludos!

>:( >:( >:( >:( >:( >:( >:(

rafius15

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #5 en: 29-01-2014, 21:18 (Miércoles) »
Espectacular trabajo compañero! Yo tengo un cg3100DV3 con la versión de firmware V1.04.02 por si necesitas algo, me tienes para lo que necesites!

Mucha suerte!

Noltari

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #6 en: 29-01-2014, 21:31 (Miércoles) »
Buenas otra vez,

Al final he conseguido hacer un dump de la flash con la Raspberry Pi. La verdad es que ha ido bastante rápido y sin problemas.
https://dl.dropboxusercontent.com/u/4708147/routers/bcm33xx/CG3100Dv3/flash.rar
Por si las moscas he hecho 3 dumps y los he comparado para ver que no había diferencias :P.

Me he servido de esta página como apoyo: http://www.win-raid.com/t58f16-Guide-Recover-from-failed-BIOS-flash-using-Raspberry-PI.html
La verdad es que está bastante bien detallado.

Por lo que puedo ver en el dump de la flash hay partición nvram.
A parte de eso simplemente decir que con esto ya tengo un punto de partida si me cargo algo xD.
Lo próximo será ver si se pueden extraer los firmwares como hago con brcm63xx, aunque me parece que no...
¿Alguien tiene algún firmware por ahí de este router? Me vendría bien para ver la estructura :$.

Saludos!
« Última modificación: 08-07-2014, 20:17 (Martes) por Noltari »

danitool

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #7 en: 30-01-2014, 17:04 (Jueves) »
Finalmente usé el estilo Noltari, sin desoldar la flash, conectando directamente al SPI que trae el livebox. Para ello primero tuve que usar este código en el kernel del livebox:
Código: [Seleccionar]
static struct mtd_partition epc_partitions[] = {
[0] = {
.name = "epc3825spi",
.offset = 0x0,
.size = 0x800000,
},
};

static struct flash_platform_data blue5g_spiflash_data = {
.parts = epc_partitions,
.nr_parts = ARRAY_SIZE(epc_partitions),
};


static struct spi_board_info blue5g_spi_info[] = {
{
.bus_num = 0,
.chip_select = 0,
.mode = 0,
.max_speed_hz = 781000,
.modalias = "m25p80",
.platform_data = &blue5g_spiflash_data,
},
};


/*Livebox 1 - DV4210*/
static struct board_info __initdata board_blue5g9 = {
.name = "blue5g9",
.expected_cpu_id = 0x6348,

.has_uart0 = 1,
.has_enet0 = 1,
.has_enet1 = 1,
.has_pci = 1,

.enet0 = {
.has_phy = 1,
.use_internal_phy = 1,
},

.enet1 = {
 .has_phy = 1,
 .phy_id = 31,
},

.has_ohci0 = 1,
.has_pccard = 1,

.has_dsp = 0, /*TODO some Liveboxes have dsp*/
.dsp = {
.gpio_rst = 6,
.gpio_int = 35,
.cs = 2,
.ext_irq = 2,
},

.leds = {
{
.name = "blue5g9:red:adsl-fail",
.gpio = 0,
.active_low = 0,
.default_trigger = "default-on",
},
{
.name = "blue5g9:red:adsl",
.gpio = 1,
},
{
.name = "blue5g9:red:traffic",
.gpio = 2,
},
{
.name = "blue5g9:red:phone",
.gpio = 3,
},
{
.name = "blue5g9:red:wifi",
.gpio = 4,
},
},

.buttons = {
{
.desc = "BTN_1",
.gpio = 36,
.active_low = 1,
.type = EV_KEY,
.code = BTN_1,
.debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
},
{
.desc = "BTN_2",
.gpio = 7,
.active_low = 1,
.type = EV_KEY,
.code = BTN_2,
.debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
},
},
.spis = blue5g_spi_info,
.num_spis = ARRAY_SIZE(blue5g_spi_info),
};

El cual hace el pegamento con el driver que controla los chips flash SPI.

Simplemente uní con cables directamente el SPI del livebox1 a la memoria flash del Cisco epc3825. Arrancado el livebox, detecta la flash del cisco como un mtd más:

Código: [Seleccionar]
[    0.488000] Creating 5 MTD partitions on "physmap-flash.0":
[    0.492000] 0x000000000000-0x000000010000 : "CFE"
[    0.504000] 0x000000010100-0x000000110000 : "kernel"
[    0.508000] mtd: partition "kernel" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[    0.528000] 0x000000110000-0x0000007f0000 : "rootfs"
[    0.540000] mtd: device 2 (rootfs) set to be root filesystem
[    0.544000] mtd: partition "rootfs_data" created automatically, ofs=0x2e0000, len=0x510000
[    0.556000] 0x0000002e0000-0x0000007f0000 : "rootfs_data"
[    0.564000] 0x0000007f0000-0x000000800000 : "nvram"
[    0.576000] 0x000000010000-0x0000007f0000 : "linux"
[    0.592000] m25p80 spi0.0: found s25sl064p, expected m25p80
[    0.600000] m25p80 spi0.0: s25sl064p (8192 Kbytes)
[    0.604000] Creating 1 MTD partitions on "spi0.0":
[    0.612000] 0x000000000000-0x000000800000 : "epc3825spi"
[    0.624000] bcm63xx-spi bcm63xx-spi: at 0xfffe0c00 (irq 9, FIFOs size 63)
En este momento me dispongo a hacer un backup con dd.. pero me suelta este mensaje:
Código: [Seleccionar]
[  308.112000] m25p80 spi0.0: unable to do transfers larger than FIFO size (517 > 63)
Lo intento de nuevo pero esta vez con un tamaño de bloque de 24
Código: [Seleccionar]
root@OpenWrt:/tmp# dd bs=24 if=/dev/mtd6 of=epcbackup.bin
y bingo!, es lento pero crea el backup sin problemas
https://drive.google.com/file/d/0B-EMoBe-_OdBbEUzdzRscXpFYTA
Quien decía que el livebox1 no tenía mucha utilidad?  >:D

Ahí va una imagen del livebox1 en acción succionando los datos del Cisco:


Ahora bien, tengo mis dudas de si será capaz de hacer escritura, por lo de tener que especificar un tamaño de bloque más pequeño que el bloque de la flash SPI.
« Última modificación: 30-01-2014, 17:06 (Jueves) por danitool »

Noltari

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #8 en: 01-02-2014, 02:07 (Sábado) »
Me ha comentado Florian que la semana que viene integrará los parches del 3380 en el repositorio oficial.

Saludos!

espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #9 en: 01-02-2014, 05:15 (Sábado) »
Hola danitool

Respecto a tus dudas sobre la escritura de la memoria flash:
Ahora bien, tengo mis dudas de si será capaz de hacer escritura, por lo de tener que especificar un tamaño de bloque más pequeño que el bloque de la flash SPI.

Habria que mirar las hojas de caracteristicas de cada chip en concreto, pero por defecto todos funcionan de la misma forma:
01.- Es necesario que la pagina (256 bytes) este borrada , todos los bits a 1 (los bytes a 0xFF), ya que la escritura solo permite "grabar" los bits de 1 a 0.
Pero no se borra solo una pagina, se borra:
  • un sector completo (habitualmente 4K) formado por 16 paginas
  • o un bloque completo (habitualmente 64K)
  • o toda la memoria (bulk erase).
02.- Segun el chip pueden aceptar escrituras:
  • de bytes de forma continua
  • o de trozos de pagina
  • o de paginas completas.
Tambien depende del algorithmo que estes utilizando en el kernel del livebox, y si tiene los comandos de la memoria flash adecuados.
En las hojas de caracteristicas vienen los comandos aceptados por cada memoria, pero muchos de ellos son comunes a todas las memorias, por estar estandarizados por JEDEC.

La M25P80 de micron/numonyx/st tiene 8Mbits (1MByte):
http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/M25P/M25P80.pdf
Y la habras podido leer como de 8MBytes (64Mbits) porque has hecho una lectura continua de la que realmente hay puesta, que debe de ser una Spansion FL064PIF:
http://www.spansion.com/Support/Datasheets/S25FL064P_00.pdf
Que el propio codigo te marca:
Citar
Código: [Seleccionar]
[    0.592000] m25p80 spi0.0: found s25sl064p, expected m25p80
[    0.600000] m25p80 spi0.0: s25sl064p (8192 Kbytes)

He abierto un hilo para comentar y proponer procedimientos de programacion de estas memorias flash serie SPI:
https://foro.seguridadwireless.net/openwrt/procedimientos-para-leer-y-programar-memorias-serie-spi-flash-25xxx/
Si quieres echale un vistazo y comenta.

Saludos
espeltron

espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #10 en: 01-02-2014, 06:47 (Sábado) »
Hola desarrolladores

La memoria flash SPI es de 128Mb (16MB) en vez de 64Mb (8MB) del resto de routers del hilo, pero la estructura es similar.
El tamaño extra sera debido al firmware necesario para la telefonia.

Desafortunadamente las ultimas versiones del software de estos routers tienen desactivados los puertos del telnet y del SSH, y no permiten actualizaciones por estas vias, y no se como poder acceder a un terminal para utilizar el tftpd.

Creo que hay un archivo de configuracion (de Judokan) que al introducirlo en el router vuelve a habilitar las opciones de telnet y ssh, pero no lo localizo por ningun lado.
Si alguien lo tiene o sabe el procedimiento, que lo diga. De esta forma se abriria una puerta a actualizaciones de routers sin necesidad de programadores "hardware".

ACTUALIZACION:

Nota:
Valido solamente para routers CG3100D (sin v3) con interfaz "CG3100D-RG" y versiones:
- V5.5.2R06b
- V5.5.4.mp2_R09b

Se habilita el SSH realizando el siguiente procedimiento:
01.- Copia de seguridad de nuestros parametros de configuracion "GatewaySettings.bin"
02.- Actualizacion con los siguientes parametros, segun la version que tengamos:
        - GatewaySettings V5.5.2R06b.bin
        - GatewaySettings V5.5.4.mp2_R09b.bin
03.- Reiniciar el router y conectarse ,al poco tiempo, con Putty por SSH, a cualquiera de estas direcciones:
http://192.168.1.1
http://192.168.100.1
04.- El usuario y password (pueden que sean validos algunos mas, pero estos sirven):
user: admin
password: password
05.- Recibiremos lo siguiente:
Citar
CG3100D>
Una bonita consola de eCos, pero con un monton de lineas de escaneo de frecuencias
06.- Las desactivaremos de la siguiete forma:
Citar
cd /
cd d
scan_stop
07.- Lo primero es hacer un "help", aunque en cada carpeta es "diferente".
08.- Habria que instalar y configurar en el PC un servidor de tftp, como el tftpd32 para win32:
http://tftpd32.jounin.net/tftpd32_download.html
En el que se colocaria una imagen con el firmware.bin, actualmente todos los usados son de este tamaño: 3.932.160 bytes
09.- El siguiente paso seria actualizar el firmware usando algun metodo como:
dload
snmp
Aunque esto todavia no lo he realizado, ni probado, hay indicaciones por internet de como se hace.
10.- Algun comando interesante:
Citar
cd /
find_command show
Muestra carpetas y comandos disponibles con la cadena "show".

Nota:
Este metodo no es valido de momento para el CG3100Dv3, ya que aun no se ha encontrado un "GatewaySettings.bin" que habilite los puertos SSH o telnet.
Lo mismo pasa con routers como el EPC3825, el EPC3925 o el SBG6580, asi que creo que seria adecuado realizar un listado para clasificarlos y no cometer errores.

Saludos
espeltron
« Última modificación: 30-03-2014, 18:24 (Domingo) por espeltron »

danitool

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #11 en: 01-02-2014, 12:03 (Sábado) »
Gracias espeltron por toda esta magnífica información  :D.

En cuanto a la escritura con el livebox, finalmente puedo decir que sí funciona. Ahora bien, primero tengo que especificar un borrado manual de la partición que quiero programar.
Código: [Seleccionar]
mtd erase epc3825spio bien
Código: [Seleccionar]
flash_erase /dev/mtd6 0 0
Y luego escribir usando el comando dd pero con un tamaño de bloque inferior a 60
Código: [Seleccionar]
dd if=imagen.bin of=/dev/mtd6 bs=48
Por lo que diría que efectivamente la memoria admite escritura de trozos de página.

No puedo usar mtd write o flashcp de forma normal, debido a que al driver SPI de los bcm63xx le falta un hervor para que haga todo de forma correcta. Pero con dd puedo esquivar las carencias del driver.

Sobre encontrar una puerta para poder flashear sin programador,  creo que requiere un trabajo a un nivel muy bajo, de tipo desensamblador. Como lo que hacen en :
http://www.devttys0.com/blog/




espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #12 en: 05-02-2014, 05:26 (Miércoles) »
Ejemplo de activacion de un parametro de configuracion a traves de una pagina web parcheada
El objetivo es poder habilitar el puerto telnet, el SSH o la consola a traves de este metodo y obtener un fichero de configuracion valido para el resto de routers del mismo modelo.
 
En el EPC3925, para habilitar el Remote Management que activa el puerto 161 del SNMP, hay que seguir los siguientes pasos:

1.- Descargar Opera 12 u Opera 11:
http://www.opera.com/download/get/?partner=www&opsys=Windows&classic=1
http://www.opera.com/download/get/?id=35879&location=360&nothanks=yes&sub=marine
http://get.geo.opera.com/pub/opera/win/1216/int/Opera_1216_int_Setup.exe
Para la extension "Source" no vale una version del navegador Opera distinta de estas.
Por ejemplo, la version 19 solo permite visualizar el codigo fuente, no permite aplicar cambios.

2.- Instalar el navegador:
Opera_1216_int_Setup.exe

3.- Instalar la extension "Source" para Opera:
Es un plugin que solo funciona en las versiones 11 o 12 de Opera.
https://addons.opera.com/es/extensions/details/source/?display=en
https://addons.opera.com/extensions/download/source/
Desde un navegador distinto de Opera se descargara el archivo:
source-1.0.3-1.oex
Si lo habeis hecho con Opera se habra instalado esta extension.
Esta extension es para editar paginas HTML "al vuelo".
Y esto es lo que se utilizara para modificar las opciones ocultas de las paginas web de los routers cisco.
Se sabe la estructura que tienen las paginas web gracias a otros routers que tienen estas opciones visibles.

4.- Editar la pagina del router donde se modificara la configuracion del Route Management:
Pasos:
- Acceder a la web del router, con las contraseñas que se esten utilizando (sin usuario y sin contraseña, o la que le hayamos puesto, no usar admin/W2402).
- Ir a Administration
- Os debera aparecer la pagina de Management

Apariencia:

Esta es la imagen que aparece por defecto en el router

Si se repiten los mismos pasos hasta llegar hasta esta pagina, pero con el Opera 12, con la extension "Source" instalada, sera posible ver y editar el codigo fuente.


Dando a Ctrl+U vemos el codigo fuente:


El siguiente paso es abrir el siguiente archivo de texto:
http://pastebin.com/raw.php?i=W0eQy7mM

Seleccionarlo todo con Ctrl+A y copiar con Ctrl+C.
Ir al codigo fuente del Opera 12 abierto anteriormente.
Seleccionarlo todo con Ctrl+A y pegar con Ctrl+V.

Hay que darle al boton Aplicar cambios.


Si vamos a la pestaña de Management, dentro del mismo Opera 12, vemos que el aspecto ha cambiado:


Solo queda fijar un usuario, el password y en "Remote Management" marcar "Enable".
El puerto que indica se puede dejar en 139, porque da igual, ya que utlizara el que hay por defecto, el 161 para el SNMP y creo que el 162 para el SNMP trap.

El resto de opciones no cambiarlas, dejar deshabilitado UPnP.


Vamos otra vez a la pestaña de "Administration", en "Back Up & Restore", y hacemos un "Back Up":

El archivo "filename.gwc" generado pasa de tener en su interior:
Citar
Remote Configuration Management (Yes or No)=No;
A tener en su interior:
Citar
Remote Configuration Management (Yes or No)=Yes;
Remote Management Port=139;

En los CG3100D y CG3100Dv3 el archivo de configuracion se guarda en un fichero binario con el nombre "GatewaySettings.bin".
En el EPC3825 y en el EPC3925 el archivo de configuracion se guarda en un fichero de texto plano con el nombre "filename.gwc".

Ahora el interes esta en encontrar las paginas htm, html o asp que habiliten el parametro Telnet.

Las siguientes cadenas son las que pueden estar relacionadas con la habilitacion del parametro que activa la conexion telnet:
Telnet Access Enabled =
Telnet Enable Mode =

Posibles procedimientos:
1.- SNMP  (se tienen que hacer pruebas hasta encontrar el OID y la forma de habilitar la variable de "telnet enable")
2.- Modificacion de pagina web "al vuelo", como se acaba de explicar.

Resultados de algunas pruebas:

Capturas de pantalla de "netscan" mostrando como se localiza el router EPC3925 en el puerto 161 del SNMP:


http://www.softperfect.com/products/networkscanner/
http://www.softperfect.com/download/freeware/netscan.zip

Con otro programa, el "snmptester", puedo mandar OIDs del tipo "custom".

He mandado el mismo OID y he obtenido la misma respuesta que con el programa anterior.

http://www.paessler.com/tools/snmptester
http://download-cdn.paessler.com/download/snmptester512.zip
http://download-cdn.paessler.com/download/snmptester.pdf

Se ha encontrado una pagina interesante con OIDs de Cisco:
http://tools.cisco.com/Support/SNMP/public.jsp

Se ha probado uno relacionado con la habilitacion del telnet:
http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=1.3.6.1.4.1.14179.1.2.1.2.3
Citar
Description "Allow new telnet sessions (enable or disable) Config telnet disable means that no new Telnet sessions are to be established. Any already established session remains active until the session is ended or an abnormal network error ends it. "
Pero en esta prueba inicial no ha funcionado ese OID, al menos en mi router.

Posibles communities:
public, private, secret, cisco, ono, gesCM1, docsDevNmAccessIp, DevNmAccessIpMask, NmAccessCommunity, DevNmAccessControl, DevNmAccessInterfaces, DexNmAccessStatus, ...

net-snmp:
Quien quiera usar comandos SNMP tendra que utilizar una herramienta mas avanzada de linea de comandos:
http://sourceforge.net/projects/net-snmp/files/net-snmp%20binaries/5.7-binaries/net-snmp-5.7.0-1.x86.exe/download
Despues de instalarla tendra que añadir a la variable de entorno "Path" del sistema operativo la ruta de la carpeta "bin" del programa.
Normalmente:
"c:\Archivos de programa\snmp\bin"

Vamos a empezar con un comando sencillo:
Citar
c:\tmp>snmpget -v2c -c public 192.168.100.1 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Cisco EPC3925 EuroDocsis 3.0 2-PORT Voice Gateway <<HW_REV: 1.0; VENDOR: Cisco; BOOTR: 2.3.0_R1; SW_REV: epc3925-E10-5-v302r125553-120726c-TLC; MODEL: EPC3925>>

c:\tmp>

Ahora vamos a intentar uno de modificacion de parametros del tipo string:
Citar
c:\tmp>snmpset -v2c -c public 192.168.100.1 1.3.6.1.4.1.4413.2.99.1.1.1.2.1.2.1 s password
Error in packet.
Reason: notWritable (That object does not support modification)
Failed object: SNMPv2-SMI::enterprises.4413.2.99.1.1.1.2.1.2.1


c:\tmp>

Ahora vamos a intentar uno de modificacion de parametros del tipo integer:
Citar
c:\tmp>snmpset -v2c -c gesCM1 192.168.100.1 1.3.6.1.4.1.14179.1.2.1.2.3 i 1
Error in packet.
Reason: noAccess
Failed object: SNMPv2-SMI::enterprises.14179.1.2.1.2.3


c:\tmp>

Por internet hay algunos comandos snmp para los routers CG3100D, pero no he conseguido que funcionen en mi EPC3925.
Solo hay que hacer una busqueda de: snmpset CG3100D
No solo hay que saber las OIDs que lleva cada router, sino que tambien hay que saber como se utilizan, los tipos de variables que utilizan (si strings o integers i) y como funcionan.

Haciendo pruebas se ha visto que exite otra IP activa, la 192.68.100.5, seguramente es la del propio cablemodem.

Espero que esta informacion le sirva al resto de desarrolladores y se pueda avanzar en estas familias de routers.

Saludos
espeltron
« Última modificación: 05-02-2014, 14:24 (Miércoles) por espeltron »

rafius15

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #13 en: 05-02-2014, 09:20 (Miércoles) »
Hola!
Muchísimas gracias espeltron, he estado trasteando con mi V3 por ahi con el opera y el editor de codigo al vuelo. Esta muy guapo y no lo había probado nunca.

Os comento:
He conseguido desactivar el WPS completamente, ya que el primer parametro en la pagina que se abre inicialmente es wps_enable=1, cambiandolo a wps_enable=0 se desactiva por completo.

Por otra parte no he podido acceder de ninguna forma por telnet o ssh, puesto que la pagina que editaría ese comportamiento esta inaccesible incluso activandola desde el codigo. La pagina de la que os hablo es RgRemoteManagement.asp, la cual podemos activar en la pestaña avanzado, configuracion avanzada, configuración remota, pero luego obtenemos un bonito 404.

Venga, que lo conseguiremos!

Un abrazo chicos!

berni69

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #14 en: 05-02-2014, 09:33 (Miércoles) »
Hola Noltari,
personalmente me interesa bastante este tema, tengo un router de estos parados si quieres que realice alguna prueba avisa.

he visto que has avanzado en el tema de la lectura de la flash, por favor, avísame =)

Saludos y continuad así  :D

espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #15 en: 10-02-2014, 02:51 (Lunes) »
Router CG3100D
El router CG3100D es una de las versiones previas al router CG3100Dv3.

Como se puede observar en las siguientes imagenes el aspecto de la carcasa cambia ligeramente:




La placa electronica tambien es diferente:



Pero sigue manteniendo la misma memoria flash serie Spansion S25FL064PIF de 64Mb (8MB):
http://www.spansion.com/Support/Datasheets/S25FL064P_00.pdf


Bootlogs del CG3100D V5.5.2R06b original (telnet y SSH cerrados):

Se ha realizado una conexion a traves de un terminal serie a 115200, 8, n, 1.

El conexionado es el siguiente:

Se ha utilizado el tipico adaptador USB-UART-TTL de 3.3V.

Todos los bootlogs se han tomado con el firmware original del router (tras un reset por hardware).

Las capturas son capturas de prueba, realizadas una a continuacion de otra (tras la desconexion y reconexion de la alimentacion del router).

Se ha detectado que en cada arranque el bootlog cambia en el indicador del tiempo y en el CRC.

Durante el arranque, en los boots posteriores se han pulsado las teclas 'p' y '2' para ver como afectaban en dicho arranque.

Con 'p' se accede a una consola que permite bastantes cosas utiles.

Con '2' no pasa en principio nada, se podrian hacer mas pruebas para ver si la imagen que debiera cargar se debe de transferior por tftp.

Creo recordar que otros modelos de routers tenian las opciones '1', '2' y 's' en el arranque (de momento no se ha probado la opcion 's').

Este firmware original tiene por defecto los puertos telnet y SSH cerrados.

La version del firmware de este router es la V5.5.2R06b, version de la que hay disponible un GatewaySettings.bin que habilita el puerto SSH.

Con pocos ensayos, realizando varias lecturas de la flash con el SSH cerrado y el SSH abierto sera posible descifrar la estructura de los bytes de configuracion, y asi poder parchear las flash de otros routers:
- CG3100Dv3
- EPC3825
- EPC3925

Una vez parcheadas esas flash se pueden modificar los parametros de configuracion y generar nuevos archivos de configuracion "GatewaySettings.bin" o "filename.gwc" con los puertos telnet o SSH abiertos.
Esos nuevos archivos de configuracion "GatewaySettings.bin" con los puertos telnet o SSH abiertos serviran para "desbloquear" cualquier router que este "bloqueado" con el firmware original y los puertos telnet y SSH cerrados.
Una vez abierto cualquiera de estos puertos sera posible una actualizacion del firmware original al firmware OpenWrt sin necesidad de programadores "hardware".

Hay 2 posibilidades para la deteccion de las posiciones de los bytes de configuracion del telnet o el SSH:
1.- Hacer modificaciones en la flash directamente, desde la consola que aparece tras el "boot" (si pulsamos la tecla 'p' a traves de un hiperterminal).
2.- Restaurando por pagina web el archivo de configuracion "GatewaySettings V5.5.2R06b.bin" que tiene el puerto SSH abierto.
Cualquiera de estas 2 opciones genera cambios en la memoria flash que permitira la localizacion de las posiciones de esos bytes, por comparacion con la memoria flash original con los puertos cerrados.

Si se ha mantenido parte de las estructura de configuracion en otras versiones y modelos de routers no sera muy dificil localizar esas posiciones en las flashes de esos routers.

Como datos a tener en cuenta:
- El CRC, mas que un CRC de 32 bits parece 4 checksums de 1 byte, ya que el CRC32, aunque solo haya una variacion en 1 byte en los datos, tiende a modificar los 4 bytes del resultado, no solo 1 o 2.
- La comprobacion del CRC de la imagen se puede deshabilitar, o al menos eso parece. Esto permitira cargar una imagen de OpenWrt sin problemas.

Bootlogs obtenidos:
00_bootlogs_115200_8N1_originales_CG3100D.zip

Firmware del CG3100D V5.5.2R06b original (telnet y SSH cerrados):
A continuacion se ha procedido a desoldar la memoria flash serie y a leerla en un programador:




Firmware obtenido:
flash-CG3100D-original.zip

En cuanto pueda seguire con las pruebas y relecturas de la memoria, con las distintas opciones de aperturas de puertos habilitadas.

Saludos
espeltron
« Última modificación: 10-02-2014, 07:10 (Lunes) por espeltron »

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #16 en: 10-02-2014, 08:30 (Lunes) »
Que bien se lo pasan algunos con un soldador en las manos :D

Enviado desde mi CUBOT GT99 usando Tapatalk

espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #17 en: 11-02-2014, 23:02 (Martes) »
Nuevos descubrimientos:

01.- El firmware del CG3100Dv3 funciona correctamente en el CG3100D.

Funciona correctamente:
- Consola serie, con los mensajes del boot.
- Los puertos ethernet.
- Los leds indicadores, incluidos los de los modos 100M del switch (color naranja).
- La antena wifi, haciendo conexiones WPA2 correctamente.
Asi que las diferencias del firmware del OpenWrt serian minimas (en principio solo el puerto USB que si existe en el CG3100D).

Alguien que tuviera el hardware CG3100Dv3 podria probrar el caso contrario, si el firmware del CG3100D funciona correctamente o no en el hardware CG3100Dv3.

02.- El firmware del CG3100Dv3 si responde a la consola serie si se pulsa '2' en los primeros 2 segundos tras el encendido, pero indica que no puede cargar la imagen y se resetea. Seguramente el volcado seria por tftp o puede que por consola serie, aunque improbable.

03.- Generando un archivo de imagen flash.bin con los primeros 128K de la flash de la version CG3100D y los 7.9M restantes de la flash CG3100Dv3 es posible el arranque y la carga del firmware con la interfaz Genie, con algun mensaje de "anomalia" en el boot, pero aun asi la pagina web Genie funciona correctamente.
Durante el arranque se puede ver el siguiente mensaje en la consola serie:
Código: [Seleccionar]
Enter '1', '2', or 'p' within 2 seconds or take default...Y al entrar con 'p' podemos modificar ciertos parametros del boot, pero ninguna configuracion del firmware.
Código: [Seleccionar]
Board IP Address  [0.0.0.0]:
Board IP Mask     [255.255.255.0]:
Board IP Gateway  [0.0.0.0]:
Board MAC Address [00:10:18:ff:ff:ff]:

Internal/External phy? (e/i)[i]
Waiting for link up...


Main Menu:
==========
  b) Boot from flash
  g) Download and run from RAM
  d) Download and save to flash
  e) Erase flash sector
  m) Set mode
  s) Store bootloader parameters to flash
  i) Re-init ethernet
  r) Read memory
  w) Write memory
  j) Jump to arbitrary address
  z) Reset


Link up: 1G full


Mode Configuration Bits
=======================
 0x8000 Boot
 0x4000 Load-N-Go
 0x0004 Boot image 1
 0x0002 Verify image CRC
 0x0001 Prompt

Phy Selection
-------------
 0x0000  Default PHY
 0x0100  Internal EPHY
 0x0200  External EPHY

Enter hex value of desired features
MODE=8003: Enter new value:
Asi que la utilidad de esto esta limitada a opciones y parametros del boot exclusivamente, y para alguna carga manual de un firmware una vez "flasheada" la memoria con este boot (bloque inicial de tamaño 128K).

04.- En una de las pruebas, por error en la escritura de ciertos bloques de la flash, dicha flash no pudo arrancar el router CG3100D, indicando un mensaje de error en el CRC.
Por tanto, si no se deshabilita el CRC en el boot hay que crear imagenes OpenWrt con su CRC correcto (si se decide mantener este bootloader).

05.- Tras mas de 10 volcados de memorias "flash" he llegado a la conclusion de que los parametros de configuracion nvram se localizan en los ultimos 64K de la memoria flash.
Concretamente a partir de la posicion 0x7F00CA.
En diferentes pruebas y ensayos realizados en el router, todos los datos anteriores a esa posicion se mantienen inalterados (en todos los ficheros flash.bin obtenidos).
Las pruebas que modificaban los parametros nvram han sido:
- Encendido y apagado del router.
- Actualizacion del fichero "GatewaySettings.bin".
- Pulsacion del boton "Reset" del router.

06.- Por el aspecto de la zona de memoria, se sospecha tambien que puede haber otra nvram secundaria de 64K.
Se localizaria en el penultimo bloque de la memoria flash, a partir de la posicion 0x7E0000, aunque esto esta sin confirmar.
Este bloque no sufre modificaciones en ningun momento.
Este segundo bloque de nvram podria servir para alojar los parametros de la imagen '2', que no existe aun.
Como dicha imagen nunca se ha cargado y utilizado, no se ha modificado esta zona de memoria.

07.- El firmware del CG3100Dv3 si responde a comandos SNMP, al menos al que indica la descripcion del aparato.
Citar
c:\tmp>snmpget -v2c -c public 192.168.100.1 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Netgear Cable Modem <<HW_REV: 2.00; VENDOR: NETGEAR; BOOTR: 2.3.0beta6; SW_REV: V1.04.02; MODEL: CG3100D>>

Objetivo de todas estas pruebas:
El objetivo es obtener un archivo de configuracion "GatewaySettings.bin" con los puertos telnet o SSH abiertos.
Esto es todavia complicado de conseguir, ya que parece que todos los accesos estan bloqueados.
De momento solo esta la opcion de actualizacion a OpenWrt mediante reprogramacion de la flash con un programador de memorias SPI.

Modelos de routers que si permitirian una actualizacion del firmware por software:
- CG3100D (con versiones software V5.5.4.mp2_R09b.bin, V5.5.2R06b.bin o anteriores)

A la espera de los parches de Florian.

Saludos
espeltron
« Última modificación: 11-02-2014, 23:10 (Martes) por espeltron »

Noltari

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #18 en: 13-02-2014, 13:30 (Jueves) »
Nuevos descubrimientos:

01.- El firmware del CG3100Dv3 funciona correctamente en el CG3100D.

Funciona correctamente:
- Consola serie, con los mensajes del boot.
- Los puertos ethernet.
- Los leds indicadores, incluidos los de los modos 100M del switch (color naranja).
- La antena wifi, haciendo conexiones WPA2 correctamente.
Asi que las diferencias del firmware del OpenWrt serian minimas (en principio solo el puerto USB que si existe en el CG3100D).

Alguien que tuviera el hardware CG3100Dv3 podria probrar el caso contrario, si el firmware del CG3100D funciona correctamente o no en el hardware CG3100Dv3.

02.- El firmware del CG3100Dv3 si responde a la consola serie si se pulsa '2' en los primeros 2 segundos tras el encendido, pero indica que no puede cargar la imagen y se resetea. Seguramente el volcado seria por tftp o puede que por consola serie, aunque improbable.

03.- Generando un archivo de imagen flash.bin con los primeros 128K de la flash de la version CG3100D y los 7.9M restantes de la flash CG3100Dv3 es posible el arranque y la carga del firmware con la interfaz Genie, con algun mensaje de "anomalia" en el boot, pero aun asi la pagina web Genie funciona correctamente.
Durante el arranque se puede ver el siguiente mensaje en la consola serie:
Código: [Seleccionar]
Enter '1', '2', or 'p' within 2 seconds or take default...Y al entrar con 'p' podemos modificar ciertos parametros del boot, pero ninguna configuracion del firmware.
Código: [Seleccionar]
Board IP Address  [0.0.0.0]:
Board IP Mask     [255.255.255.0]:
Board IP Gateway  [0.0.0.0]:
Board MAC Address [00:10:18:ff:ff:ff]:

Internal/External phy? (e/i)[i]
Waiting for link up...


Main Menu:
==========
  b) Boot from flash
  g) Download and run from RAM
  d) Download and save to flash
  e) Erase flash sector
  m) Set mode
  s) Store bootloader parameters to flash
  i) Re-init ethernet
  r) Read memory
  w) Write memory
  j) Jump to arbitrary address
  z) Reset


Link up: 1G full


Mode Configuration Bits
=======================
 0x8000 Boot
 0x4000 Load-N-Go
 0x0004 Boot image 1
 0x0002 Verify image CRC
 0x0001 Prompt

Phy Selection
-------------
 0x0000  Default PHY
 0x0100  Internal EPHY
 0x0200  External EPHY

Enter hex value of desired features
MODE=8003: Enter new value:
Asi que la utilidad de esto esta limitada a opciones y parametros del boot exclusivamente, y para alguna carga manual de un firmware una vez "flasheada" la memoria con este boot (bloque inicial de tamaño 128K).

04.- En una de las pruebas, por error en la escritura de ciertos bloques de la flash, dicha flash no pudo arrancar el router CG3100D, indicando un mensaje de error en el CRC.
Por tanto, si no se deshabilita el CRC en el boot hay que crear imagenes OpenWrt con su CRC correcto (si se decide mantener este bootloader).

05.- Tras mas de 10 volcados de memorias "flash" he llegado a la conclusion de que los parametros de configuracion nvram se localizan en los ultimos 64K de la memoria flash.
Concretamente a partir de la posicion 0x7F00CA.
En diferentes pruebas y ensayos realizados en el router, todos los datos anteriores a esa posicion se mantienen inalterados (en todos los ficheros flash.bin obtenidos).
Las pruebas que modificaban los parametros nvram han sido:
- Encendido y apagado del router.
- Actualizacion del fichero "GatewaySettings.bin".
- Pulsacion del boton "Reset" del router.

06.- Por el aspecto de la zona de memoria, se sospecha tambien que puede haber otra nvram secundaria de 64K.
Se localizaria en el penultimo bloque de la memoria flash, a partir de la posicion 0x7E0000, aunque esto esta sin confirmar.
Este bloque no sufre modificaciones en ningun momento.
Este segundo bloque de nvram podria servir para alojar los parametros de la imagen '2', que no existe aun.
Como dicha imagen nunca se ha cargado y utilizado, no se ha modificado esta zona de memoria.

07.- El firmware del CG3100Dv3 si responde a comandos SNMP, al menos al que indica la descripcion del aparato.
Citar
c:\tmp>snmpget -v2c -c public 192.168.100.1 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Netgear Cable Modem <<HW_REV: 2.00; VENDOR: NETGEAR; BOOTR: 2.3.0beta6; SW_REV: V1.04.02; MODEL: CG3100D>>

Objetivo de todas estas pruebas:
El objetivo es obtener un archivo de configuracion "GatewaySettings.bin" con los puertos telnet o SSH abiertos.
Esto es todavia complicado de conseguir, ya que parece que todos los accesos estan bloqueados.
De momento solo esta la opcion de actualizacion a OpenWrt mediante reprogramacion de la flash con un programador de memorias SPI.

Modelos de routers que si permitirian una actualizacion del firmware por software:
- CG3100D (con versiones software V5.5.4.mp2_R09b.bin, V5.5.2R06b.bin o anteriores)

A la espera de los parches de Florian.

Saludos
espeltron
Buenas,

He conseguido instalar el bootloader del CG3100D en el CG3100Dv3 sin problemas :D.
Funciona todo y encima tengo cli, así que puedo arrancar ramdisks.

En cuanto tenga tiempo lo añado al primer post, aunque lo ideal sería encontrar qué hay que cambiar en el bootloader para conseguir activar la consola, porque estoy convencido de que realizando ciertos cambios se puede habilitar en el mismo bootloader original.

Saludos!

espeltron

  • Visitante
Re: [Desarrollo] OpenWrt en Netgear CG3100Dv3
« Respuesta #19 en: 13-02-2014, 16:09 (Jueves) »
Creo que una opcion seria ver la interfaz web y los codigos fuente de las paginas de configuracion que habilitan el telnet o el SSH.
La version V5.5.2R06b y las posteriores no tienen estas opciones, porque se las han borrado de la interfaz, pero es posible que las variables las hayan mantenido de forma oculta.
Con Opera 12 y sabiendo que codigo hay que insertar en la pagina adecuada seria posible habilitar el Telnet en las nuevas versiones.
Supongo que aunque la interfaz Genie sea distinta, ciertas variables se hayan mantenido.

Hay dos firmwares que puede que aun tengan habilitadas las opciones de telnet en su interfaz web:
V5.5.2R05.bin
V5.5.2R04E-HYEA.bin

Seria cuestion de probar y ver.
Yo actualmente no tengo tiempo para estas pruebas, a ver si podeis hacerlas alguno de vosotros y comentais los resultados.

Saludos
espeltron
« Última modificación: 30-03-2014, 18:22 (Domingo) por espeltron »