lunes, 19 de julio de 2010

Como activar el PVR !!

El binario

La aplicacion viene con un PVR/DVR incorporado, pero al parecer esta deshabilitado.
Como todavia no han liberado el codigo fuente de la aplicacion y no creo que alguna vez lo hagan
para activar el PVR fue necesario patchear el binario.

En /root/bin/csapp.elf esta el binario que hace todo. Basicamente muestra los menus, sintoniza, instala etc.

Para activar el PVR van a necesitar un editor hexadecimal.
Bajen el binario a su maquina y vayan al offset 0x2A3C reemplazen el D0 por 6C y graben con otro nombre.
Ya esta, subanlo a la caja, ejecuten.

Lo que hicimos fue reemplazar el menu de configuracion la funcionalidad de PIN por el menu de PVR (quien necesita configurar el PIN?).

Vayan al menu principal "System Settings" >> "PIN Setting" . Les va a pedir el pin, ponen 0000 y disfruten del PVR.

Para explicar la magia, despues de algunos minutos de debug llegue aca, esto es el main switch de los menus:
En a9d4 esta la jumptable con todas las opcines (los cases del switch). Si tocamos esa tabla hacemos que salte a donde queremos


0000A9CC loc_A9CC                                ; CODE XREF: MiniGUIMain+DC j
.text:0000A9CC                 SUB     R3, R0, #2
.text:0000A9D0                 CMP     R3, #0x23       ; switch 36 cases
.text:0000A9D4                 LDRLS   PC, [PC,R3,LSL#2] ; switch jump
.text:0000A9D8                 B       loc_AA94        ; default
.text:0000A9D8                                         ; jumptable 0000A9D4 cases 9,10,30-32



Aca va la tabla de jumps del switch por si quieren probar otras cosas :

.text:0000A9DC                 DCD loc_AB54            ; jump table for switch statement
.text:0000A9DC                 DCD loc_AB48
.text:0000A9DC                 DCD loc_AB48
.text:0000A9DC                 DCD loc_AB48
.text:0000A9DC                 DCD loc_AB48
.text:0000A9DC                 DCD loc_AB40
.text:0000A9DC                 DCD loc_AB34
.text:0000A9DC                 DCD loc_AB2C
.text:0000A9DC                 DCD loc_AB24
.text:0000A9DC                 DCD loc_AA94
.text:0000A9DC                 DCD loc_AA94
.text:0000A9DC                 DCD loc_AB1C
.text:0000A9DC                 DCD loc_AB10
.text:0000A9DC                 DCD loc_AB10
.text:0000A9DC                 DCD loc_AB10
.text:0000A9DC                 DCD loc_AB08
.text:0000A9DC                 DCD loc_AB08
.text:0000A9DC                 DCD loc_AB08
.text:0000A9DC                 DCD loc_AB00
.text:0000A9DC                 DCD loc_AAF8
.text:0000A9DC                 DCD loc_AAF0
.text:0000A9DC                 DCD loc_AAE8
.text:0000A9DC                 DCD loc_AAE0
.text:0000A9DC                 DCD loc_AAD8
.text:0000A9DC                 DCD PIN_MENU_AAD0
.text:0000A9DC                 DCD loc_AAC8
.text:0000A9DC                 DCD loc_AAC0
.text:0000A9DC                 DCD loc_AAB8
.text:0000A9DC                 DCD loc_AAB0
.text:0000A9DC                 DCD loc_AAA8
.text:0000A9DC                 DCD loc_AA94
.text:0000A9DC                 DCD loc_AA94
.text:0000A9DC                 DCD loc_AA94
.text:0000A9DC                 DCD PVR_PLAY_MENU_AA8C
.text:0000A9DC                 DCD PVR_MENU_AA84
.text:0000A9DC                 DCD DVR_MENU_AA6C
Hay un tema para grabar. Uno de los menues graba y el otro reproduce las grabaciones.
Habria que mapearlo a un boton para que sea mas comodo.
La opcion dos es elegir alguna otra funcion del menu inservible y ponerle a una el grabador y a otra el player.
Es complicado y ojala se dignen a releasear el firmware con todo asi no tenemos que estar haciendo estas cosas :).


Dejo unas fotos de los menues.









Gracias IDA.

domingo, 18 de julio de 2010

Correr aplicaciones

