Patched multidisabler for Galaxy A73 - initial commit
commit
9b8e15654b
|
@ -0,0 +1,254 @@
|
|||
#!/system/bin/sh
|
||||
#
|
||||
# A simple Samsung services disabler by Ian Macdonald.
|
||||
# Enhanced by afaneh92 for Galaxy S22 - https://github.com/mohammad92/android_device_samsung_g0s
|
||||
# Then enhanced by vitalif for Galaxy A73 - https://yourcmc.ru/git/vitalif/multidisabler-a73 :-)
|
||||
# With F2FS and "SUPER" partition support.
|
||||
#
|
||||
# Use this _JUST_ after installing TWRP to prime your device!
|
||||
#
|
||||
# What does it do:
|
||||
# - Makes /vendor and /system read-write
|
||||
# - Disables file-based encryption on /data
|
||||
# - Disables full-disk encryption on /data
|
||||
# - Disables stock recovery restoration
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
md5() {
|
||||
md5sum -b "$1"
|
||||
}
|
||||
|
||||
file_changed() {
|
||||
local file="$1"
|
||||
local old_md5="$2"
|
||||
local new_md5=$( md5 "$file" )
|
||||
|
||||
if [ $new_md5 != $old_md5 ]; then
|
||||
echo " - ...modified."
|
||||
else
|
||||
echo " - ...unchanged."
|
||||
fi
|
||||
}
|
||||
|
||||
resize_fs() {
|
||||
local path=$1
|
||||
local label=$2
|
||||
local partname=$3
|
||||
local percent=$4
|
||||
local dm_block_ext4=$(df -t ext4 | grep "$path"'$' | cut -DF1)
|
||||
local dm_block_f2fs=$(df -t f2fs | grep "$path"'$' | cut -DF1)
|
||||
|
||||
if [ "$dm_block_ext4" ]; then
|
||||
echo " - Unmounting $path..."
|
||||
umount $path
|
||||
echo " - Checking $path block partition before resizing..."
|
||||
e2fsck -f $dm_block_ext4
|
||||
echo " - Resizing the filesystem on $dm_block_ext4..."
|
||||
resize2fs $dm_block_ext4
|
||||
echo " - Make the $path partition R/W by unsharing its blocks..."
|
||||
e2fsck -E unshare_blocks $dm_block_ext4
|
||||
elif [ "$dm_block_f2fs" ]; then
|
||||
fs_size_mb=$(du -sm $path | cut -f1)
|
||||
super_free_mb=`lptools free | grep Free | awk '{print int($3 / 1048576)}'`
|
||||
new_fs_size_mb=`echo $fs_size_mb $super_free_mb $percent | awk '{print int($1 + $2 * $3 / 100)}'`
|
||||
uuid=$(toybox blkid $dm_block_f2fs | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o)
|
||||
echo " - Create R/W $partname image..."
|
||||
truncate -s ${new_fs_size_mb}M /data/new-rw.img
|
||||
make_f2fs -g android -O project_quota,extra_attr,inode_checksum,sb_checksum,compression,flexible_inline_xattr,verity,inode_crtime -U $uuid -f -l $label /data/new-rw.img
|
||||
mkdir -p /data/new-rw
|
||||
mount /data/new-rw.img /data/new-rw
|
||||
echo " - Copy old R/O $partname files to our new created image..."
|
||||
cp -a --preserve=all $path/* /data/new-rw
|
||||
umount $path
|
||||
umount /data/new-rw
|
||||
echo " - Checking $partname image before flashing..."
|
||||
fsck.f2fs -f /data/new-rw.img
|
||||
echo " - Resizing partition $partname inside 'super' to $new_fs_size_mb MB using lptools"
|
||||
lptools resize $partname $(stat -c '%s' /data/new-rw.img)
|
||||
lptools unmap $partname
|
||||
lptools map $partname
|
||||
echo " - Writing our new R/W $partname image, please wait..."
|
||||
dd if=/data/new-rw.img of=/dev/block/bootdevice/by-name/$partname bs=1M
|
||||
rm -rf /data/new-rw*
|
||||
fi
|
||||
echo " - Remounting $path..."
|
||||
mount $path
|
||||
mount -o remount,rw $path
|
||||
}
|
||||
|
||||
fs_free_size_check() {
|
||||
local path=$1
|
||||
local label=$2
|
||||
local partname=$3
|
||||
local percent=$4
|
||||
echo " - Checking $path free space..."
|
||||
if dd if=/dev/zero of=$path/test bs=1 count=1 2>/dev/null; then
|
||||
echo " - ...succeeded."
|
||||
rm -f $path/test
|
||||
else
|
||||
echo " - ...No free space on $path, attempting to resize it..."
|
||||
echo " "
|
||||
rm -f $path/test
|
||||
resize_fs "$path" "$label" "$partname" "$percent"
|
||||
fi
|
||||
}
|
||||
|
||||
disable_fbe() {
|
||||
local md5
|
||||
local i
|
||||
fstab_files=`grep -lr 'fileencryption' vendor/etc`
|
||||
|
||||
#
|
||||
# Exynos devices = fstab.exynos*.
|
||||
# MediaTek devices = fstab.mt*.
|
||||
# Snapdragon devices = fstab.qcom, fstab.emmc, fstab.default
|
||||
#
|
||||
for i in $fstab_files; do
|
||||
if [ -f $i ]; then
|
||||
echo " - Disabling file-based encryption (FBE) for /data..."
|
||||
echo " - Found $i."
|
||||
md5=$( md5 $i )
|
||||
# This comments out the offending line and adds an edited one.
|
||||
sed -i -e 's/^\([^#].*\)fileencryption=[^,]*\(.*\)$/# &\n\1encryptable\2/g' $i
|
||||
file_changed $i $md5
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
disable_fde() {
|
||||
local md5
|
||||
local i
|
||||
fstab_files=`grep -lr 'forceencrypt' vendor/etc`
|
||||
|
||||
#
|
||||
# Exynos devices = fstab.exynos*.
|
||||
# MediaTek devices = fstab.mt*.
|
||||
# Snapdragon devices = fstab.qcom, fstab.emmc, fstab.default
|
||||
#
|
||||
for i in $fstab_files; do
|
||||
if [ -f $i ]; then
|
||||
echo " - Disabling full-disk encryption (FDE) for /data..."
|
||||
echo " - Found $i."
|
||||
md5=$( md5 $i )
|
||||
# This comments out the offending line and adds an edited one.
|
||||
sed -i -e 's/^\([^#].*\)forceencrypt=[^,]*\(.*\)$/# &\n\1encryptable\2/g' $i
|
||||
file_changed $i $md5
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
disable_recovery_restoration() {
|
||||
local r=recovery-from-boot.p
|
||||
local found
|
||||
local i
|
||||
|
||||
echo " - Disabling restoration of stock recovery..."
|
||||
|
||||
for i in $ANDROID_ROOT $ANDROID_ROOT/system /vendor; do
|
||||
if [ -f $i/$r~ ]; then
|
||||
echo " - ...already disabled."
|
||||
found=true
|
||||
break
|
||||
fi
|
||||
|
||||
if [ -f $i/$r ]; then
|
||||
echo " - Found $i/$r. Disabling..."
|
||||
mv $i/$r $i/$r~
|
||||
|
||||
if [ -f $i/$r~ ]; then
|
||||
echo " - ...succeeded."
|
||||
else
|
||||
echo " - ...failed."
|
||||
fi
|
||||
|
||||
found=true
|
||||
break
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
[ -z "$found" ] && echo " - Found no stock recovery. Pfft."
|
||||
}
|
||||
|
||||
echo " "
|
||||
echo "Multi-disabler for Samsung devices"
|
||||
echo "running Android 9 or later."
|
||||
echo "by Ian Macdonald, enhanced by afaneh92"
|
||||
echo "patched for Galaxy A73 by vitalif"
|
||||
echo " "
|
||||
|
||||
os=$(getprop ro.build.version.release)
|
||||
major=${os%%.*}
|
||||
bl=$(getprop ro.boot.bootloader)
|
||||
dp=$(getprop ro.boot.dynamic_partitions)
|
||||
|
||||
# Firmware version starts at either 8th or 9th character, depending on length
|
||||
# of bootloader string (12 or 13).
|
||||
#
|
||||
fw=${bl:$((${#bl} - 4)):4}
|
||||
|
||||
# Device is first 5 characters of bootloader string.
|
||||
#
|
||||
device=${bl:0:$((${#bl} - 8))}
|
||||
mft=$(getprop ro.product.manufacturer | tr '[A-Z]' '[a-z]')
|
||||
|
||||
if [ "$mft" != samsung ]; then
|
||||
echo " - Device appears not to be made by Samsung."
|
||||
fatal=true
|
||||
elif [ -z "$device" ]; then
|
||||
echo " - Could not determine device model."
|
||||
fatal=true
|
||||
elif [ $major -lt 9 ]; then
|
||||
echo " - This software is incompatible with Android $major."
|
||||
fatal=true
|
||||
fi
|
||||
if [ -n "$fatal" ]; then
|
||||
echo " - Installation aborted."
|
||||
echo " "
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " - Detected a $device device with a $fw bootloader."
|
||||
echo " - The environment appears to be Android $major."
|
||||
echo " "
|
||||
|
||||
echo " - Mounting $ANDROID_ROOT..."
|
||||
if ! mount | grep "$ANDROID_ROOT " >/dev/null; then
|
||||
mount -o rw $ANDROID_ROOT 2>/dev/null || true
|
||||
if ! mount | grep "$ANDROID_ROOT " >/dev/null; then
|
||||
ANDROID_ROOT=/system_root
|
||||
echo " - Attempt failed. Mounting at $ANDROID_ROOT..."
|
||||
if ! mount | grep "$ANDROID_ROOT " >/dev/null; then
|
||||
mount -o rw $ANDROID_ROOT
|
||||
if ! mount | grep "$ANDROID_ROOT " >/dev/null; then
|
||||
echo " - Even that attempt failed. Aborting..."
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo " - Mounting /vendor..."
|
||||
mount /vendor || true
|
||||
mount -o remount,rw /vendor || true
|
||||
if ! mount | grep '/vendor ' >/dev/null; then
|
||||
echo " - Mount failed. Aborting..."
|
||||
exit 3
|
||||
fi
|
||||
|
||||
fs_free_size_check $ANDROID_ROOT "/" system 70
|
||||
fs_free_size_check /vendor vendor vendor 50
|
||||
disable_fbe
|
||||
disable_fde
|
||||
disable_recovery_restoration
|
||||
|
||||
echo " - Unmounting /vendor..."
|
||||
umount /vendor
|
||||
echo " - Unmounting $ANDROID_ROOT..."
|
||||
umount $ANDROID_ROOT
|
||||
|
||||
echo " "
|
||||
echo " - Finished."
|
||||
echo " "
|
Loading…
Reference in New Issue