извлечь встроенные initramfs

9

У меня есть ядро, в которое встроен один initramfs. Я хочу извлечь это.

Я получил выход, x86 boot sectorкогда я делаюfile bzImage

У меня есть файл System.map для этого образа ядра.

Есть ли способ извлечь встроенный образ initramfs из этого ядра с помощью или без помощи файла System.map ?

Интересная строка, найденная в файле системной карты : (на всякий случай, если это поможет)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size
SHW
источник

Ответы:

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 здесь.

Freaker
источник
Бинго !!! Ты сделал это !
SHW
2

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

Следовательно, это должно работать:

  1. использовать ddдля извлечения диапазона междуc17fd8cc иc19d7b90
  2. распакуйте полученные данные, используя распаковщик CPIO.
Multisync
источник