trích xuất initramfs nhúng


9

Tôi có một kernel trong đó một initramfs được nhúng. Tôi muốn giải nén nó.

Tôi đã nhận được đầu ra x86 boot sectorkhi tôi làmfile bzImage

Tôi có tệp System.map cho ảnh kernel này.

Có cách nào để trích xuất hình ảnh initramfs nhúng từ kernel này có hoặc không có sự trợ giúp của tệp System.map không?

Chuỗi thú vị được tìm thấy trong tệp Bản đồ hệ thống là: (Chỉ trong trường hợp nó giúp)

57312:c17fd8cc T __initramfs_start
57316:c19d7b90 T __initramfs_size

Câu trả lời:


14

Có một số thông tin về điều này trong wiki gentoo: https://wiki.gentoo.org/wiki/Custom_Initramfs#Salvaging

Nó khuyến nghị việc sử dụng binwalkmà hoạt động rất tốt.

Tôi sẽ đưa ra một cách nhanh chóng với một ví dụ:

đầu tiên giải nén tập tin bzImage bằng binwalk:

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

Tôi đã kết thúc với ba tác phẩm: 47B4, 47B4.xz951C38.xz

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

Bây giờ hãy chạy binwalk lại 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>

Điều này đã trở lại với một danh sách dài các đường dẫn tìm thấy và một số tệp có khả năng thú vị. Chúng ta hãy có một cái nhìn.

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

tập tin E9B348là một kho lưu trữ cpio (đã được giải nén), đúng như những gì chúng tôi đang tìm kiếm! Chơi lô tô!

Để giải nén kho lưu trữ cpio không nén (initramfs của bạn!) Trong thư mục hiện tại của bạn, chỉ cần chạy

> cpio -i < E9B348

Điều đó gần như quá dễ dàng. binwalkhoàn toàn là công cụ bạn đang tìm kiếm. Để tham khảo, tôi đã sử dụng v2.1.1 ở đây.


Chơi lô tô !!! Bạn đóng đinh nó!
SHW

2

Theo tôi biết, kho lưu trữ cpio initramfs chỉ được liên kết vào kernel.

Do đó, điều này sẽ làm việc:

  1. sử dụng ddđể trích xuất phạm vi giữa c17fd8ccc19d7b90
  2. giải nén dữ liệu kết quả ny bằng cách sử dụng bộ giải nén CPIO.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.