埋め込まれたinitramfsを抽出する


9

1つのinitramfsが埋め込まれたカーネルがあります。抽出したいです。

私がするx86 boot sectorときに出力を得ましたfile bzImage

このカーネルイメージ用のSystem.mapファイルがあります。

System.mapファイルを使用して、または使用せずに、このカーネルから組み込みinitramfsイメージを抽出する方法はありますか?

システムマップファイルにある興味深い文字列は次のとおりです(役立つ場合に備えて)。

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size

回答:


14

gentoo wikiにこれに関するいくつかの情報があります:https : //wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

それはbinwalk非常にうまく機能する使用をお勧めします。

例を使って簡単なウォークスルーを行います。

まず、binwalkを使用してbzImageファイルを抽出します。

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

私は3つのファイルで終わりました:47B447B4.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

私の知る限り、initramfs cpioアーカイブはカーネルにリンクされているだけです。

したがって、これはうまくいくはずです:

  1. とのdd間の範囲を抽出するために使用しますc17fd8ccc19d7b90
  2. 結果のデータをCPIOアンパッカーを使用して解凍します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.