Parsing and re-packing Android boot.img/vbmeta.img/payload.bin, supporting Android 13 preview
 
 
 
 
 
 
Go to file
cfig 02be1f4b9e
use commons-codec Hex instead of BC Hex
avb support add_hash_footer
bbootimg use commons-codec Hex instead of BC Hex
boot_signer DTBO
bouncycastle staging
gradle/wrapper squashed update
mkbootfs patch it
security update to android master on May.30.2016, not tested
src massive update for upcoming Android Pi
.gitattributes do strict checking before extracting 'args.base'
.travis.yml add self test in travis-ci
1.kts support add_hash_footer
LICENSE.md Update LICENSE.md
README.expert.md support add_hash_footer
README.md support add_hash_footer
README.other.md support add_hash_footer
build.gradle support add_hash_footer
debug.kts squashed update
gradlew upgrade to support gradle 4.0
gradlew.bat upgrade to support gradle 4.0
port.mk massive update for upcoming Android Pi
settings.gradle massive update for upcoming Android Pi
short.md add README in Chinese

README.md

Android_boot_image_editor

Build Status License

This tool focuses on editing Android boot.img(also recovery.img and recovery-two-step.img).

Prerequisite

Host OS requirement:

Linux or Mac. Also need python 2.x(required by avbtool) and java 8.

Target Android requirement:

(1) Target boot.img(or recovery.img / recovery-two-step.img) MUST follows AOSP verified boot flow, either Boot image signature in VBoot 1.0 or AVB HASH footer in VBoot 2.0.

(2) These utilities are known to work for Nexus/Pixel (or Pixel compatible) boot.img(or recovery.img/recovery-two-step.img) for the following Android releases:

  • AOSP master
  • Lollipop (API Level 21,22) - Oreo (API Level 26,27)

You can get a full Android version list here.

Usage

Get tools via git:

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

Then put your boot.img at $(CURDIR)/boot.img, then start gradle 'unpack' task:

cp <original_boot_image> boot.img
./gradlew unpack

Your get the flattened kernel and /root filesystem under $(CURDIR)/build/unzip_boot:

build/unzip_boot/
├── bootimg.json
├── kernel
├── second
└── 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

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

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.

boot.img layout

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

References

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

bouncycastle https://android.googlesource.com/platform/external/bouncycastle

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