Parsing and re-packing Android boot.img/vbmeta.img/payload.bin, supporting Android 13 preview
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Go to file
cfig e5b03661f8
add "avbVerifier" to emulate boot time AVB flow
In memory of Dr. Li:
  He who holds the firewood for the masses,
  is the one who freezes to death in wind and snow.
5 years ago
aosp add "avbVerifier" to emulate boot time AVB flow 5 years ago
avbImpl add "avbVerifier" to emulate boot time AVB flow 5 years ago
bbootimg add "avbVerifier" to emulate boot time AVB flow 5 years ago
doc update doc for Oppo K3 6 years ago
gradle/wrapper first update in 2020 5 years ago
src bundle {boot.img, vbmeta.img} 6 years ago
tools enable avbImpl module 5 years ago
.gitattributes add 'rr' task for 'reboot recovery' 6 years ago
.gitignore use javax.crypto.Cipher for raw signing 7 years ago
.gitmodules update integrationTest and gradle 'check' 6 years ago
.travis.yml travis CI: install 'dtc' 5 years ago
LICENSE.md Update LICENSE.md 9 years ago
Makefile support makefile for c/cpp files 5 years ago
README.md add Vivo X7 5 years ago
build.gradle.kts mkbootfs: revert 'cpp-application' 6 years ago
gradlew first update in 2020 5 years ago
gradlew.bat first update in 2020 5 years ago
integrationTest.py update integrationTest and gradle 'check' 6 years ago
settings.gradle.kts enable avbImpl module 5 years ago

README.md

中文

Android_boot_image_editor

Build Status License

This tool focuses on editing Android boot.img(also recovery.img, and vbmeta.img).

1. Prerequisite

1.1 Host OS requirement:

Linux or Mac. Also need python 2.x and jdk 8.

1.2 Target Android requirement:

(1) Target boot.img MUST follows AOSP verified boot flow, either Boot image signature in VBoot 1.0 or AVB HASH footer (a.k.a. AVB) in VBoot 2.0.

Supported images:

  • boot.img
  • recovery.img (also recovery-two-step.img)
  • vbmeta.img (also vbmeta_system.img, vbmeta_vendor.img etc.)
  • dtbo.img (only 'unpack' is supported)

(2) These utilities are known to work for Nexus/Pixel boot.img for the following Android releases:

  • AOSP master
  • Lollipop (5.0) - Q preview

2. Usage

Clone this repo with minimal depth:

git clone https://github.com/cfig/Android_boot_image_editor.git --depth=1

Put your boot.img to current directory, then start gradle 'unpack' task:

cp <original_boot_image> boot.img
./gradlew unpack

Your get the flattened kernel and /root filesystem under ./build/unzip_boot:

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

Then you can edit the actual file contents, like rootfs or kernel. Now, pack the boot.img again

./gradlew pack

You get the repacked boot.img at $(CURDIR):

boot.img.signed

Well done you did it! The last step is to add the star to this repo :smile

If you are working with recovery.img

If you are working with recovery.img, the steps are similar:

cp <original_recovery_image> recovery.img
./gradlew unpack
./gradlew pack

And you get recovery.img.signed

usage demo

3. example & test

An example boot.img has been placed at src/test/resources/boot.img, which is extracted from Nexus 5x(code: bullhead) factory images from Google, you can take it as a quick start.

4. boot.img layout

Read layout of Android boot.img. We now support both VB 1.0 and AVB 2.0 layouts.

5. compatible devices

Device Model Manufacturer Compatible Android Version Note
Pixel 3 (blueline) Google Y Q preview (qpp2.190228.023,
2019)
more ...
Pixel XL (marlin) HTC Y 9.0.0 (PPR2.180905.006,
Sep 2018)
more ...
K3 (CPH1955) OPPO Y for recovery.img
N for boot.img
Pie more
Z18(NX606J) ZTE Y 8.1.0 more...
Nexus 9 (volantis/flounder) HTC Y(with some tricks) 7.1.1 (N9F27M, Oct 2017) tricks
Nexus 5x (bullhead) LG Y 6.0.0_r12 (MDA89E)
Moto X (2013) T-Mobile Motorola N
X7 (PD1602_A_3.12.8) VIVO N ? Issue 35

6. References

boot_signer https://android.googlesource.com/platform/system/extras

cpio / fs_config https://android.googlesource.com/platform/system/core

AVB https://android.googlesource.com/platform/external/avb/

mkbootimg https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/master/

Android version list https://source.android.com/source/build-numbers.html

kernel info extractor https://android.googlesource.com/platform/build/+/refs/heads/master/tools/extract_kernel.py

mkdtboimg https://android.googlesource.com/platform/system/libufdt/

libsparse https://android.googlesource.com/platform/system/core/+/refs/heads/master/libsparse/