From 34307ed80a7ad4a655fd50e0bbdb818c3ad641cd Mon Sep 17 00:00:00 2001 From: Didgeridoohan Date: Sun, 18 Mar 2018 16:39:43 +0100 Subject: [PATCH] Add files via upload --- META-INF/com/google/android/update-binary | 3 + README.md | 82 +++++++++- common/post-fs-data.sh | 191 ++++++++++++++++++++++ common/prints.sh | 25 +++ common/propsconf_late | 140 ++++++++++++++++ common/util_functions.sh | 86 ++++++++++ config.sh | 164 ++++++++++++++++++- module.prop | 10 +- system/binpath/props | Bin 0 -> 27609 bytes 9 files changed, 689 insertions(+), 12 deletions(-) create mode 100644 common/prints.sh create mode 100644 common/propsconf_late create mode 100644 common/util_functions.sh create mode 100644 system/binpath/props diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary index e07d41d..f33f37a 100755 --- a/META-INF/com/google/android/update-binary +++ b/META-INF/com/google/android/update-binary @@ -136,6 +136,9 @@ $POSTFSDATA && cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh # service mode scripts $LATESTARTSERVICE && cp -af $INSTALLER/common/service.sh $MODPATH/service.sh +# Module boot script placement and backup, etc +script_install + ui_print "- Setting permissions" set_permissions diff --git a/README.md b/README.md index 95e9ca9..5f4d01e 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,81 @@ -# Magisk Module Template +# MagiskHide Props Config +## By Didgeridoohan @ XDA Developers -This `README.md` will be shown in Magisk Manager. Place any information / changelog / notes you like. -**Please update `README.md` if you want to submit your module to the online repo!** +## Installation +Download the zip from the [module support thread](https://forum.xda-developers.com/apps/magisk/ ), and install through the Magisk Manager -> Modules, or from recovery. +Any previous versions are kept in the first post of the [module support thread](https://forum.xda-developers.com/apps/magisk/ ). -Github has its own online markdown editor with a preview feature, you can use it to update your `README.md`! If you need more advanced syntax, check the [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). -For more information about modules and repos, please check the [official documentations](https://github.com/topjohnwu/Magisk/blob/master/docs/modules.md) +## Use +Run the command `props` (as su) in a terminal emulator (you can find a one on [F-Droid](https://f-droid.org/) or in the [Play Store](https://play.google.com/store/apps)). +``` +su +props +``` +You can also run the command with options. Use -h or --help for details. + + +## Spoofing device's fingerprint +If your device can't pass SafetyNet fully, the CTS profile check fails while basic integrity passes, that means MagiskHide is working on your device but Google doesn't recognise your device as being certified. + +This might be because your device simply hasn't been certified or that the ROM you are using on your device isn't recognised by Google (because it's a custom ROM). + +To fix this, you can use a known working fingerprint (one that has been certified by Google), usually from a stock ROM/firmware/factory image, and replace your device's current fingerprint with this. + +Keep in mind that changing the fingerprint of your device might have some side-effects, since you are changing how your device is percieved. Most of the times it works fine though. IMO it is preferable to use a fingerprint from a stock ROM for your specific device. + +There are a few pre-configured certified fingerprints available in the module, just in case you can't get a hold of one for your device. If you have a working fingerprint that could be added to the list, or an updated one for one already on there, please post that in the [module support thread](https://forum.xda-developers.com/apps/magisk/ ) toghether with device details. + +### Finding a certified fingerprint +The easies way to find a certified fingerprint for your device is to run the getprop command below on a stock ROM/firmware/factory image that fully passes SafetyNet. +``` +getprop ro.build.fingerprint +``` +If you're already on a custom ROM that can't pass the CTS profile check, this might not be an option... Head over to your device's forum and ask for help. If someone can run the getprop command on their device for you, you're good to go. + +### Custom fingerprints list +You can add your own fingerprint to the list by placing a file in the root of your internal storage with the fingerprint. It needs to be formated as follows:`=`. +Here's an example: +``` +Google Nexus 6=google/shamu/shamu:7.1.1/N8I11B/4171878:user/release-keys +``` + + +## Editing build.prop and default.prop +Some apps and services look at the actual files, rather than the set prop values. With this module feature you can make sure that the actual prop in build.prop and default.prop is changed to match whatever value the prop has been set to by either MagiskHide or the module. If there's a prop value set by the module (see below), that value takes precedence. + + +## Set/reset MagiskHide Sensitive props +By default, if MagiskHide detects certain sensitive prop values they will be changed to known safe values. These are currently: +- ro.debuggable (set to "0" by MagiskHide - sensitive value is "1") +- ro.secure (set to "1" by MagiskHide - sensitive value is "0") +- ro.build.type (set to "user" by MagiskHide - sensitive value is "userdebug") +- ro.build.tags (set to "release-keys" by MagiskHide - sensitive value is "test-keys") +- ro.build.selinux (set to "0" by MagiskHide - sensitive value is "1") + +If, for some reason, you need one or more of these to be kept as their original value (one example would be resetting ro.build.type to userdebug since some ROMs need this to work properly), you can reset to the original value with this module. Keep in mind that this might trigger some apps looking for these prop values as a sign of your device being rooted. + +You can also use this module to set these props to your preferred value with MagiskHide disabled. + + +## Miscellaneous +If you're having issues passing SafetyNet or otherwise getting MagiskHide to work, take a look in the [Magisk and MagiskHide Installation and Troubleshooting Guide](https://www.didgeridoohan.com/magisk). Lots of good info there (if I may say so myself)... + + +## Support, etc +If you're having issues, questions or suggestions, visit the [module support thread](https://forum.xda-developers.com/apps/magisk/ ) @XDA. + + +## Source +[GitHub](https://github.com/Didgeridoohan/MagiskHide-Props-Config) + + +## Credits +@topjohnwu @ XDA Developers, for Magisk +@Zackptg5 and @veez21 @ XDA Developers, for inspiration + + +## Changelog +### v1.0.0 +- Initial release. Compatible with Magisk v15+. diff --git a/common/post-fs-data.sh b/common/post-fs-data.sh index 426ab83..a8d9ae6 100644 --- a/common/post-fs-data.sh +++ b/common/post-fs-data.sh @@ -5,3 +5,194 @@ MODDIR=${0%/*} # This script will be executed in post-fs-data mode # More info in the main Magisk thread + +# MagiskHide Props Config +# By Didgeridoohan @ XDA-Developers + +# Variables +IMGPATH=$(dirname "$MODDIR") +LASTLOGFILE=/cache/propsconf_last.log +BIN=BIN_PLACEHOLDER +USNFLIST=USNF_PLACEHOLDER + +# Load functions +. $MODDIR/util_functions.sh + +MODVERSION=$(get_file_value $MODDIR/module.prop "version=") + +# Saves the previous log (if available) and creates a new one +if [ -f "$LOGFILE" ]; then + mv -f $LOGFILE $LASTLOGFILE +fi +touch $LOGFILE +echo "***************************************************" >> $LOGFILE +echo "******** MagiskHide Props Config $MODVERSION ********" >> $LOGFILE +echo "**************** By Didgeridoohan ***************" >> $LOGFILE +echo "***************************************************" >> $LOGFILE +log_handler "Log start." + +# Check for boot scripts, restore backup if deleted +if [ ! -f "$LATEFILE" ]; then + cp -af $MODDIR/propsconf_late $LATEFILE + chmod 755 $LATEFILE + log_handler "Boot script restored." +fi + +# Update placeholders in util_functions.sh +# Image path +placeholder_update $LATEFILE IMGPATH IMG_PLACEHOLDER $IMGPATH +placeholder_update $MODDIR/system/$BIN/props IMGPATH IMG_PLACEHOLDER $IMGPATH +# Module version +placeholder_update $MODDIR/system/$BIN/props MODVERSION VER_PLACEHOLDER $MODVERSION + +# Check the reboot variable +if [ "$(get_file_value $LATEFILE "REBOOTCHK=")" == 1 ]; then + sed -i 's/REBOOTCHK=1/REBOOTCHK=0/' $LATEFILE +fi + +# Get the current values saved in propsconf_late +LATEDEBUGGABLE=$(get_file_value $LATEFILE "ORIGDEBUGGABLE=") +LATEFILEDEBUGGABLE=$(get_file_value $LATEFILE "FILEDEBUGGABLE=") +LATESECURE=$(get_file_value $LATEFILE "ORIGSECURE=") +LATEFILESECURE=$(get_file_value $LATEFILE "FILESECURE=") +LATETYPE=$(get_file_value $LATEFILE "ORIGTYPE=") +LATEFILETYPE=$(get_file_value $LATEFILE "FILETYPE=") +LATETAGS=$(get_file_value $LATEFILE "ORIGTAGS=") +LATEFILETAGS=$(get_file_value $LATEFILE "FILETAGS=") +LATESELINUX=$(get_file_value $LATEFILE "ORIGSELINUX=") +LATEFILESELINUX=$(get_file_value $LATEFILE "FILESELINUX=") +LATEFINGERPRINT=$(get_file_value $LATEFILE "ORIGFINGERPRINT=") + +# Get default file values +FILEDEBUGGABLE=$(get_file_value /default.prop ro.debuggable) +FILESECURE=$(get_file_value /default.prop ro.secure) +FILETYPE=$(get_file_value /system/build.prop ro.build.type) +FILETAGS=$(get_file_value /system/build.prop ro.build.tags) +FILESELINUX=$(get_file_value /system/build.prop ro.build.selinux) + +# Save default file values in propsconf_late +sed -i "s/FILEDEBUGGABLE=$LATEFILEDEBUGGABLE/FILEDEBUGGABLE=$FILEDEBUGGABLE/" $LATEFILE +sed -i "s/FILESECURE=$LATEFILESECURE/FILESECURE=$FILESECURE/" $LATEFILE +sed -i "s/FILETYPE=$LATEFILETYPE/FILETYPE=$FILETYPE/" $LATEFILE +sed -i "s/FILETAGS=$LATEFILETAGS/FILETAGS=$FILETAGS/" $LATEFILE +sed -i "s/FILESELINUX=$LATEFILESELINUX/FILESELINUX=$FILESELINUX/" $LATEFILE +log_handler "Default file values saved to $LATEFILE." + +# Get the default prop values +ORIGDEBUGGABLE=$(resetprop ro.debuggable) +ORIGSECURE=$(resetprop ro.secure) +ORIGTYPE=$(resetprop ro.build.type) +ORIGTAGS=$(resetprop ro.build.tags) +ORIGSELINUX=$(resetprop ro.build.selinux) +ORIGFINGERPRINT=$(resetprop ro.build.fingerprint) + +# Save defatul prop values in propsconf_late +sed -i "s/ORIGDEBUGGABLE=$LATEDEBUGGABLE/ORIGDEBUGGABLE=$ORIGDEBUGGABLE/" $LATEFILE +sed -i "s/ORIGSECURE=$LATESECURE/ORIGSECURE=$ORIGSECURE/" $LATEFILE +sed -i "s/ORIGTYPE=$LATETYPE/ORIGTYPE=$ORIGTYPE/" $LATEFILE +sed -i "s/ORIGTAGS=$LATETAGS/ORIGTAGS=$ORIGTAGS/" $LATEFILE +sed -i "s/ORIGSELINUX=$LATESELINUX/ORIGSELINUX=$ORIGSELINUX/" $LATEFILE +sed -i "s@ORIGFINGERPRINT=$LATEFINGERPRINT@ORIGFINGERPRINT=$ORIGFINGERPRINT@" $LATEFILE +log_handler "Current prop values saved to $LATEFILE." + +# Checks for the Universal SafetyNet Fix module and similar modules editing the device fingerprint +PRINTMODULE=false +for USNF in $USNFLIST; do + if [ -d "$IMGPATH/$USNF" ]; then + NAME=$(get_file_value $IMGPATH/$USNF/module.prop "name=") + log_handler "'$NAME' installed (modifies the device fingerprint)." + PRINTMODULE=true + fi +done +if [ "$PRINTMODULE" == "true" ]; then + sed -i 's/FINGERPRINTENB=1/FINGERPRINTENB=0/' $LATEFILE + log_handler "Fingerprint modification disabled." +else + sed -i 's/FINGERPRINTENB=0/FINGERPRINTENB=1/' $LATEFILE + if [ "$(get_file_value $LATEFILE "FINGERPRINTENB=")" == 1 ]; then + log_handler "Fingerprint modification enabled." + else + log_handler "Fingerprint modification disabled." + fi +fi + +# Check if original file values are safe +sed -i 's/FILESAFE=0/FILESAFE=1/' $LATEFILE +for V in $PROPSLIST; do + PROP=$(get_prop_type $V) + FILEPROP=$(echo "FILE$PROP" | tr '[:lower:]' '[:upper:]') + FILEVALUE=$(eval "echo \$$FILEPROP") + log_handler "Checking $FILEPROP=$FILEVALUE" + safe_props $V $FILEVALUE + if [ "$SAFE" == 0 ]; then + log_handler "Prop $V set to triggering value in prop file." + sed -i 's/FILESAFE=1/FILESAFE=0/' $LATEFILE + else + log_handler "Prop $V set to \"safe\" value in prop file." + fi +done + +if [ "$(get_file_value $LATEFILE "FILESAFE=")" == 0 ]; then + # Checks if any other modules are using a local copy of build.prop + BUILDMODULE=false + MODID=$(get_file_value $MODDIR/module.prop "id=") + for D in $(ls $IMGPATH); do + if [ $D != "$MODID" ]; then + if [ -f "$IMGPATH/$D/system/build.prop" ]; then + NAME=$(get_file_value $IMGPATH/$D/module.prop "name=") + log_handler "Conflicting build.prop editing in module '$NAME'." + BUILDMODULE=true + fi + fi + done + if [ "$BUILDMODULE" == "true" ]; then + sed -i 's/BUILDPROPENB=1/BUILDPROPENB=0/' $LATEFILE + else + sed -i 's/BUILDPROPENB=0/BUILDPROPENB=1/' $LATEFILE + fi + + # Copies the stock build.prop to the module. Only if set in propsconf_late. + if [ "$(get_file_value $LATEFILE "BUILDPROPENB=")" == 1 ] && [ "$(get_file_value $LATEFILE "BUILDEDIT=")" == 1 ]; then + log_handler "Build.prop editing enabled." + cp /system/build.prop $MODDIR/system/build.prop + log_handler "Stock build.prop copied from /system." + + # Edits the module copy of build.prop + MODULETYPE=$(get_file_value $LATEFILE "MODULETYPE=") + MODULETAGS=$(get_file_value $LATEFILE "MODULETAGS=") + MODULESELINUX=$(get_file_value $LATEFILE "MODULESELINUX=") + log_handler "Editing build.prop." + if [ "$MODULETYPE" ]; then + SEDTYPE=$MODULETYPE + else + SEDTYPE=user + fi + if [ "$(get_file_value $LATEFILE "SETTYPE=")" == "true" ]; then + sed -i "s/ro.build.type=$FILETYPE/ro.build.type=$SEDTYPE/" $MODDIR/system/build.prop && log_handler "ro.build.type" + fi + if [ "$MODULETAGS" ]; then + SEDTAGS=$MODULETAGS + else + SEDTAGS=release-keys + fi + if [ "$(get_file_value $LATEFILE "SETTAGS=")" == "true" ]; then + sed -i "s/ro.build.tags=$FILETAGS/ro.build.tags=$SEDTAGS/" $MODDIR/system/build.prop && log_handler "ro.build.tags" + fi + if [ "$MODULESELINUX" ]; then + SEDSELINUX=$MODULESELINUX + else + SEDSELINUX=0 + fi + if [ "$(get_file_value $LATEFILE "SETSELINUX=")" == "true" ]; then + sed -i "s/ro.build.selinux=$FILESELINUX/ro.build.selinux=$SEDSELINUX/" $MODDIR/system/build.prop && log_handler "ro.build.selinux" + fi + else + rm -f $MODDIR/system/build.prop + log_handler "Build.prop editing disabled." + fi +else + rm -f $MODDIR/system/build.prop + log_handler "Prop file editing disabled. All values ok." +fi + +log_handler "post-fs-data.sh finished.\n\n====================" diff --git a/common/prints.sh b/common/prints.sh new file mode 100644 index 0000000..3c7d256 --- /dev/null +++ b/common/prints.sh @@ -0,0 +1,25 @@ +#!/system/bin/sh + +# MagiskHide Props Config +# By Didgeridoohan @ XDA-Developers + +PRINTSFILE=/sdcard/printslist + +# Certified fingerprints +PRINTSLIST=" +Google Nexus 6=google/shamu/shamu:7.1.1/N8I11B/4171878:user/release-keys +Google Pixel 2 XL=google/taimen/taimen:8.1.0/OPM1.171019.013/4474084:user/release-keys +OnePlus 3T=OnePlus/OnePlus3/OnePlus3T:8.0.0/OPR6.170623.013/12041042:user/release-keys +OnePlus 5T=OnePlus/OnePlus5T/OnePlus5T:7.1.1/NMF26X/12152312:user/release-keys +Samsung S8 Plus=samsung/dream2ltexx/dream2lte:7.0/NRD90M/G955FXXU1AQGB:user/release-keys +Xiaomi Mi6=Xiaomi/sagit/sagit:7.1.1/NMF26X/V8.2.17.0.NCACNEC:user/release-keys +" + +if [ -f "$PRINTSFILE" ]; then + FLINE=$(head -1 $PRINTSFILE) + if [ "$FLINE" ]; then + sed -i '1s/^/\n/' $PRINTSFILE + fi + LISTFILE=$(cat $PRINTSFILE) + PRINTSLIST=$PRINTSLIST$LISTFILE +fi diff --git a/common/propsconf_late b/common/propsconf_late new file mode 100644 index 0000000..3325184 --- /dev/null +++ b/common/propsconf_late @@ -0,0 +1,140 @@ +#!/system/bin/sh + +# MagiskHide Props Config +# By Didgeridoohan @ XDA-Developers + +# This is a script file for the Magisk module "MagiskHide Props Config" By Didgeridoohan @ XDA Developers. +# DO NOT DELETE! +# Unless: If you don't have the module installed something has gone horribly wrong and this file is an orphan. +# In that case, feel free to delete it. + +# Script version +SCRIPTV=1 +SETTRANSF=1 + +# Variables +IMGPATH=IMG_PLACEHOLDER +MODPATH=$IMGPATH/MagiskHidePropsConf +FINGERPRINTENB=1 +PRINTEDIT=0 +BUILDPROPENB=1 +FILESAFE=1 +BUILDEDIT=0 +DEFAULTEDIT=0 +PROPCOUNT=0 +PROPEDIT=0 +REBOOTCHK=0 + +# Checks if the module is installed. Deletes itself if it isn't. +if [ -d "$MODPATH" ]; then + # Checks if the module is set for removal + if [ -f "$MODPATH/remove" ]; then + # Suicide. + rm $0 + else + # Load functions + . $MODPATH/util_functions.sh + + log_handler "Running boot script." + + if ! [ -f "$MODPATH/disable" ]; then + # ---Original values--- + # default.prop + FILEDEBUGGABLE= + FILESECURE= + # build.prop + FILETYPE= + FILETAGS= + FILESELINUX= + # Prop values + ORIGDEBUGGABLE= + ORIGSECURE= + ORIGTYPE= + ORIGTAGS= + ORIGSELINUX= + ORIGFINGERPRINT= + + # ---Module values--- + MODULEDEBUGGABLE= + MODULESECURE= + MODULETYPE= + MODULETAGS= + MODULESELINUX= + MODULEFINGERPRINT= + + # ---Setting/Changing props--- + # Set/change MagiskHide sensitive props + if [ "$PROPEDIT" == 1 ]; then + log_handler "Changing sensitive props." + REDEBUGGABLE=false + RESECURE=false + RETYPE=false + RETAGS=false + RESELINUX=false + if [ "$REDEBUGGABLE" == "true" ]; then + resetprop -v ro.debuggable $MODULEDEBUGGABLE 2>> $LOGFILE + fi + if [ "$RESECURE" == "true" ]; then + resetprop -v ro.secure $MODULESECURE 2>> $LOGFILE + fi + if [ "$RETYPE" == "true" ]; then + resetprop -v ro.build.type $MODULETYPE 2>> $LOGFILE + fi + if [ "$RETAGS" == "true" ]; then + resetprop -v ro.build.tags $MODULETAGS 2>> $LOGFILE + fi + if [ "$RESELINUX" == "true" ]; then + resetprop -v ro.build.selinux $MODULESELINUX 2>> $LOGFILE + fi + fi + + # Set new fingerprint + if [ "$FINGERPRINTENB" == 1 ] && [ "$PRINTEDIT" == 1 ]; then + REFINGERPRINT=false + if [ "$REFINGERPRINT" == "true" ]; then + log_handler "Changing fingerprint." + resetprop -v ro.build.fingerprint $MODULEFINGERPRINT 2>> $LOGFILE + resetprop -v ro.bootimage.build.fingerprint $MODULEFINGERPRINT 2>> $LOGFILE + fi + fi + + # Settings for default.prop editing + SETDEBUGGABLE=false + SETSECURE=false + # Edits default.prop + if [ "$DEFAULTEDIT" == 1 ] && [ "$FILESAFE" == 0 ]; then + log_handler "Default.prop editing enabled." + log_handler "Editing default.prop." + mount -wo remount rootfs / + if [ "$MODULEDEBUGGABLE" ]; then + SEDDEBUGGABLE=$MODULEDEBUGGABLE + else + SEDDEBUGGABLE=0 + fi + if [ "$SETDEBUGGABLE" == "true" ]; then + sed -i "s/ro.debuggable=$FILEDEBUGGABLE/ro.debuggable=$SEDDEBUGGABLE/" /default.prop && log_handler "ro.debuggable" + fi + if [ "$MODULESECURE" ]; then + SEDSECURE=$MODULESECURE + else + SEDSECURE=1 + fi + if [ "$SETSECURE" == "true" ]; then + sed -i "s/ro.secure=$FILESECURE/ro.secure=$SEDSECURE/" /default.prop && log_handler "ro.secure" + fi + mount -ro remount rootfs / + else + log_handler "Default.prop editing disabled." + fi + + # Settings for build.prop editing + SETTYPE=false + SETTAGS=false + SETSELINUX=false + fi + log_handler "Boot script finished.\n\n==================" + fi +else + # Suicide. + rm $0 +fi diff --git a/common/util_functions.sh b/common/util_functions.sh new file mode 100644 index 0000000..7275681 --- /dev/null +++ b/common/util_functions.sh @@ -0,0 +1,86 @@ +#!/system/bin/sh + +# MagiskHide Props Config +# By Didgeridoohan @ XDA-Developers + +# Variables +LATEFILE=$IMGPATH/.core/service.d/propsconf_late +LOGFILE=/cache/propsconf.log +MAGISKLOC=/data/adb/magisk +BBPATH=$MAGISKLOC/busybox +alias cat="$BBPATH cat" +alias grep="$BBPATH grep" +alias sed="$BBPATH sed" +alias tr="$BBPATH tr" +alias reboot="/system/bin/reboot" +alias resetprop="$MAGISKLOC/magisk resetprop" + +# MagiskHide props +PROPSLIST=" +ro.debuggable +ro.secure +ro.build.type +ro.build.tags +ro.build.selinux +" + +# Safe values +SAFELIST=" +ro.debuggable=0 +ro.secure=1 +ro.build.type=user +ro.build.tags=release-keys +ro.build.selinux=0 +" + +# Logs +log_handler() { + echo "" >> $LOGFILE + echo -e "$(date +"%m-%d-%Y %H:%M:%S") - $1" >> $LOGFILE +} + +# Finding file values +get_file_value() { + cat $1 | grep $2 | sed 's/.*=//' +} + +# Find prop type +get_prop_type() { + echo $1 | sed 's/.*\.//' +} + +# Separate prop from value +safe_prop_name() { + echo $1 | sed 's/=.*//' +} +safe_prop_value() { + echo $1 | sed 's/.*=//' +} + +# Check safe values +safe_props() { + SAFE="" + if [ "$2" ]; then + for P in $SAFELIST; do + if [ "$(safe_prop_name $P)" == "$1" ]; then + if [ "$2" == "$(safe_prop_value $P)" ]; then + SAFE=1 + else + SAFE=0 + fi + break + fi + done + fi +} + +# Updates placeholders +placeholder_update() { + FILEVALUE=$(get_file_value $1 "$2=") + log_handler "Checking for '$3' in '$1'. Current value is '$FILEVALUE'." + case $FILEVALUE in + *PLACEHOLDER*) sed -i "s@$2\=$3@$2\=$4@g" $1 + log_handler "Placeholder '$3' updated to '$4' in '$1'." + ;; + esac +} diff --git a/config.sh b/config.sh index 3032eae..61a56ec 100644 --- a/config.sh +++ b/config.sh @@ -28,7 +28,7 @@ AUTOMOUNT=true PROPFILE=false # Set to true if you need post-fs-data script -POSTFSDATA=false +POSTFSDATA=true # Set to true if you need late_start service script LATESTARTSERVICE=false @@ -41,7 +41,7 @@ LATESTARTSERVICE=false print_modname() { ui_print "*******************************" - ui_print " Magisk Module Template " + ui_print " MagiskHide Props Config" ui_print "*******************************" } @@ -85,6 +85,9 @@ set_permissions() { # The following is default permissions, DO NOT remove set_perm_recursive $MODPATH 0 0 0755 0644 + + # Permissions for the props file + set_perm $MODPATH/system/$BIN/props 0 0 0777 } ########################################################################################## @@ -97,3 +100,160 @@ set_permissions() { # difficult for you to migrate your modules to newer template versions. # Make update-binary as clean as possible, try to only do function calls in it. +# Finding file values +get_file_value() { + cat $1 | grep $2 | sed 's/.*=//' +} + +# Variables +$BOOTMODE && IMGPATH=/sbin/.core/img || IMGPATH=$MOUNTPATH +UPDATELATEFILE=$INSTALLER/common/propsconf_late +LATEFILE=$IMGPATH/.core/service.d/propsconf_late +UPDATEV=$(get_file_value $UPDATELATEFILE "SCRIPTV=") +SETTRANSF=$(get_file_value $UPDATELATEFILE "SETTRANSF=") +if [ -f "$LATEFILE" ]; then + FILEV=$(get_file_value $LATEFILE "SCRIPTV=") +else + FILEV=0 +fi +BBPATH=/data/adb/magisk/busybox +$BOOTMODE && alias grep="$BBPATH grep" +$BOOTMODE && alias sed="$BBPATH sed" +$BOOTMODE && alias tr="$BBPATH tr" +$BOOTMODE && alias ls="$BBPATH ls" +SETTINGSLIST=" +FINGERPRINTENB +PRINTEDIT +BUILDPROPENB +FILESAFE +BUILDEDIT +DEFAULTEDIT +PROPCOUNT +PROPEDIT +REBOOTCHK +FILEDEBUGGABLE +FILESECURE +FILETYPE +FILETAGS +FILESELINUX +ORIGDEBUGGABLE +ORIGSECURE +ORIGTYPE +ORIGTAGS +ORIGSELINUX +ORIGFINGERPRINT +MODULEDEBUGGABLE +MODULESECURE +MODULETYPE +MODULETAGS +MODULESELINUX +MODULEFINGERPRINT +" +PROPSLIST=" +debuggable +secure +type +tags +selinux +fingerprint +" +USNFLIST="xiaomi-safetynet-fix safetynet-fingerprint-fix" + +# Places the boot script in service.d and puts a backup in the module folder +# Places util_functions.sh in the module folder +script_placement() { + ui_print "- Installing scripts" + cp -af $INSTALLER/common/util_functions.sh $MODPATH/util_functions.sh + cp -af $INSTALLER/common/prints.sh $MODPATH/prints.sh + cp -af $UPDATELATEFILE $MODPATH/propsconf_late + if [ "$UPDATEV" -gt "$FILEV" ]; then + if [ "$FILEV" == 0 ]; then + ui_print "- Placing settings script" + elif [ "$SETTRANSF" -gt "$FILEV" ]; then + ui_print "- Settings cleared (script updated)" + else + ui_print "- Transfering settings from old script" + # Prop values + for S in $SETTINGSLIST; do + SOLD=$(get_file_value $LATEFILE "$S=") + SNEW=$(get_file_value $UPDATELATEFILE "$S=") + sed -i "s@$S\=$SNEW@$S\=$SOLD@g" $UPDATELATEFILE + done + # Prop and file edits + for P in $PROPSLIST; do + REPROP=$(echo "RE$P" | tr '[:lower:]' '[:upper:]') + POLD=$(get_file_value $LATEFILE "$REPROP\=") + sed -i "s/$REPROP\=false/$REPROP\=$POLD/" $UPDATELATEFILE + done + fi + cp -af $UPDATELATEFILE $LATEFILE + chmod 755 $LATEFILE + else + ui_print "- Module settings preserved" + fi +} + +# Updates placeholder +placeholder_update() { + FILEVALUE=$(get_file_value $1 "$2=") + case $FILEVALUE in + *PLACEHOLDER*) ui_print "- Updating placeholders" + sed -i "s@$2\=$3@$2\=\"$4\"@g" $1 + ;; + esac +} + +# Checks if any other module is using a local copy of build.prop +build_prop_check() { + ui_print "- Checking for build.prop conflicts" + for D in $(ls $IMGPATH); do + if [ "$D" != "$MODID" ]; then + if [ -f "$IMGPATH/$D/system/build.prop" ]; then + NAME=$(get_file_value $IMGPATH/$D/module.prop "name=") + ui_print "" + ui_print "! Another module editing build.prop detected!" + ui_print "! Module - '$NAME'!" + ui_print "! Modification of build.prop disabled!" + ui_print "" + sed -i 's/BUILDPROPENB=1/BUILDPROPENB=0/' $UPDATELATEFILE + break + fi + fi + done +} + +# Checks for the Universal SafetyNet Fix module and similar modules editing device fingerprint +usnf_check() { + ui_print "- Checking for fingerprint conflicts" + for USNF in $USNFLIST; do + if [ -d "$IMGPATH/$USNF" ]; then + NAME=$(get_file_value $IMGPATH/$USNF/module.prop "name=") + ui_print "" + ui_print "! Module editing fingerprint detected!" + ui_print "! Module - '$NAME'!" + ui_print "! Fingerprint modification disabled!" + ui_print "" + sed -i 's/FINGERPRINTENB=1/FINGERPRINTENB=0/' $UPDATELATEFILE + break + fi + done +} + +# Check for bin/xbin +bin_check() { + if [ -d "/system/xbin" ]; then + BIN=xbin + else + BIN=bin + fi + mv -f $MODPATH/system/binpath $MODPATH/system/$BIN +} + +script_install() { + build_prop_check + usnf_check + bin_check + script_placement + placeholder_update $MODPATH/post-fs-data.sh BIN BIN_PLACEHOLDER "$BIN" + placeholder_update $MODPATH/post-fs-data.sh USNFLIST USNF_PLACEHOLDER "$USNFLIST" +} diff --git a/module.prop b/module.prop index 1e86010..6220431 100644 --- a/module.prop +++ b/module.prop @@ -1,7 +1,7 @@ -id=template -name=Template Module -version=v1 +id=MagiskHidePropsConf +name=MagiskHide Props Config +version=v1.0.0 versionCode=1 -author=topjohnwu -description=A short description +author=Didgeridoohan +description=Change your device's fingerprint, to pass SafetyNet's CTS Profile check. Edit prop files for better root hiding. Set/reset prop values set by MagiskHide. minMagisk=1500 diff --git a/system/binpath/props b/system/binpath/props new file mode 100644 index 0000000000000000000000000000000000000000..bf39dfa5a32d62557785242d428def94e7cb0468 GIT binary patch literal 27609 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 literal 0 HcmV?d00001