Autor Tema: A saco con el CDE30364  (Leído 1019 veces)

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

Yo_Julio

  • Visitante
A saco con el CDE30364
« en: 30-11-2017, 14:55 (Jueves) »
Hola
Hace tiempo me regalaron uno de estos y después de años en la caja de los trastos me ha dado por meterle mano.
Le desoldé la flash y la leí con ayuda de Flashrom y un Arduino.
Despues lo único que hay que hacer es cambiar la cadena quiet=s por quiet=n con Ghex, grabar y volver a soldar.
A partir de ahí con putty por el puerto serie se le puede habilitar el USB, telnet, cambiar firewall...
Y yo que lo iba a tirar...

Una vez destripado me he venido arriba :) lo he vuelto a dejar como estaba de origen y me he puesto a buscar una forma mejor (sin meter el soldador). Con lo visto se me ocurrieron dos opciones:

Opción1
No sé si se podrá.
Pulsamos el botón de encendido y el que está al lado del USB a la vez
No se ve nada, pero esto es lo que hace el router:

Código: [Seleccionar]
Filename 'ht_sfile'.
Load address: 0x80000100
Loading: T T T T T T T T T T
Retry count exceeded; starting again

Así que poniendonos la IP 182.168.100.2 y tftp se le podría cargar un fichero ht_sfile.
Habría que probar con un firm que no tenga capado telnet o la consola por ejemplo.


Opción2
A saco. Al estilo de mi pueblo.
-El router se puede quemar (no creo si se tiene cuidado, pero hay que decirlo)
-En la flash aparece dos veces quiet=s y una quiet a secas. Como el entorno está duplicado la tercera puede ser el default de U-Boot

Dicho esto -fiel a mi estilo- hice fallar a U-Boot, al default, para ver que pasa

Con unas pinzas se hace un puente entre la pata 8 de la flash y la masa de la consola unos segundos .
No se trata de soldar un puente porque no arrancará sino de hacer un mal contacto, provocar el error.



