ekstrak initramfs Tertanam

9

Saya memiliki kernel di mana satu initramfs tertanam. Saya ingin mengekstraknya.

Saya mendapatkan hasilnya x86 boot sectorketika saya melakukannyafile bzImage

Saya memiliki file System.map untuk gambar kernel ini.

Apakah ada cara untuk mengekstrak gambar initramfs yang disematkan dari kernel ini dengan atau tanpa bantuan file System.map ?

String menarik yang ditemukan dalam file peta sistem adalah: (Jika itu membantu)

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

Jawaban:

14

Ada beberapa informasi tentang ini di wiki gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Ini merekomendasikan penggunaan binwalkyang bekerja sangat baik.

Saya akan memberikan walk-through cepat dengan contoh:

ekstrak terlebih dahulu file bzImage dengan binwalk:

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

Aku berakhir dengan tiga file: 47B4, 47B4.xzdan951C38.xz

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

Sekarang mari kita jalankan binwalk lagi di 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>

Ini kembali dengan daftar panjang jalur yang ditemukan dan beberapa file yang berpotensi menarik. Mari kita lihat.

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

file E9B348adalah arsip cpio (yang sudah didekompresi), hanya apa yang kita cari! Bingo!

Untuk membongkar arsip cpio terkompresi (initramfs Anda!) Di direktori Anda saat ini jalankan saja

> cpio -i < E9B348

Itu hampir terlalu mudah. binwalkbenar-benar alat yang Anda cari. Untuk referensi, saya menggunakan v2.1.1 di sini.

orang aneh
sumber
Bingo !!! Kamu berhasil !
SHW
2

Sejauh yang saya tahu, arsip cpio initramfs baru saja ditautkan ke kernel.

Karenanya, ini harus bekerja:

  1. gunakan dduntuk mengekstrak rentang antara c17fd8ccdanc19d7b90
  2. membongkar data yang dihasilkan ny menggunakan pembongkar CPIO.
Multisink
sumber