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 binwalk
mà 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.xz
và951C38.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 E9B348
là 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. binwalk
hoà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.