Hay información sobre esto en el wiki de gentoo:https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging
Se recomienda el uso de binwalk
que funciona muy bien.
Daré un recorrido rápido con un ejemplo:
primero extraiga el archivo bzImage con binwalk:
> binwalk --extract bzImage
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Microsoft executable, portable (PE)
18356 0x47B4 xz compressed data
9772088 0x951C38 xz compressed data
Terminé con tres archivos:47B4
, 47B4.xz
y 951C38.xz
> file 47B4
47B4: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=aa47c6853b19e9242401db60d6ce12fe84814020, stripped
Ahora vamos a ejecutar binwalk de nuevo en 47B4
:
> binwalk --extract 47B4
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ELF, 64-bit LSB executable, AMD x86-64, version 1 (SYSV)
9818304 0x95D0C0 Linux kernel version "4.4.6-gentoo ([email protected]) (gcc version 4.9.3 (Gentoo Hardened 4.9.3 p1.5, pie-0.6.4) ) #1 SMP Tue Apr 12 14:55:10 CEST 2016"
9977288 0x983DC8 gzip compressed data, maximum compression, from Unix, NULL date (1970-01-01 00:00:00)
<snip>
Esto volvió con una larga lista de rutas encontradas y varios archivos potencialmente interesantes. Echemos un vistazo.
> file _47B4.extracted/*
<snip>
_47B4.extracted/E9B348: ASCII cpio archive (SVR4 with no CRC)
archivo E9B348
es un archivo cpio (ya descomprimido), ¡justo lo que estamos buscando! ¡Bingo!
Para descomprimir el archivo cpio sin comprimir (¡su initramfs!) en su directorio actual, simplemente ejecute
> cpio -i < E9B348
Eso fue casi demasiado fácil. binwalk
es absolutamente la herramienta que estás buscando. Como referencia, estaba usando v2.1.1 aquí.
Hasta donde yo sé, el archivo initramfs cpio está vinculado al kernel.
Por lo tanto, esto debería funcionar:
- usa
dd
para extraer el rango entrec17fd8cc
yc19d7b90
- descomprima los datos resultantes usando un desempaquetador CPIO.