Doy al botón de arranque y suena la flauta :) aparecen caracteres y finalmente el prompt de U-Boot.
Así que sin perder tiempo:
Código: [Seleccionar]
=>
=> setenv quiet n
=> saveenv
ERROR
No se qué, error en el entorno. Vaya por Dios.   :-[

Repito
Tripito
Cuatripito
...
ad nauseam  >:D
...
y despues de la enésima, justo a la última aparece esto:   ^-^

Código: [Seleccionar]
DRAM:  128 MB
*** Warning - Unsupported Flash detected, flash is unusable

Manufacturer ID: 0x0
Type: 0x0
Density: 0x0
Extended ID: {0x0, 0x0}
*** Warning - bad CRC, using default environment    

In:    serial
Out:   serial
Err:   serial
Error: start address not on sector boundary
Error: start address not on sector boundary
Error: start address not on sector boundary
Error: start address not on sector boundary
Error: start address not on sector boundary
Error: start address not on sector boundary
Press @ to abort autoboot in 1 second(s)      
*** ACTIMAGE = 1, will try to boot UBFI1 stored @0x48040000
## Executing script at 48040000
...
...
...

Cuando termine de arrancar, pulsa intro
Código: [Seleccionar]
starting pid 278, tty '/dev/ttyS0': '-/bin/sh'

BusyBox v1.15.2 (2012-12-03 14:54:23 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ #
;D ;D ;D ;D
Ahora deja de hacer el chimpancé por toda la habitación, espera que se te borre esa sonrisa malévolo-torticera de la cara, en su lugar déjate llevar por la satisfacción del trabajo bien hecho y con una sonrisa serena en los labios teclea:

~ # cli
>>>
Console, CLI version 1.0.0.5
Type 'help' for list of commands
mainMenu> docsis
docsis> telnetd
Select LanOnline TELNET Service Access:Currently set to <0> :
[ 1]-ON
[ 0]-OFF
Choice > 1
Select LanOffline TELNET Service Access:Currently set to <0> :
[ 1]-ON
[ 0]-OFF
Choice > 1
Select Cable TELNET Service Access:Currently set to <0> :
[ 1]-ON
[ 0]-OFF
Choice > 0
Now TELNET Service Access Selection:
LAN ONLINE: :<1>        LAN OFFLINE : <1>       CABLE :<0>
Set OK!
docsis> exit
mainMenu> exit
CLI Bye Bye

En un terminal:
julito@Rossetta:~/cde30364$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
CDE-30364 login: root
Password:


BusyBox v1.15.2 (2012-12-03 14:54:23 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # echo Soy el p..o $(whoami)
Soy el p..o root
~ #
 8)

Al final he tardado casi menos en poder meterle mano por telnet que en quitarle los tornillos y conectarlo :)

Ahora pruebo a reiniciar a ver si hay suerte y U-Boot me sigue hablando...

Código: [Seleccionar]
U-Boot 1.2.0-g73dbfe77 (May 27 2011 - 10:28:29)
PSPU-Boot 1.0.16.22-H2.8.3

DRAM:  128 MB
Flash Spansion S25FL128P(16 MB) found on CS0.
Flash Spansion S25FL128P(16 MB) found on CS1.
In:    serial
Out:   serial
Err:   serial
Press @ to abort autoboot in 1 second(s)

Pues eso. Pararlo con @ y por si acaso:

=>
=> setenv quiet n
=> saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Un-Protected 1 sectors
Erasing Flash....
Erased 1 sectors
Writing to Flash... ..
done
Protected 1 sectors
Protected 1 sectors

Listo.


« Última modificación: 04-01-2018, 11:32 (Jueves) por Yo_Julio »

Yo_Julio

  • Visitante
A saco con el CDE30364 II
« Respuesta #1 en: 04-01-2018, 12:28 (Jueves) »
He tenido un poco de tiempo libre así que he vuelto a jugar con este cacharrillo. Mi idea es conectarle un disco USB con Samba.

Al conectarle el cable serie en el arranque sale esto:
------------------------------------
        -->Config USB server...
VBUS off(0)-GPIO60(LOW)
suspend: usb power down
------------------------------------
Asi que es el SW del operador el que tira abajo el USB  :P
La idea sería dejar:
CLI operativo
Paginas web de configuración operativas (o casi)
Cable inoperativo (o no  ^-^)
Usuarios por defecto eliminados o con la password cambiada
USB operativo (mass storage, SMB y -si se puede- servidor de impresora) Ambos vienen en el firmware

Hacemos un backup de las particiones (Generic Backup OpenWrt Wiki)

Las juntamos (cat mtd0.backup...   > todo.backup  ) y binwalk nos confirma que el FS está repetido
0x0000000 0x0040000 bootloader
0x0040000 0x0146000 Boot Script File
0x00413FC Multi Image File
    0x0041448 0x0145FFF Kernel
    0x0146000 0x0837239 sqsh

0x0FF0000 0x162ABA1  Boot Script File
0x0FF13FC Multi Image File
  0x0FF1448   0x10F5FFF  kernel
  0x10F6000   0x162ABA1  sqsh 

0x1FB0000
   0x1FB0050    Zlib compressed data
   0x1FB00AC    0x1FC20CB   JFFS2 filesystem

No me interesa ni UBIFS ni tener todo duplicado así que me hago mi propio esquema de particiones y lo cargo a partir del resultado de binwalk.
Ahí va:

Montamos un tftp server en el PC con IP 192.168.100.2

Kernel
Extraemos el kernel del backup: 0x0041448 a 0x0145FFF -> kernel.bin

Creamos la imagen del kernel
mkimage -A ARM -O linux -T Kernel -C none -a 0x80A00000 -e 0x80A00000 -n 'Kernel Julio' -d kernel.bin kernel.img

Tenemos:
uboot  en 00000 a 20000 (0x20000, 128k)
env1   en 20000 a 30000 (0x10000, 64k)
env2   en 30000 a 40000 (0x10000, 64k)

Cargamos el kernel en 40000:
tftpboot 0x80000100 kernel.img
protect off 0x48040000 +${filesize}
erase 0x48040000 +${filesize}
cp.b ${fileaddr} 0x48040000 ${filesize}
protect on 0x48040000 +${filesize}

Ahora ya se podria arrancar el kernel con bootm 0x48040000

Extraemos el FileSystem: 0x0146000 0x0837239 -> squashfsRootFileSystem.backup
Cargamos el squashfs original en 150000

tftpboot 0x80000100 squashfsRootFileSystem.backup
protect off 0x48150000 +${filesize}
erase 0x48150000 +${filesize}
cp.b ${fileaddr} 0x48150000 ${filesize}
protect on 0x48150000 +$filesize

Para poder meterle mano creamos un filesystem de lectura/escritura que será con el que arrancaremos al final
Creamos un en el PC fs de 10M vacio (Vale, seguro que hay una forma más elegante)
mkdir dir_vacio
mkfs.jffs2 --pad=10000000 --big-endian --squash -v -e 64KiB -o vacio.jffs2 -d dir_vacio

Lo cargamos
tftpboot 0x80000100 vacio.jffs2
protect off 0x48E90000 +$filesize
erase 0x48E90000 +$filesize
cp.b ${fileaddr} 0x48E90000 ${filesize}
protect on 0x48E90000 +$filesize

Cargamos del backup la partición que tiene la nvram en E40000 a E90000 (0x50000 320k)
tftpboot 0x80000100 nvram.backup
protect off 0x48E40000 +$filesize
erase 0x48E40000 +$filesize
cp.b ${fileaddr} 0x48E40000 ${filesize}
protect on 0x48E40000 +$filesize

Arrancamos desde el squashfs original
setenv bootargs "root=/dev/mtdblock4 mtdparts=sf0:0x20000(U-Boot)ro,0x10000(env1),0x10000(env2),0x110000(Kernel),0xCF0000(RootFileSystem)ro,0x50000@0xE40000(nvram),0xE90000(vacio) console=ttyS0,115200n8,n ethaddr0=00:05:CA:00:00:00"
bootm 0x48040000

Queda al arrancar:

...
...
7 cmdlinepart partitions found on MTD device sf0
partitions[0] = {.name = U-Boot, .offset = 0x00000000,.size = 0x00020000 (128K) }
partitions[1] = {.name = env1, .offset = 0x00020000,.size = 0x00010000 (64K) }
partitions[2] = {.name = env2, .offset = 0x00030000,.size = 0x00010000 (64K) }
partitions[3] = {.name = Kernel, .offset = 0x00040000,.size = 0x00110000 (1088K) }
partitions[4] = {.name = RootFileSystem, .offset = 0x00150000,.size = 0x00cf0000 (13248K) }
partitions[5] = {.name = nvram, .offset = 0x00e40000,.size = 0x00050000 (320K) }
partitions[6] = {.name = vacio, .offset = 0x00e90000,.size = 0x01170000 (17856K) }
Creating 7 MTD partitions on "sf0":
0x00000000-0x00020000 : "U-Boot"
0x00020000-0x00030000 : "env1"
0x00030000-0x00040000 : "env2"
0x00040000-0x00150000 : "Kernel"
0x00150000-0x00e40000 : "RootFileSystem"
0x00e40000-0x00e90000 : "nvram"
0x00e90000-0x02000000 : "vacio"
Creating 1 MTD partitions on "sf0":
0x00000000-0x01000000 : "sf0"
Creating 1 MTD partitions on "sf1":
0x00000000-0x01000000 : "sf1"
...
...

~ # cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00020000 00010000 "U-Boot"
mtd1: 00010000 00010000 "env1"
mtd2: 00010000 00010000 "env2"
mtd3: 00110000 00010000 "Kernel"
mtd4: 00cf0000 00010000 "RootFileSystem"
mtd5: 00050000 00010000 "nvram"
mtd6: 01170000 00010000 "vacio"
mtd7: 01000000 00010000 "sf0"
mtd8: 01000000 00010000 "sf1"

Montamos para copiar squash mtd4 a jffs mtd6
mkdir /var/vacio
mount -t jffs2 /dev/mtdblock6 /var/vacio
mkdir /var/mountemp
mount /dev/mtdblock4 /var/mountemp
cd /var/mountemp
Copiamos todo a /var/vacio usando cp -a para preservar los enlaces simbolicos
Una vez terminado:
sync
reboot
Paramos con @

Ajustamos Uboot para que el filesystem raíz sea nuestro jffs2
setenv bootargs "root=/dev/mtdblock6 rootfstype=jffs2 mtdparts=sf0:0x20000(U-Boot)ro,0x10000(env1),0x10000(env2),0x110000(Kernel),0xCF0000(SqshfsRootFS)ro,0x50000@0xE40000(nvram),0xE90000(jffs2RootFS) console=ttyS0,115200n8,n ethaddr0=00:05:CA:00:00:00"
setenv bootcmd "bootm 0x48040000"
saveenv
reset

Ya lo tengo todo en un filesystem de lectura/escritura.

Me queda ver cuando tenga un ratillo como dejar operativo el USB

 





Yo_Julio

  • Visitante
Re: A saco con el CDE30364 y III
« Respuesta #2 en: 24-01-2018, 12:37 (Miércoles) »
Lo tengo mas o menos  ^-^

Deshabilitamos el autoarranque
CLI: system->startup disable
Ojo que tambien se deshabilita CLI (si lo quieres habilitar haz runall)
-Al reiniciar con con dmesg ya se puede ver que el kernel crea sda1 al insertar un pendrive-

Ahora deshabilito PCD, -que esta de más en mi chisme casero- y lo hago arrancar con un script:
Cambiamos la llamada que está en las últimas líneas de runall a PCD:
vi /usr/sbin/runall
...
...
...
    # Spawn PCD, start the system
#    /usr/sbin/pcd -f /etc/scripts/dsdk.pcd -v -t 20 -e /nvram/pcd_error_log.txt &
    # Arranque
     /etc/scripts/Jinit
fi
escapedospuntosuvedobleq

Creamos el fichero /etc/scripts/Jinit y le damos permiso de ejecución.
Jinit debe quedar mas o menos así:

/usr/sbin/watchdog_rt -t 10 /dev/watchdog -n &
/usr/sbin/logger --no-fork &
/usr/sbin/gim &
/usr/sbin/gptimer --timer-tick=50 &
echo "1" > /var/tmp/app_run
/usr/sbin/docsis_init_once $init_once_params &
ht_init init &
/usr/sbin/cm_status &
/usr/sbin/wlsCtrlApp moduleinit &
ledd > /dev/null 2>&1 &
insmod /lib/modules/2.6.18_pro500/drivers/char/hal_vlynq.ko
insmod /lib/modules/2.6.18_pro500/drivers/char/soc_if_driver.ko
mknod /dev/soc_if_driver c 36 0
insmod /lib/modules/2.6.18_pro500/drivers/net/docsis_bridge.ko
insmod /lib/modules/2.6.18_pro500/drivers/net/avalanche_cnid.ko
insmod /lib/modules/2.6.18_pro500/drivers/char/docsis_mng.ko
mknod /dev/docsis_mng c 32 0
insmod /lib/modules/2.6.18_pro500/drivers/net/docsis_fltr_class.ko
insmod /lib/modules/2.6.18_pro500/drivers/char/kintr.ko
echo --------una pausa pausa insmod----------
sleep 2
/usr/sbin/hal_cmd_mbox &
/bin/sh -c dfltr_class_init.sh
/usr/sbin/hal_event_mbox &
/usr/sbin/mlx -d DOCINT -n 8 &
/usr/sbin/dbridge_init &
# /usr/sbin/hal_tuner_mgr &
/bin/sh -c /usr/sbin/dbridge_mdf_init.sh
/bin/sh -c /usr/sbin/dbridge_l2vpn_ds_init.sh
#insmod /lib/modules/2.6.18_pro500/drivers/net/docsis_pp.ko
/usr/sbin/mptint &
/usr/sbin/dispatcher &
#/usr/sbin/bpi_auth &
#/bin/sh -c dpp_dev_init.sh
#/usr/sbin/bpi_sa_map &
#/usr/sbin/qos_dsx_sm &
# repe? /usr/sbin/docsis_mac_manager $dmg_params &
# /usr/sbin/downstream_manager &
#/usr/sbin/snmp_agent_cm -c /etc/agent_cm.cnf -n &
#/usr/sbin/upstream_manager &
/usr/sbin/eventmgr_cm &
/usr/sbin/docsis_mac_driver $dmd_params &
/usr/sbin/docsis_mac_manager $dmg_params &
insmod /lib/modules/2.6.18_pro500/drivers/net/htsw.ko
/bin/sh -c /usr/sbin/dbridge_sniff_init.sh
insmod /lib/modules/2.6.18_pro500/net/ipv4/netfilter/NFTRIGGER.ko
insmod /lib/modules/2.6.18_pro500/net/ipv4/netfilter/NFwebstr.ko
insmod /lib/modules/2.6.18_pro500/net/ipv4/netfilter/NFWEBLOCK.ko
/usr/sbin/htxvendordb init &
/usr/sbin/eventmgr_rg &
chown -R root /var/spool/cron/crontabs
/usr/sbin/crond &
/usr/sbin/ht_eventnotif -e initend &
/usr/sbin/htxvendordb check &

Hay comentados algunos comandos que no me interesan y he insertado alguna pausa mas porque a veces se atraganta al arrancar  ;)

