[Android Software/Hacking General [Developers Only]] jcadduono:
LazyFlasher & no-verity-opt-encrypt

INTRODUCTION

Hello Users and Developers of XDA!

LazyFlasher is a custom kernel flashing tool designed to make it easy to dynamically modify ramdisks and inject kernel binaries into the current boot image.

It's the swiss army knife of kernel flashing for use in Team Win Recovery Project.

The intent behind it was to allow a 1 custom kernel fits all approach, where your users can flash single zip on any ROM for a particular device,

allowing your kernel to be compatible with the vast majority of custom ROMs already out there. It takes away the pain of building custom boot.img

for each and every variant a user requests and puts it into 1 low maintenance intelligent universal flashable zip.

You might already know of @osm0sis's AnyKernel2 project. This approach is similar to that. Back in late 2015 I decided to design a more compatible, more friendly, and more feature filled version. Since then, AnyKernel2 has apparently improved a lot so if LazyFlasher doesn't accomplish what you need, AnyKernel2 probably will.

LazyFlasher does not currently support ELF boot images.

For users of no-verity-opt-encrypt: This thread can also be used to discuss the no-verity-opt-encrypt project which is just a minimal version of the LazyFlasher framework.

Disqus thread: https://www.xda-developers.com/xda-...-is-an-alternative-to-the-anykernel2-project/

THE GITHUB REPOSITORY

You can find LazyFlasher's development and download it here: https://github.com/jcadduono/lazyflasher

LazyFlasher source code is distributed under the BSD 2-clause license. You can do anything you want with it, however, some of the binaries used by it are under GPLv2 or GPLv3 licenses.

FEATURES

ChromeOS support (ChromeOS test-key signing and recognition)

MediaTek device support (MTK headers)

SELinux policy injection support via sepolicy-inject

Example scripts to disable dm-verity or forced encryption during the install process (010-no-force-encrypt, 015-no-dm-verity)

A process that executes a sorted list of scripts for making the desired modifications (separate from the framework)

Handily unpacks, decompresses, applies changes, compresses, and repacks boot images quickly and safely

Supports Gzip, LZ4, Bzip2, and LZO ramdisks. Support for LZMA and XZ is a work in progress

Supports arm (armv7), arm64 (aarch64), x86 (i386), x86_64 (amd64), mips, and mips64 architectures

Supports dtb.img replacement (place it in the root folder named "dtb.img")

Scans fstab and partition locations for the boot partition, optionally allows a preset location

Intelligently installs kernel modules by copying the previous layout of /system/lib/modules and creating symlinks

Creates modprobe supported /lib/modules aliases if kernel modules are included in the installer (030-kernel-modules)

Installs new files to the ramdisk and sets their permissions automatically based on file type from ramdisk-patch (020-patch-ramdisk)

Includes an optional bbe tool for applying binary patches

Unnecessary architectures and tools can be removed to save space

Many useful functions and variables included in the patch.d environment to simplify modification/patching scripts (patch.d-env)

Simple "make" build system

SETTING UP LAZYFLASHER

LazyFlasher is only designed for building on Unix based systems such as Linux, Mac OS X, and FreeBSD.

To download it (feel free to fork it so you can have a copy on your GitHub to modify instead!):

cd ~/build
git clone -b kernel-flasher https://github.com/jcadduono/lazyflasher.git
cd lazyflasher

To use LazyFlasher, you'll probably want to take a look at the Makefile, config.sh, and META-INF/com/google/android/update-binary (a shell script).

There's a few things you can change there to personalize it to your needs.

(make another git commit to save your setup!)

You should also check out the README! There is a lot of useful information there.

Once the installer is set up to your liking, all you have to do to build it is copy the resulting kernel binary from your kernel build output into the lazyflasher folder.

If you have built with kernel modules (make modules_install), copy build/lib/modules -> lazyflasher/modules.

Now simply run:

make

A TWRP flashable zip and sha1sum is created!

You should consider signing the zip with AOSP test-keys so that users can verify its integrity before flashing it.

LOOKING TO TRIM DOWN THE INSTALLER?

I have forked the kernel-flasher branch to a branch called kernel-flasher-arm64-minimal. This provides all the features of kernel-flasher except sepolicy injection and bbe, and only supports arm64 devices. It reduces the minimum zip size from 1860 KB to 200 KB.

You can use this branch instead if you like. If you're using another architecture, just look at the trimming commit as an example and apply it for your arch.

BUT I AM ON LE WINDOWS!

How did you build your kernel binary?!

Anyways, there is an alternative for building it on Windows.

You can download the LazyFlasher kernel-flasher branch as a zip file from GitHub and extract it somewhere on your PC.

Make your modifications using Notepad++.

You can then use a tool such as 7-zip to create a zip file by selecting everything in the folder, right clicking, and going to 7-Zip -> Add to "lazyflasher.zip".

LIMITATIONS AND KNOWN ISSUES

It will not run on TWRP built in Android 4.3 or earlier (usually builds older than 2.8.0.0)

Requires Busybox to exist in the TWRP build. All official builds should have this.

There may occasionally be some devices that are unsupported due to extreme modifications made to the boot image format by the manufacturer. If you have one of these devices, feel free to contact me and I will try to add support for it if it is worth the effort.

If you have an issue, please gather a recovery.log from TWRP after flashing and I will try to look into it. I can't do anything to diagnose your problem without a recovery log.

adb pull /tmp/recovery.log

JUST WANT TO DISABLE VERITY/ENCRYPTION?

You can build lazyflasher by itself, empty, without a kernel image or modules and flash it!

It's already set up to automatically disable verity and make encryption optional.

Alternatively, there's a branch already set up called no-verity-opt-encrypt. You can find prebuilt official zips at: https://build.nethunter.com/android-tools/no-verity-opt-encrypt/

WHO ELSE IS USING LAZYFLASHER?

I'll keep a list here of cool projects that are using it. Feel free to ask for yours to be added. :)

The Kali Linux NetHunter project (GitHub, Website)

no-verity-opt-encrypt, no-verity-force-encrypt, twrp-data-fstype-swap (Website/Download)

WHAT IS LAZYFLASHER USING?

LazyFlasher makes use of a few open-source projects. You can find their source code here:

bootimg / libbootimg for boot image unpacking/repacking - https://github.com/jcadduono/android_external_libbootimg

bbe for binary patching - https://github.com/jcadduono/android_external_bbe

bzip2 for ramdisks - https://github.com/jcadduono/android_external_bzip2

lz4 for ramdisks - https://github.com/jcadduono/android_external_lz4

futility for ChromeOS boot image signing - https://github.com/jcadduono/platform_external_vboot_reference

sepolicy-inject for sepolicy policy injection - https://github.com/jcadduono/android_external_sepolicy-inject

XDA:DevDB Information

LazyFlasher, Tool/Utility for the Android General

Contributors

jcadduono

Source Code: https://github.com/jcadduono/lazyflasher

Version Information

Status: Stable

Current Stable Version: 5.1

Stable Release Date: 2017-02-01

Created 2017-02-02

Last Updated 2017-02-07