Probar nuestras aplicaciones Ginga NCL y/o Lua ahora es posible.
Lo unico que hay que hacer es poner nuestras apps en una pendrive y conectarlo a la caja.
Apenas hacemos esto el usb aparece montado en /mnt

Podemos copiar la app al /home o correrla directo desde el usb en ambos casos lo unico que tenemos que hacer es :

/root/bin/ginga --ncl /home/app/app.ncl

Con esto se ejecutara la aplicacion.
Es enorme la diferencia entre correr una app en el emulador y en la caja.
Se ve  bastante mal y el refresco es muy notorio.

Aca dejo una foto de ejemplo




Seguramente exista una forma de correr las aplicaciones sin tener que hacer el truco de telnetd y ejecutar desde shell. En /root/bin hay un script ginga.sh que monta el usb y ejecuta la aplicaciones que este en /app/main.ncl.

Hasta el momento no se como disparar eso, pero me fije con IDA en el binario del menu  y lo estan llamando:

.text:00010EDC                 MOV     R3, #1
.text:00010EE0                 STR     R3, [R4]
.text:00010EE4                 LDR     R0, =aGinga_sh  ; "ginga.sh"
.text:00010EE8                 BL      system

y mas arriba parece como que en realidad fue un agregado local al firmware original

DCD aGingaEjemplo ; "----- Ginga Ejemplo -----"
char *command
DCD aGinga_sh     ; "ginga.sh"






Intro




En Argentina se estan vendiendo unos STB para television digital por aire que corren linux.
Estos STB se llaman CDR1000 y los fabrica la empresa Coradir. 
En este blog voy a mostrar como acceder al linux y que cosas se pueden hacer.

Para acceder al linux que tiene adentro la forma mas rapida es usando el browser que tiene incorporada la caja.

Para esto necesitamos:
- Un teclado USB
- Una TV 
- Un CDR1000
- El ultimo firmaware que permite acceder al navegador (Version SW: Mayo 15 2010)

Firmware

Antes de empezar controlar la version de firmware, para esto dentro del menu ir a : "Conf. Sistema" >> " Info Sistema" y mirar donde dice "Version SW" 

Si la version de SW dice "15 de Mayo 2010" estamos bien y podemos seguir. Si dice algo como "14 de Mayo" hay que actualizar para esto ir a la pagian de coradir y seguir las intrsucciones (www.coradir.com.ar/stb)


Accediendo al linux

Con la version de firmware correcto conectamos el teclado USB y conectamos la caja a nuestra router o switch o etc y prendemos la caja.
Cuando bootea vamos al menu y entramos en la opcion que dice "Internet". Nos avisa algo sobre el teclado usb y le damos OK. En ese momento esperamos que cargue el browser.


Apenas carga apretamos ESC y vamos al menu de arriba.
Vamos a "Configuracion" >> "Mail, telnet and shell".
En el segundo input text donde dice "Programa de Telnet" escribimos lo siguiente:

/bin/busybox telnetd -p 1111 -l /bin/sh
Le damos aceptar y volvemos al broswer.
Apretamos ESC de nuevo y vamos a "Fichero" >> "Ir a URL:" y escribimos lo siguiente:

telnet://44.55.66.77

Y le damos enter.
En este momento ya deberia estar abierto el puerto 1111 y listo para que nos conectemos.

Para saber la ip de la caja hay varias opciones, si estan usando un router comun vean en la interface de administracion que seguro tiene la tabla de DHCP y buscan ahi la maquina.

Los que tienen un switch vean otras formas como sniffeando o llevando el browser a alguna url de un webserver local y viendo en los logs la ip , etc.

Cuando conozcan la ip de la caja lo unico que resta por hacer es

telnet xx.xx.xx.xx 1111

y si todo salio bien van a ver esto :

ÿýÿýÿý!ÿûÿû

# id
id
uid=0(root) gid=0(root)

y si . somos root. ahora podemos hacer muchas cosas.......



Sticky shell

Para dejar el shell permanente y evitar tener que hacer todo esto cada vez que prendemos la caja recomiendo
ir a /bin/root/links.sh editarlo (vi) y agregar la linea de telnetd ahi adentro despues del /bin/sh. 


De esta forma cada vez que levantemos el browser ya va a estar el shell listo en el port 1111. 




Se puede hacer tambien desde el inittab en /etc pero preferi no tocarlo.






 .