From d7090f3f738642ba443bdb944e9dccfa068fdf66 Mon Sep 17 00:00:00 2001 From: osm0sis Date: Mon, 8 Jan 2024 12:21:22 -0400 Subject: [PATCH] Use custom function to hack props without increasing prop change counter - some apps were detecting tampered props from the increased prop_info serial counter using resetprop - patching doesn't rely on magiskboot hexpatch so should work on KernelSU and APatch as well - hopefully temporary until all root solutions adopt a patched system_properties repo to fix counters via resetprop --- module/common.sh | 45 ++++++++++++++++++++++++++++++++++++++++++ module/post-fs-data.sh | 18 +++-------------- module/service.sh | 18 +++-------------- 3 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 module/common.sh diff --git a/module/common.sh b/module/common.sh new file mode 100644 index 0000000..3dd2d1c --- /dev/null +++ b/module/common.sh @@ -0,0 +1,45 @@ +# resetprop_hexpatch [-f|--force] +resetprop_hexpatch() { + case "$1" in + -f|--force) local FORCE=1; shift;; + esac + + local NAME="$1" + local NEWVALUE="$2" + local CURVALUE="$(resetprop "$NAME")" + + [ ! "$NEWVALUE" -o ! "$CURVALUE" ] && return 1 + [ "$NEWVALUE" = "$CURVALUE" -a ! "$FORCE" ] && return 1 + + local NEWLEN=${#NEWVALUE} + local PROPFILE="/dev/__properties__/$(resetprop -Z "$NAME")" + local NAMEOFFSET=$(echo $(strings -t d "$PROPFILE" | grep "$NAME") | cut -d ' ' -f 1) + + # + local NEWHEX="$(printf '%02x' "$NEWLEN")$(printf "$NEWVALUE" | od -A n -t x1 -v | tr -d ' \n')$(printf "%$((92-NEWLEN))s" | sed 's/ /00/g')" + + printf "Patch '$NAME' to '$NEWVALUE' in '$PROPFILE' @ 0x%08x -> \n[0000??$NEWHEX]\n" $((NAMEOFFSET-96)) + + echo -ne "\x00\x00" \ + | dd obs=1 count=2 seek=$((NAMEOFFSET-96)) conv=notrunc of="$PROPFILE" + echo -ne "$(printf "$NEWHEX" | sed -e 's/.\{2\}/&\\x/g' -e 's/^/\\x/' -e 's/\\x$//')" \ + | dd obs=1 count=93 seek=$((NAMEOFFSET-93)) conv=notrunc of="$PROPFILE" +} + +# resetprop_if_diff +resetprop_if_diff() { + local NAME="$1" + local EXPECTED="$2" + local CURRENT="$(resetprop "$NAME")" + + [ -z "$CURRENT" ] || [ "$CURRENT" == "$EXPECTED" ] || resetprop_hexpatch "$NAME" "$EXPECTED" +} + +# resetprop_if_match +resetprop_if_match() { + local NAME="$1" + local CONTAINS="$2" + local VALUE="$3" + + [[ "$(resetprop "$NAME")" == *"$CONTAINS"* ]] && resetprop_hexpatch "$NAME" "$VALUE" +} diff --git a/module/post-fs-data.sh b/module/post-fs-data.sh index f19aae2..2129668 100644 --- a/module/post-fs-data.sh +++ b/module/post-fs-data.sh @@ -1,3 +1,6 @@ +MODDIR="${0%/*}" +. "$MODDIR/common.sh" + # Remove Play Services from Magisk Denylist when set to enforcing if magisk --denylist status; then magisk --denylist rm com.google.android.gms @@ -10,21 +13,6 @@ fi # Conditional early sensitive properties -resetprop_if_diff() { - local NAME=$1 - local EXPECTED=$2 - local CURRENT=$(resetprop $NAME) - - [ -z "$CURRENT" ] || [ "$CURRENT" == "$EXPECTED" ] || resetprop $NAME $EXPECTED -} -resetprop_if_match() { - local NAME=$1 - local CONTAINS=$2 - local VALUE=$3 - - [[ "$(resetprop $NAME)" == *"$CONTAINS"* ]] && resetprop $NAME $VALUE -} - # RootBeer, Microsoft resetprop_if_diff ro.build.tags release-keys diff --git a/module/service.sh b/module/service.sh index 5cf3d4b..6a02e95 100644 --- a/module/service.sh +++ b/module/service.sh @@ -1,20 +1,8 @@ +MODDIR="${0%/*}" +. "$MODDIR/common.sh" + # Conditional sensitive properties -resetprop_if_diff() { - local NAME=$1 - local EXPECTED=$2 - local CURRENT=$(resetprop $NAME) - - [ -z "$CURRENT" ] || [ "$CURRENT" == "$EXPECTED" ] || resetprop $NAME $EXPECTED -} -resetprop_if_match() { - local NAME=$1 - local CONTAINS=$2 - local VALUE=$3 - - [[ "$(resetprop $NAME)" == *"$CONTAINS"* ]] && resetprop $NAME $VALUE -} - # Magisk recovery mode resetprop_if_match ro.bootmode recovery unknown resetprop_if_match ro.boot.mode recovery unknown