wyodrębnij osadzone initramfs

9

Mam jądro, w którym osadzony jest jeden initramfs. Chcę to wyodrębnić.

Mam wyjście, x86 boot sectorkiedy to robięfile bzImage

Mam plik System.map dla tego obrazu jądra.

Czy jest jakiś sposób na wyodrębnienie osadzonego obrazu initramfs z tego jądra z lub bez pomocy pliku System.map ?

Interesujący ciąg znaleziony w pliku mapy systemu to: (na wypadek, gdyby to pomogło)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size
SHW
źródło

Odpowiedzi:

14

Informacje na ten temat można znaleźć na wiki gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Zaleca użycie, binwalkktóre działa wyjątkowo dobrze.

Podam krótki przewodnik z przykładem:

najpierw rozpakuj plik bzImage za pomocą binwalk:

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

Skończyło się z trzech plików: 47B4, 47B4.xzi951C38.xz

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

Teraz ponownie uruchommy binwalk na 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>

Wrócił z długą listą znalezionych ścieżek i kilkoma potencjalnie interesującymi plikami. Spójrzmy.

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

plik E9B348to (już zdekompresowane) archiwum CPIO, właśnie tego szukamy! Bingo!

Aby rozpakować nieskompresowane archiwum CPIO (twoje initramfs!) W bieżącym katalogu, po prostu uruchom

> cpio -i < E9B348

To było prawie zbyt łatwe. binwalkjest absolutnie narzędziem, którego szukasz. Dla porównania użyłem tutaj wersji 2.1.1.

dziwak
źródło
Bingo !!! Udało wam się !
SHW
2

O ile mi wiadomo, archiwum cpio initramfs jest właśnie połączone z jądrem.

Dlatego powinno to działać:

  1. Użyj, ddaby wyodrębnić zakres pomiędzy c17fd8ccic19d7b90
  2. rozpakuj uzyskane dane ny za pomocą rozpakowywania CPIO.
Multisynchronizacja
źródło