Extrahieren Sie eingebettete Initramfs

9

Ich habe einen Kernel, in den ein initramfs eingebettet ist. Ich möchte es extrahieren.

Ich habe die Ausgabe bekommen, x86 boot sectorwenn ich es tuefile bzImage

Ich habe System.map-Datei für dieses Kernel-Image.

Gibt es eine Möglichkeit, das eingebettete initramfs-Image mit oder ohne Hilfe der System.map- Datei aus diesem Kernel zu extrahieren ?

Die interessante Zeichenfolge in der Systemzuordnungsdatei lautet: (Nur für den Fall, dass es hilft)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size
SHW
quelle

Antworten:

14

Es gibt einige Informationen dazu im Gentoo-Wiki: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Es wird empfohlen, deren Verwendung binwalkaußerordentlich gut funktioniert.

Ich werde einen kurzen Überblick mit einem Beispiel geben:

Extrahieren Sie zuerst die bzImage-Datei mit binwalk:

> binwalk --extract bzImage
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Microsoft executable, portable (PE)
18356         0x47B4          xz compressed data
9772088       0x951C38        xz compressed data

Ich landete mit drei Dateien: 47B4, 47B4.xzund951C38.xz

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

Lassen Sie uns jetzt binwalk erneut ausführen auf 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>

Dies kam mit einer langen Liste gefundener Pfade und mehreren potenziell interessanten Dateien zurück. Werfen wir einen Blick.

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

file E9B348ist ein (bereits dekomprimiertes) cpio-Archiv, genau das, wonach wir suchen! Bingo!

Um das unkomprimierte cpio-Archiv (Ihre initramfs!) In Ihrem aktuellen Verzeichnis zu entpacken, führen Sie es einfach aus

> cpio -i < E9B348

Das war fast zu einfach. binwalkist absolut das Werkzeug, das Sie suchen. Als Referenz habe ich hier v2.1.1 verwendet.

Freaker
quelle
Bingo !!! Du hast den Nagel auf den Kopf getroffen !
SHW
2

Soweit ich weiß, ist das initramfs cpio-Archiv nur mit dem Kernel verknüpft.

Daher sollte dies funktionieren:

  1. Verwenden Sie dddiese Option, um den Bereich zwischen c17fd8ccund zu extrahierenc19d7b90
  2. Entpacken Sie die resultierenden Daten mit einem CPIO-Entpacker.
Multisync
quelle