如何提取boot.img?

如何提取boot.img?

boot.img我正在尝试从 Android 图像中查看文件中的内容。

我用谷歌搜索发现本文提取system.img,但它不适用于boot.img.当尝试为 执行此操作时boot.img,它显示以下内容:

Invalid sparse file format at header magi
Failed to read sparse file

仅用于simg2img提取吗system.img

  1. 如果可以的话还有其他方法可以提取吗boot.img
  2. 如果不是,不提取有什么问题boot.img

答案1

boot.img是一个小文件,包含两个主要部分。

  • 内核(对于android很重要)
  • ramdisk(一组核心指令和二进制文件)

打开包装boot.img

它包含以下步骤:

  1. 下载该工具使用

    wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz
    
  2. 使用提取文件

    tar xvzf android_bootimg_tools.tar.gz
    

    它包含两个二进制文件:

    • unpackbootimg
    • mkbootimg
  3. 然后执行

    ./unpackbootimg -i <filename.img> -o <output_directory>
    

    遗嘱内容output_directory包括:

    • boot.img-zImage(核心)
    • boot.img-ramdisk.gz(虚拟磁盘)

我们也可以使用以下命令提取 ramdisk

gunzip -c boot.img-ramdisk.gz | cpio -i

更改文件后,我们可以再次将这些文件打包为boot.img使用mkbootimg

答案2

安装 abootimg(作为一个包提供,例如Debian/Ubuntu开放SUSE)。

提取(boot|recovery).img

$ abootimg -x (boot|recovery).img
$ ls
boot.img  bootimg.cfg  initrd.img  zImage

要在修改、或(boot|recovery).img之一后重新打包:bootimg.cfgzImageinitrd.img

abootimg --create (boot|recovery).img -f bootimg.cfg -k zImage -r initrd.img

答案3

boot.img不是像 那样的压缩文件系统映像system.img。它由引导加载程序读取,仅包含一个内核映像和一个 ramdisk 映像。

一些二进制发行版分别提供内核和 ramdisk 映像。在这种情况下,您不需要对 执行任何操作boot.img,只需使用 重新生成一个新的mkbootimg

如果您需要从 a 中提取信息boot.img,请尝试split_bootimg(经过威廉·恩克, 通过安卓维基)。

答案4

您可以使用以下工具提取并重新打包 Android 启动映像

$ git clone https://github.com/cfig/Android_boot_image_editor.git

将 boot.img 复制到克隆的 git 存储库。跑步:

$ ./gradlew unpack

第一次运行需要从互联网下载必要的库,请耐心等待。您可以在“build/unzip_boot/”中获取内容,如下所示:

build/unzip_boot/
├── bootimg.json (boot image info)
├── kernel
├── second (2nd bootloader, if exists)
├── boot.img.avb.json (AVB only)
└── root

相关内容