RESETPROP="resetprop -n" [ -f /data/adb/magisk/util_functions.sh ] && [ "$(grep MAGISK_VER_CODE /data/adb/magisk/util_functions.sh | cut -d= -f2)" -lt 27003 ] && RESETPROP=resetprop_hexpatch # 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 2 local NEWLEN=${#NEWVALUE} if [ -f /dev/__properties__ ]; then local PROPFILE=/dev/__properties__ else local PROPFILE="/dev/__properties__/$(resetprop -Z "$NAME")" fi [ ! -f "$PROPFILE" ] && return 3 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 "$NAME" "$EXPECTED" } # resetprop_if_match resetprop_if_match() { local NAME="$1" local CONTAINS="$2" local VALUE="$3" [[ "$(resetprop "$NAME")" = *"$CONTAINS"* ]] && $RESETPROP "$NAME" "$VALUE" } # stub for boot-time ui_print() { return; }