50 lines
1.1 KiB
Bash
50 lines
1.1 KiB
Bash
#!/bin/bash
|
|
# I keep forgetting how to extract the boot.img from an Android OTA update
|
|
# for patching by Magisk.
|
|
set -e
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--payload-dumper)
|
|
# Specify the path to the payload_dumper binary
|
|
PAYLOAD_DUMPER=$2
|
|
shift
|
|
shift
|
|
;;
|
|
--diff)
|
|
PAYLOAD_DUMPER_EXTRA_ARGS="${PAYLOAD_DUMPER_EXTRA_ARGS} --diff"
|
|
shift
|
|
;;
|
|
*)
|
|
# The last argument is the file
|
|
UPDATE_FILE=$1
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ ! -f "$UPDATE_FILE" ]]; then
|
|
echo "Android update file $UPDATE_FILE does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
out_dir=./payload-dumper-output
|
|
if [[ -d "$out_dir" ]]; then
|
|
echo "Output path $out_dir already exists. Refusing to work!"
|
|
exit 1
|
|
fi
|
|
mkdir "$out_dir"
|
|
|
|
# Print some basic info
|
|
PAYLOAD_DUMPER=${PAYLOAD_DUMPER:-payload_dumper}
|
|
echo "INFO: payload_dumper: $PAYLOAD_DUMPER"
|
|
echo
|
|
|
|
# Extract only the payload.bin file
|
|
echo "Extracting payload..."
|
|
unzip -q -C "$UPDATE_FILE" -d "$out_dir" payload.bin
|
|
|
|
# Use payload_dumper to get to the boot.img
|
|
echo "Dumping data from payload..."
|
|
${PAYLOAD_DUMPER} ${PAYLOAD_DUMPER_EXTRA_ARGS} --out "$out_dir" "${out_dir}/payload.bin"
|