Reviviendo GoPro con Hard-Brick aka GoPrisapapeles


Como muchos sabéis uno de mis intereses son los dispositivos embebidos, pese a esto uno de los dispositivos a los que nunca me hubiese gustado meterle mano era mi querida GoPro, hasta ayer...

Resulta que justo ayer (Martes 13 para mas inri) se me ocurrió actualizar el firmware de la cámara para conseguir alguna de las últimas mejoras que trae pero para mi desgracia la cámara nunca mas encendió, tras el pánico inicial empecé a hacer pruebas con ella probando las combinaciones de teclas para forzar un hard reset, con SD, sin ella...etc sin resultado hasta que al conectarla por USB y sin batería vi que el led frontal parpadeaba muy levemente, al ver que al menos daba alguna señal de vida y conectada a USB  probé a encenderla y si bien la cámara seguía muerta el ordenador me la reconoció como un "Dispositivo USB desconocido".

En este punto sabemos que al menos la cámara tiene algo de vida y que existe algún tipo de comunicación por USB pero que durante la actualización fallida la memoria se ha borrado por completo.

Tras una llamada al soporte técnico me confirman que esto es un error habitual y que me la reemplazan en garantía, pero claro...el verano está aquí y no quiero quedarme sin ella 2 meses, así que una rápida búsqueda en Google me devuelve la salvación:

https://github.com/evilwombat/gopro-usb-tools

Este set de herramientas nos proporciona diferentes maneras devolver la vida a nuestra cámara, la primera y mas sencilla es restaurar el bootloader, en mi caso no era válido porque todo el firmware había sido wipeado. La segunda (El que yo he usado) se encarga de recargar el Bootloader, HAL y RTOS, a grandes rasgos lo que hace es parchear el bootloader para que apunte a lo que nosotros cargamos en unas direcciones de memoria altas para evitar que cargue cualquier archivo corrupto de la actualización fallida. Por último este set de herramientas nos proporciona una shell interactiva (en 10.9.9.1) con la que podemos movernos dentro de la cámara y verificar la integridad del sistema y la memoria flash.

Bueno, ahora que ya os he presentado la herramienta vamos a ver los pasos para revivir la pequeña.

AVISO: Sigue estos pasos bajo tu responsabilidad, no me hago cargo de cualquier daño que le puedas causar a tu cámara. Si aún está en garantía no seas como yo y pide el reemplazo.



Lo primero es descargarnos la herramienta de github y compilarla:


wget https://github.com/evilwombat/gopro-usb-tools/archive/master.zip
unzip master.zip
cd master
make


Antes de empezar a toquetear la cámara tenemos que preparar los siguientes archivos en un tarjeta SD formateada:

  1. Descargamos el firmware y el archivo autoexec.ash
  2. Descomprimimos el archivo autoexec.ash.zip 
  3. Colocamos ambos archivos en la raíz de la SD


Una vez tenemos el programa y la SD listos, vamos a conectar la GoPro a nuestro ordenador por USB siguiendo estos pasos:


  1. Quitar y volver a poner la batería de la GoPro
  2. Presionar y mantener pulsado el botón de disparo (Botón superior)
  3. Conectar el cable USB a la camara (Y al ordenador obviamente)
  4. Pulsar el boton de endendido durante 4 segundos de la cámara y soltar (Botón frontal)
  5. Soltar el boton superior
En este punto deberíamos de poder ver la cámara listada en los dispositivos USB conectados al ordenador, con el ID 4255:0001



A continuación necesitamos extraer la parte correspondiente al RTOS del archivo de firmware, por lo que haremos uso del comando dd. Para la versión v312 del firmware que es el que enlazo mas arriba las secciones a recortar son las siguientes:



dd if=HD2-firmware.bin skip=15870208 conv=notrunc of=rtos_v312.bin count=6258688 bs=1




La salida del programa nos dejará un archivo llamado rtos_c312.bin que utilizaremos para pasarle al programa.

Por último lanzaremos el programa para que haga su trabajo. Nos colocamos en la carpeta donde esté el ejecutable y lanzaremos gpboot:



./gpboot --rtos rtos_c312.bin



Lo dejaremos trabajar hasta que termine:


Si todo ha ido bien en la cámara deberíamos de ver este icono el el display LCD (NOTA: donde pone v198 debería salir v312, que es nuestra versión de firmware):


Finalmente nuestra pequeña ha vuelto a la vida pero aún no es funcional ya que aún debemos forzarla a que lance la actualización que previamente habíamos preparado en la tarjeta SD. Para hacer esto debemos seguir los siguientes pasos:

  1. Desconectar el cable USB de la cámara
  2. Retirar la batería y colocarla de nuevo
  3. Presionar y mantener el botón superior
  4. Pulsar durante 4 segundos el botón frontal 
  5. Soltar el botón superior
Aquí la cámara ya debería de empezar a actualizarse ejecutando el set de instrucciones que cargamos con el archivo autoexec.ash, de no ser así retira la batería y vuelve a repetir los pasos anteriores continuando con los siguientes:

  • NOTA: Tras los pasos anteriores y con la cámara encendida
  • Presionar y mantener el botón superior
  • Pulsar 3 veces consecutivas el botón frontal (manteniendo durante 1 segundo cada vez)
  • Soltar el botón superior
Estos últimos pasos son la secuencia normal de actualización manual de la cámara.

De nuevo si todo ha ido bien la cámara debería reiniciarse y ya se podría encender con normalidad. Cualquier duda que tengáis preguntadla en los comentarios para poder ayudaros.

En otra ocasión (Si se me vuelve a brickear) os cuento como hacernos root en la cámara, modificar el firmware a nuestro gusto y esas cosas que le gustan a los hackers : )

PD: Aqui abajo os dejo unos enlaces con mas información sobre el proceso y otros tipos de bricks.

Hilo en el foro oficial sobre la herramienta
Repositorio oficial GoPro-USB-Tools
Consejos del fabricante ante fallos durante la actualización




    6 comentarios:

    Anónimo 30 de junio de 2014, 16:55  

    Muchas gracias por poner esto en español. Me ayudo bastante, mis pasos fueron algo diferentes, quiza por el tipo de bloqueo. Pero leyendo y rebuscando se encuentra todo. Saludos y mi Gopro esta viva, gracias!

    Unknown 8 de julio de 2014, 15:56  

    Hola muy buenas perdona por mi torpeza al no estar muy puesto en este tipoi de cosas. Queria preguntarte que programa es el que abres para saber el ID de la cámara (ID 4255:0001), y si es el mismo con el que extraes la parte correspondiente al RTOS del archivo de firmware. Muy agradecido

    Anónimo 20 de julio de 2014, 11:29  

    I think you might need to add a step about running "prepare-bootstrap" on the HD2-firmware.bin file to create the v312-bld.bin and the v312-hal-reloc.bin files.
    ./prepare-boostrap HD2-firmware.bin
    will create these files before you run 'gpboot'.

    Adrián 16 de agosto de 2014, 11:29  

    @Anónimo Actually I thought it was on the post, i'll add it when I have a chance. Thanks for the feedback

    Jonatan 21 de noviembre de 2015, 19:43  

    Hola. Siguiendo los pasos no detecta el ID 4255:0001. Existe otro tutorial? Gracias

    Seba 27 de septiembre de 2016, 15:59  

    no se puede hacer en windows?

    Publicar un comentario

    ShellShock Labs es un blog dedicado a seguridad y hacking en general, un lugar donde buscamos que la gente participe con sus opiniones.

    Síguenos




    Posts Populares