estrarre initramfs incorporato


9

Ho un kernel in cui è incorporato un initramfs. Voglio estrarlo.

Ho ottenuto l'output x86 boot sectorquando lo facciofile bzImage

Ho un file System.map per questa immagine del kernel.

Esiste un modo per estrarre l'immagine initramfs incorporata da questo kernel con o senza l'aiuto del file System.map ?

La stringa interessante trovata nel file della mappa di sistema è: (Nel caso in cui aiuti)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size

Risposte:


14

Ci sono alcune informazioni al riguardo nel wiki di Gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Raccomanda l'uso di binwalkcui funziona estremamente bene.

Ti darò una breve guida con un esempio:

estrarre prima il file 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

Ho finito con tre file: 47B4, 47B4.xze951C38.xz

> file 47B4
47B4: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=aa47c6853b19e9242401db60d6ce12fe84814020, stripped

Ora eseguiamo di nuovo binwalk su 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>

Questo è tornato con un lungo elenco di percorsi trovati e diversi file potenzialmente interessanti. Diamo un'occhiata.

> file _47B4.extracted/*
<snip>
_47B4.extracted/E9B348:     ASCII cpio archive (SVR4 with no CRC)

file E9B348è un archivio cpio (già decompresso), proprio quello che stiamo cercando! Bingo!

Per decomprimere l'archivio cpio non compresso (i tuoi initramfs!) Nella directory corrente, esegui

> cpio -i < E9B348

È stato quasi troppo facile. binwalkè assolutamente lo strumento che stai cercando. Per riferimento, stavo usando v2.1.1 qui.


Bingo !!! L'hai inchiodato!
SHW

2

Per quanto ne so, l'archivio cpio di initramfs è appena collegato al kernel.

Quindi, questo dovrebbe funzionare:

  1. utilizzare ddper estrarre l'intervallo tra c17fd8ccec19d7b90
  2. decomprimere i dati risultanti utilizzando un decompressore CPIO.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.