Reviviendo una pineapple Mark7

Reviviendo una pineapple Mark7

Recuperación de U-Boot — WiFi Pineapple Mark VII

⚠️ IMPORTANTE: Armé un script para automatizar todo el proceso, pero te recomiendo leer primero el paso a paso para entender exactamente qué está ocurriendo y evitar errores que puedan brickear el dispositivo.


Contexto del problema

Mi problema empezó cuando me regalaron una WiFi Pineapple Mark VII con un problema de fábrica:
no podía bootear hiciera lo que hiciera.

  • Actualizar firmware → ❌
  • Usar recovery → ❌
  • Reiniciar normalmente → ❌

Sin embargo, encontré algo curioso usando UART.

Al seleccionar la opción:

2: Load system code then write to Flash via TFTP.

y luego cancelar con Ctrl + C, el dispositivo arrancaba normalmente.

image.png


¿Por qué ocurre esto?

Aunque la opción 2 está pensada para flashear firmware por TFTP, al abortar la transferencia:

  • U-Boot no se reinicia
  • No queda detenido
  • Continúa el flujo normal de ejecución
  • Arranca el sistema instalado en la flash

Esto sucede porque, tras abortar el TFTP, U-Boot salta al arranque normal usando direcciones internas conocidas (por ejemplo 0xbc050000).


Que sigue?

Decidí obtener un backup del U-Boot (agradecimientos a UnHackerEnCapital, ya que no había dumps disponibles en internet).


Requisitos

  • Acceso root (SSH o UART)
  • Conexión USB con la Pineapple
  • opkg funcionando

1) Verificar las particiones U-Boot

Desde la shell root:

cat /proc/mtd

Deberías ver algo como:

mtd0: 00030000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
  • MTD0 → U-Boot
  • MTD1 → U-Boot environment

En mi caso:

  • MTD1 estaba vacío (no crítico)
  • MTD0 no contenía la cabecera válida → posible causa del fallo

image1

image2)

Como podemos ver aca tanto el MTD0 como el 1 estan mal, el MTD1 que es del uboot env estaba totalmente vacio (esto mucho no importa) y el MTD0 que es del uboot deberia contener un inicio similar a v… el cual no lo tiene, por ende ahi tenemos una posible causa del fallo


2) Instalar el módulo mtd-rw

Esto lo necesitamos ya que no podemos reescribir esa particion con DD al estar bloqueado

root@mk7:~# dd if=/root/u-boot-env.bin of=/dev/mtd1
dd: can't open '/dev/mtd1': Permission denied

asi que instalamos kmod-mtd-rw

opkg update
opkg install kmod-mtd-rw

3) Desbloquear escritura

Ahora usamos el siguiente comando y ya podremos usar dd tranquilamente

insmod mtd-rw i_want_a_brick=1

⚠️ Este módulo permite escribir en particiones críticas como U-Boot.


4) Backup de seguridad

Esto es importante para no tener ningun problema y poder volver atras

dd if=/dev/mtd1 of=/root/u-boot-env-backup.bin
dd if=/dev/mtd0 of=/root/u-boot-backup.bin

5) Subir archivos funcionales

Subir el archivo u-boot-env.bin y uboot.bin funcionando (revisar enlace al final) a tu dispositivo

  • u-boot-env.bin
  • u-boot.bin

Puedes usar:

  • SCP
  • SFTP
  • FileZilla
  • rsync

6) Flashear U-Boot y entorno

Aca hacemos el paso contrario, le indicamos que coloque nuestro nuevo uboot en la ubicacion correspondiente

dd if=/root/u-boot-env.bin of=/dev/mtd1
dd if=/root/u-boot.bin of=/dev/mtd0

7) Sincronizar y reiniciar

Aca basicamente sincronizamos los cambios y reiniciamos para comprobar que funcione todo como deberia

sync
reboot

Si todo salió bien, la Pineapple debería bootear por sí sola al reiniciar.


Script automatizado

Si no querés hacerlo manualmente, preparé una herramienta que automatiza todo.

Mini guía rápida

  1. Clonar repositorio:
git clone https://github.com/Lup1n-3/boot_mark7
cd boot_mark7
  1. Dar permisos:
chmod +x recover-mk7.sh
  1. Ejecutar como root:
sudo ./recover-mk7.sh

Más contenido

Si te interesan este tipo de investigaciones, técnicas y hardware hacking:

https://lup1nn.carrd.co/