From 4d616dc2bb35373bc628e3b9cb8e719a5301dc3c Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sat, 22 Feb 2025 17:04:11 +0100 Subject: [PATCH] config: Install FRP wipe script into recovery /system/bin Change-Id: I24e217e6af87f2002193ac7b6defb158cce0a776 --- config/common.mk | 4 ++ prebuilt/common/bin/wipe-frp.sh | 68 +++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100755 prebuilt/common/bin/wipe-frp.sh diff --git a/config/common.mk b/config/common.mk index 90ccae1d..a3cb1f20 100644 --- a/config/common.mk +++ b/config/common.mk @@ -178,6 +178,10 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \ system/%/libfuse-lite.so \ system/%/libntfs-3g.so +# FRP +PRODUCT_COPY_FILES += \ + vendor/lineage/prebuilt/common/bin/wipe-frp.sh:$(TARGET_COPY_OUT_RECOVERY)/root/system/bin/wipe-frp + # Openssh PRODUCT_PACKAGES += \ scp \ diff --git a/prebuilt/common/bin/wipe-frp.sh b/prebuilt/common/bin/wipe-frp.sh new file mode 100755 index 00000000..6ab11b21 --- /dev/null +++ b/prebuilt/common/bin/wipe-frp.sh @@ -0,0 +1,68 @@ +#!/system/bin/sh +# +# SPDX-FileCopyrightText: 2025 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +FRP_BLOCK=$(getprop ro.frp.pst) + +if [[ -z "${FRP_BLOCK}" ]]; then + echo "FRP prop not set" + exit -1 +fi + +FRP_BLOCK_SIZE=$(blockdev --getsize64 "${FRP_BLOCK}") + +if [[ "${FRP_BLOCK_SIZE}" -le 0 ]]; then + echo "FRP block size <= 0" + exit -1 +fi + +# Calculate offsets +DIGEST_SIZE=32 +DIGEST_OFFSET=0 + +FRP_OEM_UNLOCK_SIZE=1 +FRP_OEM_UNLOCK_OFFSET=$((${FRP_BLOCK_SIZE} - 1)) + +FRP_CREDENTIAL_RESERVED_SIZE=1000 +FRP_CREDENTIAL_RESERVED_OFFSET=$((${FRP_OEM_UNLOCK_OFFSET} - ${FRP_CREDENTIAL_RESERVED_SIZE})) + +TEST_MODE_RESERVED_SIZE=10000 +TEST_MODE_RESERVED_OFFSET=$((${FRP_CREDENTIAL_RESERVED_OFFSET} - ${TEST_MODE_RESERVED_SIZE})) + +FRP_SECRET_SIZE=32 +FRP_SECRET_OFFSET=$((${TEST_MODE_RESERVED_OFFSET} - ${FRP_SECRET_SIZE})) + +FRP_SECRET_MAGIC_SIZE=8 +FRP_SECRET_MAGIC_OFFSET=$((${FRP_SECRET_OFFSET} - ${FRP_SECRET_MAGIC_SIZE})) + +# Clear digest +dd if=/dev/zero of="${FRP_BLOCK}" \ + seek="${DIGEST_OFFSET}" \ + count="${DIGEST_SIZE}" \ + bs=1 + +# Clear credential storage +dd if=/dev/zero of="${FRP_BLOCK}" \ + seek="${FRP_CREDENTIAL_RESERVED_OFFSET}" \ + count="${FRP_CREDENTIAL_RESERVED_SIZE}" \ + bs=1 + +# Clear FRP secret +dd if=/dev/zero of="${FRP_BLOCK}" \ + seek="${FRP_SECRET_OFFSET}" \ + count="${FRP_SECRET_SIZE}" \ + bs=1 + +# Write default FRP secret magic +printf "\xDA\xC2\xFC\xCD\xB9\x1B\x09\x88" | dd of="${FRP_BLOCK}" \ + seek="${FRP_SECRET_MAGIC_OFFSET}" \ + count="${FRP_SECRET_MAGIC_SIZE}" \ + bs=1 + +# Write digest +sha256sum -b "${FRP_BLOCK}" | xxd -r -p | dd of="${FRP_BLOCK}" \ + seek="${DIGEST_OFFSET}" \ + count="${DIGEST_SIZE}" \ + bs=1