You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

127 lines
3.8 KiB

#!/bin/bash
echo 'Unpatcher starting. If this fails, try recreating the installer USB using'
echo 'createinstallmedia.'
echo
# Check for --no-sync option
if [ "x$1" = "x--no-sync" ]
then
SKIP_SYNC="YES"
shift
fi
# Allow the user to drag-and-drop the USB stick in Terminal, to specify the
# path to the USB stick in question. (Otherwise it will try hardcoded paths
# for a presumed Big Sur Golden Master/public release, beta 2-or-later,
# and beta 1, in that order.)
if [ -z "$1" ]
then
for x in "Install macOS Big Sur" "Install macOS Big Sur Beta" "Install macOS Beta"
do
if [ -d "/Volumes/$x/$x.app" ]
then
VOLUME="/Volumes/$x"
APPPATH="$VOLUME/$x.app"
break
fi
done
if [ ! -d "$APPPATH" ]
then
echo "Failed to locate Big Sur recovery USB stick for unpatching."
echo "If all else fails, try specifying the path to the USB stick"
echo "as a command line parameter to this script."
echo
echo "Unpatcher cannot continue and will now exit."
exit 1
fi
else
VOLUME="$1"
# The use of `echo` here is to force globbing.
APPPATH=`echo -n "$VOLUME"/Install\ macOS*.app`
if [ ! -d "$APPPATH" ]
then
echo "Failed to locate Big Sur recovery USB stick for unpatching."
echo "Make sure you specified the correct volume. You may also try"
echo "not specifying a volume and allowing the unpatcher to find"
echo "the volume itself."
echo
echo "Unpatcher cannot continue and will now exit."
exit 1
fi
fi
if [ ! -e "$VOLUME/Patch-Version.txt" ]
then
echo 'Patch not detected on USB stick, but proceeding with unpatch anyway.'
echo 'This should do no harm. Any subsequent error messages are,'
echo 'in all likelihood, harmless.'
echo
fi
# Undo the boot-time compatibility check patch, if present
echo 'Checking for boot-time compatibility check patch (v0.0.1/v0.0.2).'
if [ -e "$VOLUME/System/Library/CoreServices/PlatformSupport.plist.inactive" ]
then
echo 'Removing boot-time compatibility check patch.'
mv "$VOLUME/System/Library/CoreServices/PlatformSupport.plist.inactive" \
"$VOLUME/System/Library/CoreServices/PlatformSupport.plist"
else
echo 'Boot-time compatibility check patch not present; continuing.'
fi
echo
# Undo the com.apple.Boot.plist patch, if present
echo 'Checking for com.apple.Boot.plist patch (v0.0.3+).'
if [ -e "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original" ]
then
echo 'Removing com.apple.Boot.plist patch.'
cat "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original" > "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist"
rm "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original"
else
echo 'com.apple.Boot.plist patch not present; continuing.'
fi
echo
if [ -d "$APPPATH/Contents/MacOS/InstallAssistant.app" ]
then
echo 'Removing trampoline.'
TEMPAPP="$VOLUME/tmp.app"
mv -f "$APPPATH/Contents/MacOS/InstallAssistant.app" "$TEMPAPP"
rm -rf "$APPPATH"
mv -f "$TEMPAPP" "$APPPATH"
else
echo 'Looked for trampoline (v0.2.0+) but trampoline is not present. Continuing...'
fi
echo 'Removing kexts, shell scripts, patcher version info, etc.'
# For v0.0.9 and earlier
rm -rf "$VOLUME"/*.kext
rm -f "$VOLUME"/*.kext.zip
# For v0.0.10 and later
rm -rf "$VOLUME"/kexts
# For v0.3.3 and later
rm -f "$VOLUME"/kmutil*
# For v0.4.2 and later
rm -f "$VOLUME"/bless*
# For v0.4.5pre
rm -f "$VOLUME"/patch.*
# For v0.5.0 and later
rm -rf "$VOLUME"/bin
# For all versions
rm -f "$VOLUME"/*.sh "$VOLUME/Patch-Version.txt"
echo 'Remvoing Hax dylibs...'
rm -f "$VOLUME"/Hax*.dylib
rm -rf "$VOLUME"/Hax*.app
if [ "x$SKIP_SYNC" != "xYES" ]
then
echo
echo 'Syncing.'
sync
fi
echo
echo 'Unpatcher finished.'