Deshabilitamos ht_init (no quiero VLAN al operador ni usuarios por defecto) y nos quedamos sólo con los ficheros de configuración que genera.
Para conseguir esos ficheros podemos ejecutar una vez (runall) y copiarlos desde /var/tmp Esto es lo que he hecho:
mkdir /etc/julio
Copiamos
cp  /var/tmp/fw* /etc/julio
cp  /var/tmp/pam_radius.conf /etc/julio
cp  /var/tmp/ripd.conf /etc/julio
cp  /var/tmp/smb.conf /etc/julio
cp  /var/tmp/sshd.conf /etc/julio
cp  /var/tmp/telnetd.conf /etc/julio
cp  /var/tmp/udhcpd_lan.conf /etc/julio
cp  /var/tmp/webs.conf /etc/julio
cp  /var/tmp/zebra.conf /etc/julio
cp  /var/tmp/net.conf /etc/julio

Y ahora para crearlos en cada arranque:
vi /etc/rginit
comentamos la línea  $HT_INIT_PATH start
añadimos debajo:
cp /etc/julio/* /var/tmp/
comentamos la línea $HT_INIT_PATH wan1init
escapedospuntosuvedobleq
reboot
Con esto ya no nos deshabilita el USB  ;D

Una vez quitado no se crean usuarios, hay que crearlos a mano o llamar a /usr/sbin/login_set-sh
Si que funciona admin admin (por http), debe ir por libre.

Ahora hay que crear nobody si se va a usar SMB
addgroup -g 65334 nogroup
adduser -D -H  nobody -G nogroup -s /bin/false
OJO para evitar que root se cree en cada arranque con la password por defecto hay que modificar /etc/init.d/rcS y comentar las líneas donde se crea y se pone la password a capón

Al final lo que he hecho es cambiarme la pasword de root y copiar el fichero passwd y groups al fichero var.tar que está en la carpeta raíz.
Como ese fichero se descomprime en cada arranque me crea root y nobody

Volvemos a habilitar el autoarranque
CLI: system->startup enable

Con esto me lleva días funcionando sin problema el pendrive  USB y con SMB anónimo en este chisme que llevaba años en el trastero.  8)

Hay que tener en cuenta que en cada arranque utiliza una 'base de datos encriptada' de configuración.
Si no se salvan los cambios de las páginas de configuración hay que probar a repetir al menos la copia de los .conf a /var/tmp o hacerlos a mano.
Varias veces durante las pruebas se me ha debido corromper la NVRAM, arranca pero deja de funcionar la red. La he tenido que restaurar desde el backup.

Mi idea es conectarle un HD por USB, pero habría que afinarlo con algo como un script para hacer HD-IDLE...

Saludos


 

danitool

  • Visitante
Re: A saco con el CDE30364
« Respuesta #3 en: 24-01-2018, 15:05 (Miércoles) »
Buenas Yo_Julio. Lo primero de todo, gracias por estos excelentes aportes.

Citar
Mi idea es conectarle un HD por USB, pero habría que afinarlo con algo como un script para hacer HD-IDLE...

Tengo aquí un script guardado para este propósito, creo que lo usé en su día con DD-WRT (hace unos cuantos años), y en un PC de sobremesa en un sistema más moderno, creo que es bastante universal y funcionaba muy bien.

Código: [Seleccionar]
#! /bin/sh
disk=sda
interval=30
state=`grep " $disk " /proc/diskstats`
count=$interval
up=1
while [ true ]; do
   sleep 60
   count=$(($count-1))
   newstate=`grep " $disk " /proc/diskstats`
 #  echo -e $newstate
   if [ "$state" = "$newstate" ]; then
      if [ $count -lt 0 ]; then
         count=$interval
         if [ $up = 1 ]; then
            echo -e "spin-down\t" `date`
            sync
            state=`grep " $disk " /proc/diskstats`
     #      echo -e $state
            echo "suspendiendo disco duro"
            sdparm -f --command=stop /dev/$disk
            up=0
         fi
      fi
   else
     # echo -e "drive is up\t" `date`
      count=$interval
      state="$newstate"
      up=1
   fi
done


El inconveniente es que necesita sdparm para parar el disco duro. O bien habría que compilarlo, o parar con otro comando que haya disponible en el sistema.

Solo conozco sdparm para parar un disco duro. Aunque también eliminando del kernel el disco duro al menos en un sistema Linux actual también lo para
Código: [Seleccionar]
echo 1 > /sys/block/sda/device/deletePero nos quedaríamos sin acceso al mismo de todas formas si usásemos ese comando.

Saludos

raphik

  • Visitante
Re: A saco con el CDE30364
« Respuesta #4 en: 25-01-2018, 21:00 (Jueves) »
¿Está disponible el comando hdparm?
« Última modificación: 25-01-2018, 21:04 (Jueves) por raphik »

Desconectado geminis_demon

  • Colaborador
  • *
  • Mensajes: 2389
  • Prácticas precisas precisan práctica
Re: A saco con el CDE30364
« Respuesta #5 en: 26-01-2018, 17:57 (Viernes) »
En su día hice este script que "desvincula" en driver de la tarjeta de red... creo que también sería aplicable a vuestro caso cambiando las rutas por la del disco duro: https://foro.seguridadwireless.net/aplicaciones-y-diccionarios-linux/script-reset_iface-(detecta-y-reinicia-el-driver-de-una-interfce-de-red)/msg331187/#msg331187

La luz cree que viaja más rápido que cualquier otra cosa, pero se equivoca; da lo mismo lo rápido que pueda viajar, porque al final, la luz descubre que la oscuridad ha llegado antes que ella, y la está esperando.

Sb6141

  • Visitante
Re: A saco con el CDE30364
« Respuesta #6 en: 27-01-2018, 02:11 (Sábado) »
Hola yo tengo un CDE30364 con forceware , lo programe con el usb jtag nt , le puedes cambiar la mac ,subirle un config y depende de tu isp te harian falta certificados , no faciles de conseguir , yo tengo 350 megas de bajada y 38,5 de subida clonando una mac de un cablemodem que no este en mi nodo de mi mismo isp , luego con haxor me bajo el config , uso un dpc2100 con haxor que es un firmware mod ,se lo subo al hitron con mac cambiada , reinicio y ya tenemos internet ,en mi isp no hacen falta certis de momento , si quieres te puedo pasar un dump de un hitron CDE30364 por si quieres revisarlo , lo lei con el NT , saludos
« Última modificación: 27-01-2018, 02:19 (Sábado) por Sb6141 »

Yo_Julio

  • Visitante
Re: A saco con el CDE30364
« Respuesta #7 en: 31-01-2018, 17:03 (Miércoles) »
Hola
Se agradecen los comentarios e ideas.  :D 

No está disponible hdparm ni sdparm y si desvinculo el driver: ¿Se puede volver a vincular automáticamente cuando alguien aceda por SMB o cómo se haría?

Evidentemente todo esto es mas divertido que práctico. Lo mejor es las vueltas que dí para leer y programar la flash con el arduino para luego ver que lo desbloqueas con putty y unas pinzas  >:D.

Saludos



Sb6141

  • Visitante
Re: A saco con el CDE30364
« Respuesta #8 en: 31-01-2018, 17:18 (Miércoles) »
la verdad es que te lo has currado , se nota que controlas linux