екстракт Вбудовані initramfs


9

У мене є ядро, в яке вбудований один initramfs. Я хочу його витягти.

Я отримав вихід, x86 boot sectorколи це роблюfile bzImage

У мене є файл System.map для цього зображення ядра.

Чи є можливість витягти вбудоване зображення initramfs з цього ядра за допомогою або без допомоги файла System.map ?

Цікавий рядок, знайдений у файлі системної картки : (Про всяк випадок, коли це допомагає)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size

Відповіді:


14

Про це є деяка інформація у вікі gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Він рекомендує використання binwalkяких працює надзвичайно добре.

Я приведу короткий посібник із прикладом:

спочатку витягніть файл bzImage за допомогою binwalk:

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

Я закінчив з трьома файлами: 47B4, 47B4.xzі951C38.xz

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

Тепер давайте знову запустимо binwalk 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>

Це повернулося з довгим списком знайдених шляхів та кількома потенційно цікавими файлами. Давай подивимось.

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

Файл E9B348- це (вже декомпресований) архів cpio, саме те, що ми шукаємо! Бінго!

Щоб розпакувати нестиснений архів cpio (ваші initramfs!) У вашому поточному каталозі, просто запустіть

> cpio -i < E9B348

Це було майже надто просто. binwalkце абсолютно той інструмент, який ви шукаєте. Для довідки я тут використовував v2.1.1.


Бінго !!! Ти впорався !
SHW

2

Наскільки мені відомо, архів cpio initramfs просто пов'язаний з ядром.

Отже, це має працювати:

  1. використовувати ddдля витягу діапазону між c17fd8ccіc19d7b90
  2. розпакуйте отримані дані за допомогою распаковщика CPIO.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.