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.

¿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
opkgfuncionando
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


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.binu-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
- Clonar repositorio:
git clone https://github.com/Lup1n-3/boot_mark7
cd boot_mark7
- Dar permisos:
chmod +x recover-mk7.sh
- Ejecutar como root:
sudo ./recover-mk7.sh
Más contenido
Si te interesan este tipo de investigaciones, técnicas y hardware hacking: