Il y a quelques informations à ce sujet dans le wiki gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging
Il recommande l'utilisation binwalk
dont fonctionne extrêmement bien.
Je vais vous présenter rapidement un exemple:
extraire d'abord le fichier bzImage avec binwalk:
> binwalk --extract bzImage
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Microsoft executable, portable (PE)
18356 0x47B4 xz compressed data
9772088 0x951C38 xz compressed data
J'ai fini avec trois fichiers: 47B4
, 47B4.xz
et951C38.xz
> file 47B4
47B4: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=aa47c6853b19e9242401db60d6ce12fe84814020, stripped
Permet maintenant d'exécuter à nouveau binwalk sur 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 (root@host) (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>
Cela est revenu avec une longue liste de chemins trouvés et plusieurs fichiers potentiellement intéressants. Regardons.
> file _47B4.extracted/*
<snip>
_47B4.extracted/E9B348: ASCII cpio archive (SVR4 with no CRC)
fichier E9B348
est un (déjà décompressé) archives cpio, tout ce que nous recherchons! Bingo!
Pour décompresser l'archive cpio non compressée (vos initramfs!) Dans votre répertoire courant, lancez
> cpio -i < E9B348
C'était presque trop facile. binwalk
est absolument l'outil que vous recherchez. Pour référence, j'utilisais la v2.1.1 ici.
Pour autant que je sache, l'archive initramfs cpio est juste liée au noyau.
Par conséquent, cela devrait fonctionner:
dd
pour extraire la plage entrec17fd8cc
etc19d7b90
la source