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

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.


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.