extraire les initramfs intégrés

9

J'ai un noyau dans lequel un initramfs est intégré. Je veux l'extraire.

J'ai obtenu la sortie x86 boot sectorquand je le faisfile bzImage

J'ai un fichier System.map pour cette image du noyau.

Existe-t-il un moyen d'extraire l'image initramfs intégrée de ce noyau avec ou sans l'aide du fichier System.map ?

La chaîne intéressante trouvée dans le fichier de carte système est: (Juste au cas où cela aiderait)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size
SHW
la source

Réponses:

14

Il y a quelques informations à ce sujet dans le wiki gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Il recommande l'utilisation binwalkdont 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.xzet951C38.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 E9B348est 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. binwalkest absolument l'outil que vous recherchez. Pour référence, j'utilisais la v2.1.1 ici.

freaker
la source
Bingo !!! Vous avez réussi !
SHW
2

Pour autant que je sache, l'archive initramfs cpio est juste liée au noyau.

Par conséquent, cela devrait fonctionner:

  1. utiliser ddpour extraire la plage entre c17fd8ccetc19d7b90
  2. décompressez les données résultantes à l'aide d'un décompresseur CPIO.
Multisync
la source