-
Extraer datos de una partición Production de OpenWrt
La partición de producción de OpenWrt guarda todos los datos importantes. Desde el rootfs hasta los datos guardados en el overlay, que son los datos que se han escrito «sobre» los datos del rootfs original (aunque realmente no es que se sobreescriban, sino que los datos del overlay «tienen más prioridad» que los del rootfs sin modificar). A la hora de extraer esos datos, lo que realmente nos interesa son los datos del overlay.
Si tenemos OpenWrt instalado en una MicroSD, y esta está en /dev/sdb, hacemos:
sudo fdisk -l /dev/sdb
Vemos una salida como esta:
Disco /dev/sdb: 29,71 GiB, 31902400512 bytes, 62309376 sectores Modelo de disco: USB3.0 CRW -SD Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: gpt Identificador del disco: 5452574F-2211-4433-5566-778899AABB00 Disposit. Comienzo Final Sectores Tamaño Tipo /dev/sdb1 34 8191 8158 4M Sistema de ficheros de Linux /dev/sdb2 8192 9215 1024 512K Sistema de ficheros de Linux /dev/sdb3 9216 13311 4096 2M Sistema de ficheros de Linux /dev/sdb4 13312 21503 8192 4M Sistema EFI /dev/sdb5 24576 90111 65536 32M Sistema EFI /dev/sdb6 90112 131071 40960 20M Sistema EFI /dev/sdb7 131072 62309342 62178271 29,6G desconocido
La partición que nos interesa es la última, porque suele ser la de producción. Procedemos a quemarla en un archivo:
sudo dd if=/dev/sdb7 of='/root/sdb7.img' status=progress
Salida:
62178271+0 records in 62178271+0 records out 31835274752 bytes (32 GB, 30 GiB) copied, 340,193 s, 93,6 MB/s
Miramos que tipo de imagen es:
sudo file /root/sdb7.img
Salida:
/root/sdb7.img: Device Tree Blob version 17, size=4096, boot CPU=0, string block size=142, DT structure block size=3820
Eso es una buena señal. Normalmente, la partición de producción es un Device Tree Blob. Entonces, como sabemos que la partición de overlay aparece a 1024 bytes desde el inicio real del filesystem como F2FS y la firma mágica de un F2FS es 10 20 f5 f2, para montar la partición overlay de ese archivo hacemos:
vImg='/root/sdb7.img' vOffsetFirma=$(LC_ALL=C grep -aobm1 $'\x10\x20\xf5\xf2' "$vImg" | cut -d ':' -f 1) vOffsetOverlay=$((vOffsetFirma - 1024)) mkdir -p /mnt/overlay-openwrt mount -o loop,ro,offset="$vOffsetOverlay" -t f2fs "$vImg" /mnt/overlay-openwrt
Eso ya nos deja montada la partición overlay como sólo lectura en la carpeta /mnt/overlay-openwrt. A partir de entonces ya podemos navegar por esa carpeta para extraer los archivos que nos interese extraer de ella.
EXTRA: Si necesitamos obtener un poco de información sobre la imagen del archivo:
apt-get update && apt-get -y install u-boot-tools dumpimage -l /root/sdb7.img
Salida:
FIT description: ARM64 OpenWrt FIT (Flattened Image Tree) Created: Tue Feb 4 00:09:37 2025 Image 0 (kernel-1) Description: ARM64 OpenWrt Linux-6.6.73 Created: Tue Feb 4 00:09:37 2025 Type: Kernel Image Compression: gzip compressed Data Size: 5633434 Bytes = 5501.40 KiB = 5.37 MiB Architecture: AArch64 OS: Linux Load Address: 0x44000000 Entry Point: 0x44000000 Hash algo: crc32 Hash value: 9451099d Hash algo: sha1 Hash value: feeb11863ab132c7c24bf1c70a1daec2dfba4c62 Image 1 (fdt-1) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree blob Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 31935 Bytes = 31.19 KiB = 0.03 MiB Architecture: AArch64 Load Address: 0x43f00000 Hash algo: crc32 Hash value: fae8a5f6 Hash algo: sha1 Hash value: 4487cda227d6248f1d6cf259593bedbbfc609872 Image 2 (fdt-mt7986a-bananapi-bpi-r3-emmc) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-emmc Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 990 Bytes = 0.97 KiB = 0.00 MiB Architecture: AArch64 Hash algo: crc32 Hash value: 85e4da58 Hash algo: sha1 Hash value: 471cf60107fbdc3dcb772696c05db2eb3c1d8a17 Image 3 (fdt-mt7986a-bananapi-bpi-r3-nand) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-nand Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 1166 Bytes = 1.14 KiB = 0.00 MiB Architecture: AArch64 Hash algo: crc32 Hash value: 80cf140c Hash algo: sha1 Hash value: cd9c9ecb32a6ebeb009f82eb718e49d29feff6a1 Image 4 (fdt-mt7986a-bananapi-bpi-r3-nor) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-nor Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 1214 Bytes = 1.19 KiB = 0.00 MiB Architecture: AArch64 Hash algo: crc32 Hash value: a3898f18 Hash algo: sha1 Hash value: c45f4ad930273fbc6721b946a380aca1c9bbd5a4 Image 5 (fdt-mt7986a-bananapi-bpi-r3-sd) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-sd Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 836 Bytes = 0.82 KiB = 0.00 MiB Architecture: AArch64 Hash algo: crc32 Hash value: d42f2ae8 Hash algo: sha1 Hash value: 17df94373cd82dec3921ddc92c3a61bcc4cef81d Image 6 (fdt-mt7986a-bananapi-bpi-r3-respeaker-2mics) Description: ARM64 OpenWrt bananapi_bpi-r3 device tree overlay mt7986a-bananapi-bpi-r3-respeaker-2mics Created: Tue Feb 4 00:09:37 2025 Type: Flat Device Tree Compression: uncompressed Data Size: 1366 Bytes = 1.33 KiB = 0.00 MiB Architecture: AArch64 Hash algo: crc32 Hash value: e18d9119 Hash algo: sha1 Hash value: ab6aca488c28a6bbb0b991053346e9ab977be747 Image 7 (rootfs-1) Description: ARM64 OpenWrt bananapi_bpi-r3 rootfs Created: Tue Feb 4 00:09:37 2025 Type: Filesystem Image Compression: uncompressed Data Size: 32088064 Bytes = 31336.00 KiB = 30.60 MiB Hash algo: crc32 Hash value: f1e8489e Hash algo: sha1 Hash value: 3a7a8d742a6aa810077b6230809bbb012b7c7d73 Default Configuration: 'config-mt7986a-bananapi-bpi-r3' Configuration 0 (config-mt7986a-bananapi-bpi-r3) Description: OpenWrt bananapi_bpi-r3 Kernel: kernel-1 FDT: fdt-1 Loadables: rootfs-1 Configuration 1 (mt7986a-bananapi-bpi-r3-emmc) Description: OpenWrt bananapi_bpi-r3 overlay mt7986a-bananapi-bpi-r3-emmc Kernel: unavailable FDT: fdt-mt7986a-bananapi-bpi-r3-emmc Configuration 2 (mt7986a-bananapi-bpi-r3-nand) Description: OpenWrt bananapi_bpi-r3 overlay mt7986a-bananapi-bpi-r3-nand Kernel: unavailable FDT: fdt-mt7986a-bananapi-bpi-r3-nand Configuration 3 (mt7986a-bananapi-bpi-r3-nor) Description: OpenWrt bananapi_bpi-r3 overlay mt7986a-bananapi-bpi-r3-nor Kernel: unavailable FDT: fdt-mt7986a-bananapi-bpi-r3-nor Configuration 4 (mt7986a-bananapi-bpi-r3-sd) Description: OpenWrt bananapi_bpi-r3 overlay mt7986a-bananapi-bpi-r3-sd Kernel: unavailable FDT: fdt-mt7986a-bananapi-bpi-r3-sd Configuration 5 (mt7986a-bananapi-bpi-r3-respeaker-2mics) Description: OpenWrt bananapi_bpi-r3 overlay mt7986a-bananapi-bpi-r3-respeaker-2mics Kernel: unavailable FDT: fdt-mt7986a-bananapi-bpi-r3-respeaker-2micsVemos ahí el rootfs original de la versión de OpenWrt que está instalada en la MicroSD:
Image 7 (rootfs-1) Type: Filesystem Image Compression: uncompressed Data Size: 32088064 Bytes
Pero la partición sdb7.img no se monta directamente porque es una FIT image. Primero hay que extraer la subimagen rootfs-1:
dumpimage -T flat_dt -p 7 -o /root/rootfs-1.img /root/sdb7.img
Posible salida:
Extracted: Image 7 (rootfs-1) Description: ARM64 OpenWrt bananapi_bpi-r3 rootfs Created: Tue Feb 4 00:09:37 2025 Type: Filesystem Image Compression: uncompressed Data Size: 32088064 Bytes = 31336.00 KiB = 30.60 MiB Hash algo: crc32 Hash value: f1e8489e Hash algo: sha1 Hash value: 3a7a8d742a6aa810077b6230809bbb012b7c7d73
Si queremos ver información de la imagen que se extrajo:
file /root/rootfs-1.img
Posible salida:
/root/rootfs-1.img: Squashfs filesystem, little endian, version 4.0, xz compressed, 32086721 bytes, 3502 inodes, blocksize: 262144 bytes, created: Mon Feb 3 23:09:37 2025
Bien, ya tenemos un filesystem real: SquashFS! Para montarlo en solo lectura:
mkdir -p /mnt/rootfs-openwrt mount -o loop,ro -t squashfs /mnt/PartDatos/NiPeGun/rootfs-1.img /mnt/rootfs-openwrt
Los hacks de hacks4geeks son minitutoriales rápidos pensados para geeks con conocimiento informático avanzado. Si no entiendes o no consigues ejecutar un hack de esta web considera suscribirte a Premium para solicitar asistencia sobre el mismo.