mi chiedevo se scaricando pacchetti soprattutto da fonti diverse dal play store ufficiale, poteva essere una buona idea fare di tanto in tanto, una scansione del device a sistema operativo "spento" come si fa dal PC quando lo si avvia da un live CD come, kaspersky rescue disk. Grazie mille serena notte
Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Regole del forum
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
mi chiedevo se scaricando pacchetti soprattutto da fonti diverse dal play store ufficiale, poteva essere una buona idea fare di tanto in tanto, una scansione del device a sistema operativo "spento" come si fa dal PC quando lo si avvia da un live CD come, kaspersky rescue disk. Grazie mille serena notte
Ultima modifica di Pulcepiccola il mer feb 15, 2017 12:50 am, modificato 2 volte in totale.
- Ganondolf
- Livello: Disco fisso (9/15)
- Messaggi: 674
- Iscritto il: mar gen 28, 2014 10:51 am
- Località: Mestre
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
beh... proprio a sistema operativo "spento" direi di no: credo ci siano notevoli difficoltà tecniche per poterlo fare.
Però, se ti preoccupa l'installazione di pacchetti scaricati da fonti non ufficiali, puoi sempre controllare gli APK con VirusTotal prima di installarli: se l'app dovesse nascondere insidie, è facile che tra una sessantina di antivirus ce ne sia almeno qualcuno in grado di rilevarle. [Analizzare i file sospetti Online con numerosi antivirus]
Ho fatto una prova con il famoso "non-virus" civetta EICAR (in questo caso gentilmente fornito da F-Secure) e i risultati sono stati piuttosto buoni:
VirusTotal è disponibile anche sotto forma di app per analizzare comodamente le app già installate: https://play.google.com/store/apps/deta ... virustotal
In questo caso ha rilevato l'app contenente il codice EICAR che ho installato di proposito (e anche un altro paio di palesi falsi positivi).
Ovviamente credo sia preferibile usare il primo metodo (analizzare i pacchetti PRIMA che siano installati).
Rimane inteso che condivido al 100% l'osservazione di Ganondolf: probabilmente si tratta di una precauzione inutile. Se il telefono non è rootato, l'attuale sistema di gestione delle autorizzazioni di Android è più che sufficiente a stroncare eventuali app pericolose sul nascere, anche se scaricate da fonti non attendibili. [TLI risponde: è davvero necessario installare un antivirus sullo smartphone?]
Ciao, Pippo.
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Pp
- Ganondolf
- Livello: Disco fisso (9/15)
- Messaggi: 674
- Iscritto il: mar gen 28, 2014 10:51 am
- Località: Mestre
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Codice: Seleziona tutto
#!/sbin/sh
#
# SuperSU installer ZIP
# Copyright (c) 2012-2016 - Chainfire
#
# ----- GENERIC INFO ------
#
# The following su binary versions are included in the full package. Each
# should be installed only if the system has the same or newer API level
# as listed. The script may fall back to a different binary on older API
# levels. supolicy are all ndk/pie/19+ for 32 bit, ndk/pie/20+ for 64 bit.
#
# binary ARCH/path build type API
#
# arm-v5te arm ndk non-pie 7+
# x86 x86 ndk non-pie 7+
#
# x86 x86 ndk pie 17+ (su.pie, naming exception)
# arm-v7a armv7 ndk pie 17+
# mips mips ndk pie 17+
#
# arm64-v8a arm64 ndk pie 20+
# mips64 mips64 ndk pie 20+
# x86_64 x64 ndk pie 20+
#
# Non-static binaries are supported to be PIE (Position Independent
# Executable) from API level 16, and required from API level 20 (which will
# refuse to execute non-static non-PIE).
#
# The script performs several actions in various ways, sometimes
# multiple times, due to different recoveries and firmwares behaving
# differently, and it thus being required for the correct result.
#
# Overridable variables (shell):
# BIN - Location of architecture specific files (native folder)
# COM - Location of common files (APK folder)
# LESSLOGGING - Reduce ui_print logging (true/false)
# NOOVERRIDE - Do not read variables from /system/.supersu or
# /data/.supersu
#
# Overridable variables (shell, /system/.supersu, /cache/.supersu,
# /data/.supersu):
# SYSTEMLESS - Do a system-less install? (true/false, 6.0+ only)
# PATCHBOOTIMAGE - Automatically patch boot image? (true/false,
# SYSTEMLESS only)
# BOOTIMAGE - Boot image location (PATCHBOOTIMAGE only)
# STOCKBOOTIMAGE - Stock boot image location (PATCHBOOTIMAGE only)
# BINDSYSTEMXBIN - Poor man's overlay on /system/xbin (true/false,
# SYSTEMLESS only)
# PERMISSIVE - Set sepolicy to fake-permissive (true/false, PATCHBOOTIMAGE
# only)
# KEEPVERITY - Do not remove dm-verity (true/false, PATCHBOOTIMAGE only)
# KEEPFORCEENCRYPT - Do not replace forceencrypt with encryptable (true/
# false, PATCHBOOTIMAGE only)
# FRP - Place files in boot image that allow root to survive a factory
# reset (true/false, PATCHBOOTIMAGE only). Reverts to su binaries
# from the time the ZIP was originall flashed, updates are lost.
# Shell overrides all, /data/.supersu overrides /cache/.supersu overrides
# /system/.supersu
#
# Note that if SELinux is set to enforcing, the daemonsu binary expects
# to be run at startup (usually from install-recovery.sh, 99SuperSUDaemon,
# or app_process) from u:r:init:s0 or u:r:kernel:s0 contexts. Depending
# on the current policies, it can also deal with u:r:init_shell:s0 and
# u:r:toolbox:s0 contexts. Any other context will lead to issues eventually.
#
# ----- "SYSTEM" INSTALL -----
#
# "System" install puts all the files needed in /system and does not need
# any boot image modifications. Default install method pre-Android-6.0
# (excluding Samsung-5.1).
#
# Even on Android-6.0+, the script attempts to detect if the current
# firmware is compatible with a system-only installation (see the
# "detect_systemless_required" function), and will prefer that
# (unless the SYSTEMLESS variable is set) if so. This will catch the
# case of several custom ROMs that users like to use custom boot images
# with - SuperSU will not need to patch these. It can also catch some
# locked bootloader cases that do allow security policy updates.
#
# To install SuperSU properly, aside from cleaning old versions and
# other superuser-type apps from the system, the following files need to
# be installed:
#
# API source target chmod chcon required
#
# 7-19 common/Superuser.apk /system/app/Superuser.apk 0644 u:object_r:system_file:s0 gui
# 20+ common/Superuser.apk /system/app/SuperSU/SuperSU.apk 0644 u:object_r:system_file:s0 gui
#
# 17+ common/install-recovery.sh /system/etc/install-recovery.sh 0755 *1 required
# 17+ /system/bin/install-recovery.sh (symlink to /system/etc/...) required
# *1: same as /system/bin/toolbox: u:object_r:system_file:s0 if API < 20, u:object_r:toolbox_exec:s0 if API >= 20
#
# 7+ ARCH/su *2 /system/xbin/su *3 u:object_r:system_file:s0 required
# 7+ /system/bin/.ext/.su *3 u:object_r:system_file:s0 gui
# 17+ /system/xbin/daemonsu 0755 u:object_r:system_file:s0 required
# 17-21 /system/xbin/sugote 0755 u:object_r:zygote_exec:s0 required
# *2: su.pie for 17+ x86(_32) only
# *3: 06755 if API < 18, 0755 if API >= 18
#
# 19+ ARCH/supolicy /system/xbin/supolicy 0755 u:object_r:system_file:s0 required
# 19+ ARCH/libsupol.so /system/lib(64)/libsupol.so 0644 u:object_r:system_file:s0 required
#
# 17-21 /system/bin/sh or mksh *4 /system/xbin/sugote-mksh 0755 u:object_r:system_file:s0 required
# *4: which one (or both) are available depends on API
#
# 21+ /system/bin/app_process32 *5 /system/bin/app_process32_original 0755 u:object_r:zygote_exec:s0 required
# 21+ /system/bin/app_process64 *5 /system/bin/app_process64_original 0755 u:object_r:zygote_exec:s0 required
# 21+ /system/bin/app_processXX *5 /system/bin/app_process_init 0755 u:object_r:system_file:s0 required
# 21+ /system/bin/app_process (symlink to /system/xbin/daemonsu) required
# 21+ *5 /system/bin/app_process32 (symlink to /system/xbin/daemonsu) required
# 21+ *5 /system/bin/app_process64 (symlink to /system/xbin/daemonsu) required
# *5: Only do this for the relevant bits. On a 64 bits system, leave the 32 bits files alone, or dynamic linker errors
# will prevent the system from fully working in subtle ways. The bits of the su binary must also match!
#
# 17+ common/99SuperSUDaemon *6 /system/etc/init.d/99SuperSUDaemon 0755 u:object_r:system_file:s0 optional
# *6: only place this file if /system/etc/init.d is present
#
# 17+ 'echo 1 >' or 'touch' *7 /system/etc/.installed_su_daemon 0644 u:object_r:system_file:s0 optional
# *7: the file just needs to exist or some recoveries will nag you. Even with it there, it may still happen.
#
# It may seem some files are installed multiple times needlessly, but
# it only seems that way. Installing files differently or symlinking
# instead of copying (unless specified) will lead to issues eventually.
#
# After installation, run '/system/xbin/su --install', which may need to
# perform some additional installation steps. Ideally, at one point,
# a lot of this script will be moved there.
#
# The included chattr(.pie) binaries are used to remove ext2's immutable
# flag on some files. This flag is no longer set by SuperSU's OTA
# survival since API level 18, so there is no need for the 64 bit versions.
# Note that chattr does not need to be installed to the system, it's just
# used by this script, and not supported by the busybox used in older
# recoveries.
#
# ----- "SYSTEM-LESS" INSTALL -----
#
# "System-less" install requires a modified boot image (the script can patch
# many boot images on-the-fly), but does not touch /system at all. Instead
# it keeps all the needed files in an image (/data/su.img) which is mounted
# to /su. Default install method on all Android-6.0+ and Samsung-5.1+
# devices.
#
# Note that even on 6.0+, system compatibility is checked. See the "SYSTEM"
# install section above.
#
# An ext4 image is created as /data/su.img, or /cache/su.img if /data could
# not be mounted. Similarly, the APK is placed as either /data/SuperSU.apk
# or /cache/SuperSU.apk. This is so we are not dependent on /data decryption
# working in recovery, which in the past has proved an issue on brand-new
# Android versions and devices.
#
# /sbin/launch_daemonsu.sh, which is added a service to init.rc, will mount
# the image at /su, and launch daemonsu from /su/bin/daemonsu. But before it
# does that, it will try to merge /data/su.img and /cache/su.img (leading),
# if both are present. It will also try to install the SuperSU APK.
#
# Files are expected at the following places (/su being the mountpoint of
# the ext4 image):
#
# API source target chmod chcon required
#
# 22+ common/Superuser.apk /[data|cache]/SuperSU.apk 0644 u:object_r:system_file:s0 gui
#
# 22+ ARCH/su *1 /su/bin/su 0755 u:object_r:system_file:s0 required
# 22+ /su/bin/daemonsu 0755 u:object_r:system_file:s0 required
# *1: su.pie for 17+ x86(_32) only
#
# 22+ ARCH/supolicy /su/bin/supolicy_wrapped 0755 u:object_r:system_file:s0 required
# 22+ /su/bin/su (symlink) *2 /su/bin/supolicy 0755 u:object_r:system_file:s0 required
# 22+ ARCH/libsupol.so /su/lib/libsupol.so 0644 u:object_r:system_file:s0 required
# *2: when called this way, su sets the correct LD_LIBRARY_PATH and calls supolicy_wrapped
#
# 22+ ARCH/sukernel /su/bin/sukernel 0755 u:object_r:system_file:s0 required
#
# These files are automatically created on launch by daemonsu as needed:
# 22+ /system/bin/sh /su/bin/sush 0755 u:object_r:system_file:s0 required
# 22+ /system/bin/app_process[64] /su/bin/app_process 0755 u:object_r:system_file:s0 required
#
# These files are injected into the boot image ramdisk:
# 22+ common/launch_daemonsu.sh /sbin/launch_daemonsu.sh 0700 u:object_r:rootfs:s0 required
#
# On devices where / is in the system partition:
# 22+ ARCH/suinit /init 0750 u:object_r:rootfs:s0 required
#
# The automated boot image patcher included makes the following modifications
# to the ramdisk:
#
# - Uses the supolicy tool to patch the sepolicy file
# - Injects /sbin/launch_daemon.sh
# - Creates /su
# - Removes /verity_key
# - Patches /*fstab*
# --- Removes support_scfs and verify flags
# --- Changes forceencrypt/forcefdeorfbe into encryptable
# --- Set ro mounts to use noatime
# - Patches /init.rc
# --- Removes 'setprop selinux.reload_policy' occurences
# --- Adds a SuperSU:PATCH marker with the version of the sukernel tool
# --- Adds a SuperSU:STOCK marker listed the SHA1 of the original boot image
# - Adds /init.supersu.rc
# --- Adds a sukernel.mount property trigger that mounts /data/su.img to /su
# --- Adds the daemonsu service that launches /sbin/launch_daemon.sh
# --- Adds exec /sbin/launch_daemonsu.sh on post-fs-data
# - Patches /init.environ.rc
# --- Adds PATH variable if it does not exist
# --- Prepends /su/bin to the PATH variable
# - Patches /*.rc
# --- Adds a seclabel to services and execs that are missing one
# - Patches /file_contexts[.bin]
# --- Adds a default context for file existing in the /su mount
# - In case the device has the root directory inside the system partition:
# --- /system_root contents are copied to /boot
# --- All files mentioned above are modified in /boot instead of /
# --- /boot/*fstab* is modified to mount / to /system_root
# --- /system is symlinked to /system_root/system
# --- Kernel binary is patched to load from initramfs instead of system
#
# In case this documentation becomes outdated, please note that the sukernel
# tool is very chatty, and its output tells you exactly what it is doing
# and how. In TWRP, you can view this output by catting /tmp/recovery.log
# after flashing the ZIP.
#
# The boot image patcher creates a backup of the boot image it patches, for
# future restoration. It cannot re-patch a patched boot image, it will restore
# the previous boot image first. /[data|cache]/stock_boot_*.gz
#
# The boot image patcher currently only supports GZIP compressed ramdisks, and
# boot images in the standard Android boot image format.
#
# During boot image patch, /data/custom_ramdisk_patch.sh will be called,
# with the name of the ramdisk cpio file as parameter. The script must
# replace the input file and return a 0 exit code.
#
# Just before flashing, the boot image patcher will call
# /data/custom_boot_image_patch.sh with the name of the patched boot image
# as parameter. A device-specific patcher can further patch the boot image
# if needed. It must replace the input file and return a 0 exit code.
OUTFD=$2
ZIP=$3
getvar() {
local VARNAME=$1
local VALUE=$(eval echo \$"$VARNAME");
for FILE in /data/.supersu /cache/.supersu /system/.supersu; do
if [ -z "$VALUE" ]; then
LINE=$(cat $FILE 2>/dev/null | grep "$VARNAME=")
if [ ! -z "$LINE" ]; then
VALUE=${LINE#*=}
fi
fi
done
eval $VARNAME=\$VALUE
}
readlink /proc/$$/fd/$OUTFD 2>/dev/null | grep /tmp >/dev/null
if [ "$?" -eq "0" ]; then
# rerouted to log file, we don't want our ui_print commands going there
OUTFD=0
# we are probably running in embedded mode, see if we can find the right fd
# we know the fd is a pipe and that the parent updater may have been started as
# 'update-binary 3 fd zipfile'
for FD in `ls /proc/$$/fd`; do
readlink /proc/$$/fd/$FD 2>/dev/null | grep pipe >/dev/null
if [ "$?" -eq "0" ]; then
ps | grep " 3 $FD " | grep -v grep >/dev/null
if [ "$?" -eq "0" ]; then
OUTFD=$FD
break
fi
fi
done
fi
ui_print_always() {
echo -n -e "ui_print $1\n" >> /proc/self/fd/$OUTFD
echo -n -e "ui_print\n" >> /proc/self/fd/$OUTFD
}
if [ -z "$LESSLOGGING" ]; then
LESSLOGGING=false
fi
UI_PRINT_LAST=""
ui_print() {
if (! $LESSLOGGING); then
UI_PRINT_LAST="$1"
ui_print_always "$1"
fi
}
ui_print_less() {
if ($LESSLOGGING); then
ui_print_always "$1"
fi
}
ch_con() {
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toybox chcon -h u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/toolbox chcon -h u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toolbox chcon -h u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
chcon -h u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toybox chcon u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/toolbox chcon u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toolbox chcon u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
chcon u:object_r:system_file:s0 $1 1>/dev/null 2>/dev/null
}
ch_con_ext() {
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toybox chcon $2 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/toolbox chcon $2 $1 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toolbox chcon $2 $1 1>/dev/null 2>/dev/null
chcon $2 $1 1>/dev/null 2>/dev/null
}
ln_con() {
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toybox ln -s $1 $2 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/toolbox ln -s $1 $2 1>/dev/null 2>/dev/null
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/toolbox ln -s $1 $2 1>/dev/null 2>/dev/null
ln -s $1 $2 1>/dev/null 2>/dev/null
ch_con $2 1>/dev/null 2>/dev/null
}
set_perm() {
chown $1.$2 $4
chown $1:$2 $4
chmod $3 $4
ch_con $4
ch_con_ext $4 $5
}
cp_perm() {
rm $5
if [ -f "$4" ]; then
cat $4 > $5
set_perm $1 $2 $3 $5 $6
fi
}
is_mounted() {
if [ ! -z "$2" ]; then
cat /proc/mounts | grep $1 | grep $2, >/dev/null
else
cat /proc/mounts | grep $1 >/dev/null
fi
return $?
}
toolbox_mount() {
RW=rw
if [ ! -z "$2" ]; then
RW=$2
fi
DEV=
POINT=
FS=
for i in `cat /etc/fstab | grep "$1"`; do
if [ -z "$DEV" ]; then
DEV=$i
elif [ -z "$POINT" ]; then
POINT=$i
elif [ -z "$FS" ]; then
FS=$i
break
fi
done
if (! is_mounted $1 $RW); then mount -t $FS -o $RW $DEV $POINT; fi
if (! is_mounted $1 $RW); then mount -t $FS -o $RW,remount $DEV $POINT; fi
DEV=
POINT=
FS=
for i in `cat /etc/recovery.fstab | grep "$1"`; do
if [ -z "$POINT" ]; then
POINT=$i
elif [ -z "$FS" ]; then
FS=$i
elif [ -z "$DEV" ]; then
DEV=$i
break
fi
done
if [ "$FS" = "emmc" ]; then
if (! is_mounted $1 $RW); then mount -t ext4 -o $RW $DEV $POINT; fi
if (! is_mounted $1 $RW); then mount -t ext4 -o $RW,remount $DEV $POINT; fi
if (! is_mounted $1 $RW); then mount -t f2fs -o $RW $DEV $POINT; fi
if (! is_mounted $1 $RW); then mount -t f2fs -o $RW,remount $DEV $POINT; fi
else
if (! is_mounted $1 $RW); then mount -t $FS -o $RW $DEV $POINT; fi
if (! is_mounted $1 $RW); then mount -t $FS -o $RW,remount $DEV $POINT; fi
fi
}
remount_system_rw() {
if (! is_mounted /system rw); then mount -o rw,remount /system; fi
if (! is_mounted /system rw); then mount -o rw,remount /system /system; fi
if (! is_mounted /system rw); then toolbox_mount /system; fi
}
# 'readlink -f' is not reliable across devices/recoveries, this works for our case
resolve_link() {
local RESOLVE=$1
local RESOLVED=
while (true); do
RESOLVED=$(readlink $RESOLVE || echo $RESOLVE)
if [ "$RESOLVE" = "$RESOLVED" ]; then
echo $RESOLVE
break
else
RESOLVE=$RESOLVED
fi
done
}
wipe_system_files_if_present() {
GO=false
SYSTEMFILES="
/system/xbin/daemonsu
/system/xbin/sugote
/system/xbin/sugote-mksh
/system/xbin/supolicy
/system/xbin/ku.sud
/system/xbin/.ku
/system/xbin/.su
/system/lib/libsupol.so
/system/lib64/libsupol.so
/system/bin/.ext/.su
/system/etc/init.d/99SuperSUDaemon
/system/etc/.installed_su_daemon
/system/app/Superuser.apk
/system/app/Superuser.odex
/system/app/Superuser
/system/app/SuperUser.apk
/system/app/SuperUser.odex
/system/app/SuperUser
/system/app/superuser.apk
/system/app/superuser.odex
/system/app/superuser
/system/app/Supersu.apk
/system/app/Supersu.odex
/system/app/Supersu
/system/app/SuperSU.apk
/system/app/SuperSU.odex
/system/app/SuperSU
/system/app/supersu.apk
/system/app/supersu.odex
/system/app/supersu
/system/app/VenomSuperUser.apk
/system/app/VenomSuperUser.odex
/system/app/VenomSuperUser
"
for FILE in $SYSTEMFILES; do
if [ -d "$FILE" ]; then GO=true; fi
if [ -f "$FILE" ]; then GO=true; fi
done
RMSU=false
if (! $RWSYSTEM); then
if [ -f "/system/xbin/su" ]; then
# only remove /system/xbin/su if it's SuperSU. Could be firmware-included version, we
# do not want to cause remount for that
SUPERSU_CHECK=$(cat /system/xbin/su | grep SuperSU)
if [ $? -eq 0 ]; then
GO=true
RMSU=true
fi
fi
SPECIALSYSTEMFILES="
/system/etc/install-recovery_original.sh
/system/bin/install-recovery_original.sh
/system/bin/app_process32_original
/system/bin/app_process32_xposed
/system/bin/app_process64_original
/system/bin/app_process64_xposed
/system/bin/app_process_init
"
for FILE in $SPECIALSYSTEMFILES; do
if [ -d "$FILE" ]; then GO=true; fi
done
fi
if ($GO); then
if (! $RWSYSTEM); then
ui_print "- Remounting system r/w :("
remount_system_rw
fi
for FILE in $SYSTEMFILES; do
if [ -d "$FILE" ]; then rm -rf $FILE; fi
if [ -f "$FILE" ]; then rm -f $FILE; fi
done
if (! $RWSYSTEM); then
# remove wrongly placed /system/xbin/su as well
if ($RMSU); then
rm -f /system/xbin/su
fi
# Restore install-recovery and app_process from system install
# Otherwise, our system-less install will fail to boot
if [ -f "/system/etc/install-recovery_original.sh" ]; then
rm -f /system/etc/install-recovery.sh
mv /system/etc/install-recovery_original.sh /system/etc/install-recovery.sh
fi
if [ -f "/system/bin/install-recovery_original.sh" ]; then
rm -f /system/bin/install-recovery.sh
mv /system/bin/install-recovery_original.sh /system/bin/install-recovery.sh
fi
if [ -f "/system/bin/app_process64_original" ]; then
rm -f /system/bin/app_process64
if [ -f "/system/bin/app_process64_xposed" ]; then
ln -s /system/bin/app_process64_xposed /system/bin/app_process64
else
mv /system/bin/app_process64_original /system/bin/app_process64
fi
fi
if [ -f "/system/bin/app_process32_original" ]; then
rm -f /system/bin/app_process32
if [ -f "/system/bin/app_process32_xposed" ]; then
ln -s /system/bin/app_process32_xposed /system/bin/app_process32
else
mv /system/bin/app_process32_original /system/bin/app_process32
fi
fi
if [ -f "/system/bin/app_process64" ]; then
rm /system/bin/app_process
ln -s /system/bin/app_process64 /system/bin/app_process
elif [ -f "/system/bin/app_process32" ]; then
rm /system/bin/app_process
ln -s /system/bin/app_process32 /system/bin/app_process
fi
rm -f /system/bin/app_process_init
fi
fi
}
wipe_data_competitors_and_cache() {
rm -f /data/dalvik-cache/*com.noshufou.android.su*
rm -f /data/dalvik-cache/*/*com.noshufou.android.su*
rm -f /data/dalvik-cache/*com.koushikdutta.superuser*
rm -f /data/dalvik-cache/*/*com.koushikdutta.superuser*
rm -f /data/dalvik-cache/*com.mgyun.shua.su*
rm -f /data/dalvik-cache/*/*com.mgyun.shua.su*
rm -f /data/dalvik-cache/*com.m0narx.su*
rm -f /data/dalvik-cache/*/*com.m0narx.su*
rm -f /data/dalvik-cache/*com.kingroot.kinguser*
rm -f /data/dalvik-cache/*/*com.kingroot.kinguser*
rm -f /data/dalvik-cache/*com.kingroot.master*
rm -f /data/dalvik-cache/*/*com.kingroot.master*
rm -f /data/dalvik-cache/*me.phh.superuser*
rm -f /data/dalvik-cache/*/*me.phh.superuser*
rm -f /data/dalvik-cache/*Superuser.apk*
rm -f /data/dalvik-cache/*/*Superuser.apk*
rm -f /data/dalvik-cache/*SuperUser.apk*
rm -f /data/dalvik-cache/*/*SuperUser.apk*
rm -f /data/dalvik-cache/*superuser.apk*
rm -f /data/dalvik-cache/*/*superuser.apk*
rm -f /data/dalvik-cache/*VenomSuperUser.apk*
rm -f /data/dalvik-cache/*/*VenomSuperUser.apk*
rm -f /data/dalvik-cache/*eu.chainfire.supersu*
rm -f /data/dalvik-cache/*/*eu.chainfire.supersu*
rm -f /data/dalvik-cache/*Supersu.apk*
rm -f /data/dalvik-cache/*/*Supersu.apk*
rm -f /data/dalvik-cache/*SuperSU.apk*
rm -f /data/dalvik-cache/*/*SuperSU.apk*
rm -f /data/dalvik-cache/*supersu.apk*
rm -f /data/dalvik-cache/*/*supersu.apk*
rm -f /data/dalvik-cache/*.oat
rm -rf /data/app/com.noshufou.android.su*
rm -rf /data/app/com.koushikdutta.superuser*
rm -rf /data/app/com.mgyun.shua.su*
rm -rf /data/app/com.m0narx.su*
rm -rf /data/app/com.kingroot.kinguser*
rm -rf /data/app/com.kingroot.master*
rm -rf /data/app/me.phh.superuser*
}
# check_zero "progress_message" "success message" "failure message" "command"
check_zero() {
if ($CONTINUE); then
if [ ! -z "$1" ]; then ui_print "$1"; fi
eval "$4"
if [ $? -eq 0 ]; then
if [ ! -z "$2" ]; then ui_print "$2"; fi
else
if [ ! -z "$3" ]; then
if [ ! -z "$1" ]; then
ui_print_less "$1"
else
ui_print_less "$UI_PRINT_LAST"
fi
ui_print_always "$3";
fi
CONTINUE=false
fi
fi
}
# check_zero_def "progress message" "command"
check_zero_def() {
check_zero "$1" "" "--- Failure, aborting" "$2"
}
# find boot image partition if not set already
find_boot_image() {
# expand the detection if we find more, instead of reading from fstab, because unroot
# from the SuperSU APK doesn't have the fstab to read from
if [ -z "$BOOTIMAGE" ]; then
for PARTITION in kern-a KERN-A android_boot ANDROID_BOOT kernel KERNEL boot BOOT lnx LNX; do
BOOTIMAGE=$(readlink /dev/block/by-name/$PARTITION || readlink /dev/block/platform/*/by-name/$PARTITION || readlink /dev/block/platform/*/*/by-name/$PARTITION || readlink /dev/block/by-name/$PARTITION$SLOT_SUFFIX || readlink /dev/block/platform/*/by-name/$PARTITION$SLOT_SUFFIX || readlink /dev/block/platform/*/*/by-name/$PARTITION$SLOT_SUFFIX)
if [ ! -z "$BOOTIMAGE" ]; then break; fi
done
fi
}
# use only on 6.0+, tries to read current boot image and detect if we can do a system install
# without any boot image patching. Requirements:
# - /data readable
# - not pre-patched by SuperSU
# - dm-verity disabled
# - init loads from /data/security/current/sepolicy
# - sepolicy has init load_policy or permissive init
# It symlink/patches the relevant files to /data, and sets SYSTEMLESS variable if not already set
detect_systemless_required() {
OLD_SYSTEMLESS=$SYSTEMLESS
if [ "$OLD_SYSTEMLESS" = "detect" ]; then
# we don't override a pre-set true/false value
SYSTEMLESS=true
fi
# check /data mounted
if (! is_mounted /data); then
return
fi
# find boot image partition
find_boot_image
CONTINUE=true
if [ -z "$BOOTIMAGE" ]; then
# no boot image partition detected, abort
return
fi
# extract ramdisk from boot image
rm -rf /sutmp
mkdir /sutmp
check_zero "" "" "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --bootimg-extract-ramdisk $BOOTIMAGE /sutmp/ramdisk.packed"
check_zero "" "" "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --ungzip /sutmp/ramdisk.packed /sutmp/ramdisk"
if (! $CONTINUE); then return; fi
# detect SuperSU patch
LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --patch-test /sutmp/ramdisk
if [ $? -ne 0 ]; then
return
fi
# detect dm-verity in use
for i in `LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-ls /sutmp/ramdisk | grep fstab | grep "^${CPIO_PREFIX}"`; do
rm -f /sutmp/fstab
check_zero "" "" "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-extract /sutmp/ramdisk $i /sutmp/fstab"
if (! $CONTINUE); then return; fi
VERIFY=$(cat /sutmp/fstab | grep verify | grep system)
if [ $? -eq 0 ]; then
# verify flag found, dm-verity probably enabled, modifying /system may prevent boot
return
fi
done
# detect init loading from /data/security/current/sepolicy
check_zero "" "" "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-extract /sutmp/ramdisk ${CPIO_PREFIX}init /sutmp/init"
if (! $CONTINUE); then return; fi
CURRENT=$(cat /sutmp/init | grep "/data/security/current/sepolicy")
if [ $? -ne 0 ]; then
# this init doesn't load from the default sepolicy override location
return
fi
# extract sepolicy
check_zero "" "" "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-extract /sutmp/ramdisk ${CPIO_PREFIX}sepolicy /sutmp/sepolicy"
if (! $CONTINUE); then return; fi
GO=false
# detect init permissive
if (! $GO); then
INIT_PERMISSIVE=$(LD_LIBRARY_PATH=$RAMDISKLIB $BIN/supolicy --dumpav /sutmp/sepolicy | grep "[TYPE]" | grep " init (PERMISSIVE) ")
if [ $? -eq 0 ]; then
GO=true
fi
fi
# detect init load_policy
if (! $GO); then
INIT_LOAD_POLICY=$(LD_LIBRARY_PATH=$RAMDISKLIB $BIN/supolicy --dumpav /sutmp/sepolicy | grep "[AV]" | grep " ALLOW " | grep " init-->kernel (security) " | grep "load_policy")
if [ $? -eq 0 ]; then
GO=true
fi
fi
# copy files to /data
if (! $GO); then return; fi
rm -rf /data/security/*
mkdir /data/security/current
set_perm 1000 1000 0755 /data/security/current u:object_r:security_file:s0
LD_LIBRARY_PATH=$RAMDISKLIB $BIN/supolicy --file /sutmp/sepolicy /data/security/current/sepolicy
set_perm 1000 1000 0644 /data/security/current/sepolicy u:object_r:security_file:s0
for i in seapp_contexts file_contexts file_contexts.bin property_contexts service_contexts selinux_version; do
ln -s /$i /data/security/current/$i
done
ln -s /system/etc/security/mac_permissions.xml /data/security/current/mac_permissions.xml
# if we reach this point, we can do a system install
if [ "$OLD_SYSTEMLESS" = "detect" ]; then
# we don't override a pre-set true/false value
SYSTEMLESS=false
fi
}
ui_print " "
ui_print "*****************"
ui_print_always "SuperSU installer"
ui_print "*****************"
# detect slot-based partition layout
SLOT_USED=false
SLOT_SUFFIX=$(getprop ro.boot.slot_suffix 2>/dev/null)
SLOT_SYSTEM=
CPIO_PREFIX=
if [ -z "$SLOT_SUFFIX" ]; then
for i in `cat /proc/cmdline`; do
if [ "${i%=*}" = "androidboot.slot_suffix" ]; then
SLOT_SUFFIX=${i#*=}
break
fi
done
fi
if [ ! -z "$SLOT_SUFFIX" ]; then
SLOT_USED=true
fi
if ($SLOT_USED); then
# /fstab.* for stock boot images, which can contain slotselect
# /etc/fstab for TWRP, which will contain $SLOT_SUFFIX
SYSTEM_FSTAB=$(cat /fstab.* /etc/fstab 2>/dev/null | grep -v "#" | grep -i "/system" | tr -s " ");
if (! `echo $SYSTEM_FSTAB | grep slotselect >/dev/null 2>&1`); then
if (! `echo $SYSTEM_FSTAB | grep "$SLOT_SUFFIX" >/dev/null 2>&1`); then
SLOT_USED=false
fi
fi
if ($SLOT_USED); then
for i in $SYSTEM_FSTAB; do
if (! `echo $SYSTEM_FSTAB | grep "$SLOT_SUFFIX" >/dev/null 2>&1`); then
SLOT_SYSTEM=$i$SLOT_SUFFIX
else
SLOT_SYSTEM=$i
fi
break
done
fi
fi
if ($SLOT_USED); then
CPIO_PREFIX=boot/
fi
ui_print "- Mounting /system, /data and rootfs"
HAD_SYSTEM=false
HAD_SYSTEM_RW=false
HAD_SYSTEM_ROOT=false
if (`mount | grep " /system " >/dev/null 2>&1`); then
HAD_SYSTEM=true
if (`mount | grep " /system " | grep "rw" >/dev/null 2>&1`); then
HAD_SYSTEM_RW=true
fi
fi
if (`mount | grep " /system_root " >/dev/null 2>&1`); then
HAD_SYSTEM_ROOT=true
fi
if (! $SLOT_USED); then
if (! $HAD_SYSTEM); then
mount -o ro /system
toolbox_mount /system ro
fi
else
if (! $HAD_SYSTEM_ROOT); then
# TWRP can have this mounted wrong
umount /system
mkdir /system_root
mount -o ro $SLOT_SYSTEM /system_root
mount -o bind /system_root/system /system
fi
fi
mount /data
toolbox_mount /data
mount -o rw,remount /
mount -o rw,remount / /
if [ -z "$BIN" ]; then
# TWRP went full retard
if [ ! -f "/sbin/unzip" ]; then
ui_print "- BAD RECOVERY DETECTED, NO UNZIP, ABORTING"
exit 1
fi
fi
if [ -z "$NOOVERRIDE" ]; then
# read override variables
getvar SYSTEMLESS
getvar PATCHBOOTIMAGE
getvar BOOTIMAGE
getvar STOCKBOOTIMAGE
getvar BINDSYSTEMXBIN
getvar PERMISSIVE
getvar KEEPVERITY
getvar KEEPFORCEENCRYPT
getvar FRP
fi
if [ -z "$SYSTEMLESS" ]; then
if (! $SLOT_USED); then
# detect if we need systemless, based on Android version and boot image
SYSTEMLESS=detect
else
# unless we're on a slot-based system, as TWRP being in the same boot image will
# always cause the detection to default to system-mode
SYSTEMLESS=true
fi
fi
if [ -z "$PATCHBOOTIMAGE" ]; then
# only if we end up doing a system-less install
PATCHBOOTIMAGE=true
fi
if [ -z "$BINDSYSTEMXBIN" ]; then
# causes launch_daemonsu to bind over /system/xbin, disabled by default
BINDSYSTEMXBIN=false
fi
if [ -z "$PERMISSIVE" ]; then
# don't make everything fake-permissive
PERMISSIVE=false
fi
if [ -z "$KEEPVERITY" ]; then
# we don't keep dm-verity by default
KEEPVERITY=false
fi
if [ -z "$KEEPFORCEENCRYPT" ]; then
# we don't keep forceencrypt by default
KEEPFORCEENCRYPT=false
fi
if [ -z "$FRP" ]; then
# enable FRP if we're using slots, implying large enough boot image
FRP=$SLOT_USED
fi
API=$(cat /system/build.prop | grep "ro.build.version.sdk=" | dd bs=1 skip=21 count=2)
ABI=$(cat /system/build.prop /default.prop | grep -m 1 "ro.product.cpu.abi=" | dd bs=1 skip=19 count=3)
ABILONG=$(cat /system/build.prop /default.prop | grep -m 1 "ro.product.cpu.abi=" | dd bs=1 skip=19)
ABI2=$(cat /system/build.prop /default.prop | grep -m 1 "ro.product.cpu.abi2=" | dd bs=1 skip=20 count=3)
SUMOD=06755
SUGOTE=false
SUPOLICY=false
INSTALL_RECOVERY_CONTEXT=u:object_r:system_file:s0
MKSH=/system/bin/mksh
PIE=
SU=su
ARCH=arm
APKFOLDER=false
APKNAME=/system/app/Superuser.apk
APPPROCESS=false
APPPROCESS64=false
SYSTEMLIB=/system/lib
RAMDISKLIB=$SYSTEMLIB
RWSYSTEM=true
if [ "$API" -le "21" ]; then
# needed for some intermediate AOSP verions
remount_system_rw
cat /system/bin/toolbox > /system/toolbox
chmod 0755 /system/toolbox
ch_con /system/toolbox
fi
if [ "$ABI" = "x86" ]; then ARCH=x86; fi;
if [ "$ABI2" = "x86" ]; then ARCH=x86; fi;
if [ "$API" -eq "$API" ]; then
if [ "$API" -ge "17" ]; then
SUGOTE=true
PIE=.pie
if [ "$ARCH" = "x86" ]; then SU=su.pie; fi;
if [ "$ABILONG" = "armeabi-v7a" ]; then ARCH=armv7; fi;
if [ "$ABI" = "mip" ]; then ARCH=mips; fi;
if [ "$ABILONG" = "mips" ]; then ARCH=mips; fi;
fi
if [ "$API" -ge "18" ]; then
SUMOD=0755
fi
if [ "$API" -ge "20" ]; then
if [ "$ABILONG" = "arm64-v8a" ]; then ARCH=arm64; SYSTEMLIB=/system/lib64; APPPROCESS64=true; fi;
if [ "$ABILONG" = "mips64" ]; then ARCH=mips64; SYSTEMLIB=/system/lib64; APPPROCESS64=true; fi;
if [ "$ABILONG" = "x86_64" ]; then ARCH=x64; SYSTEMLIB=/system/lib64; APPPROCESS64=true; fi;
APKFOLDER=true
APKNAME=/system/app/SuperSU/SuperSU.apk
fi
if [ "$API" -ge "19" ]; then
SUPOLICY=true
if [ "$(LD_LIBRARY_PATH=$SYSTEMLIB /system/toolbox ls -lZ /system/bin/toolbox | grep toolbox_exec > /dev/null; echo $?)" -eq "0" ]; then
INSTALL_RECOVERY_CONTEXT=u:object_r:toolbox_exec:s0
fi
fi
if [ "$API" -ge "21" ]; then
APPPROCESS=true
fi
if [ "$API" -ge "22" ]; then
SUGOTE=false
fi
fi
if [ ! -f $MKSH ]; then
MKSH=/system/bin/sh
fi
#ui_print "DBG [$API] [$ABI] [$ABI2] [$ABILONG] [$ARCH] [$MKSH]"
if [ -z "$BIN" ]; then
ui_print "- Extracting files"
cd /tmp
mkdir supersu
cd supersu
unzip -o "$ZIP"
BIN=/tmp/supersu/$ARCH
COM=/tmp/supersu/common
fi
# execute binaries from ramdisk
chmod -R 0755 $BIN/*
RAMDISKLIB=$BIN:$SYSTEMLIB
if [ "$API" -ge "19" ]; then
# 4.4+: permissive all teh things
LD_LIBRARY_PATH=$RAMDISKLIB $BIN/supolicy --live "permissive *"
fi
SAMSUNG=false
if [ "$API" -eq "$API" ]; then
SAMSUNG_CHECK=$(cat /system/build.prop | grep "ro.build.fingerprint=" | grep -i "samsung")
if [ $? -eq 0 ]; then
SAMSUNG=true
fi
if [ "$API" -ge "23" ]; then
# 6.0+
ui_print "- Detecting system compatibility"
detect_systemless_required
if ($SYSTEMLESS); then
RWSYSTEM=false
fi
elif [ "$API" -ge "21" ]; then
# 5.1/Samsung
# On 5.0, auto-detect sets systemless only for 5.1/Samsung
# But we allow SYSTEMLESS=true override for 3rd party mods
# - that doesn't officially work, though!
if [ "$SYSTEMLESS" = "detect" ]; then
SYSTEMLESS=false
if [ "$API" -ge "22" ]; then
if ($SAMSUNG); then
SYSTEMLESS=true
fi
fi
fi
if ($SYSTEMLESS); then
RWSYSTEM=false
fi
fi
fi
# Do not use SYSTEMLESS after this point, but refer to RWSYSTEM
if ($RWSYSTEM); then
ui_print "- System mode"
remount_system_rw
ui_print "- Disabling OTA survival"
chmod 0755 $BIN/chattr$PIE
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/bin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/bin/.ext/.su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/sbin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /vendor/sbin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /vendor/bin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /vendor/xbin/su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/daemonsu
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/sugote
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/sugote_mksh
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/supolicy
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/ku.sud
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/.ku
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/xbin/.su
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/lib/libsupol.so
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/lib64/libsupol.so
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/etc/install-recovery.sh
LD_LIBRARY_PATH=$SYSTEMLIB $BIN/chattr$PIE -ia /system/bin/install-recovery.sh
ui_print "- Removing old files"
if [ -f "/system/bin/install-recovery.sh" ]; then
if [ ! -f "/system/bin/install-recovery_original.sh" ]; then
mv /system/bin/install-recovery.sh /system/bin/install-recovery_original.sh
ch_con /system/bin/install-recovery_original.sh
fi
fi
if [ -f "/system/etc/install-recovery.sh" ]; then
if [ ! -f "/system/etc/install-recovery_original.sh" ]; then
mv /system/etc/install-recovery.sh /system/etc/install-recovery_original.sh
ch_con /system/etc/install-recovery_original.sh
fi
fi
# only wipe these files in /system install, so not part of the wipe_ functions
rm -f /system/bin/install-recovery.sh
rm -f /system/etc/install-recovery.sh
rm -f /system/bin/su
rm -f /system/xbin/su
rm -f /system/sbin/su
rm -f /vendor/sbin/su
rm -f /vendor/bin/su
rm -f /vendor/xbin/su
rm -rf /data/app/eu.chainfire.supersu-*
rm -rf /data/app/eu.chainfire.supersu.apk
wipe_system_files_if_present
wipe_data_competitors_and_cache
rm /data/su.img
rm /cache/su.img
ui_print "- Creating space"
if ($APKFOLDER); then
if [ -f "/system/app/Maps/Maps.apk" ]; then
cp /system/app/Maps/Maps.apk /Maps.apk
rm /system/app/Maps/Maps.apk
fi
if [ -f "/system/app/GMS_Maps/GMS_Maps.apk" ]; then
cp /system/app/GMS_Maps/GMS_Maps.apk /GMS_Maps.apk
rm /system/app/GMS_Maps/GMS_Maps.apk
fi
if [ -f "/system/app/YouTube/YouTube.apk" ]; then
cp /system/app/YouTube/YouTube.apk /YouTube.apk
rm /system/app/YouTube/YouTube.apk
fi
else
if [ -f "/system/app/Maps.apk" ]; then
cp /system/app/Maps.apk /Maps.apk
rm /system/app/Maps.apk
fi
if [ -f "/system/app/GMS_Maps.apk" ]; then
cp /system/app/GMS_Maps.apk /GMS_Maps.apk
rm /system/app/GMS_Maps.apk
fi
if [ -f "/system/app/YouTube.apk" ]; then
cp /system/app/YouTube.apk /YouTube.apk
rm /system/app/YouTube.apk
fi
fi
ui_print "- Placing files"
mkdir /system/bin/.ext
set_perm 0 0 0777 /system/bin/.ext
cp_perm 0 0 $SUMOD $BIN/$SU /system/bin/.ext/.su
cp_perm 0 0 $SUMOD $BIN/$SU /system/xbin/su
cp_perm 0 0 0755 $BIN/$SU /system/xbin/daemonsu
if ($SUGOTE); then
cp_perm 0 0 0755 $BIN/$SU /system/xbin/sugote u:object_r:zygote_exec:s0
cp_perm 0 0 0755 $MKSH /system/xbin/sugote-mksh
fi
if ($SUPOLICY); then
cp_perm 0 0 0755 $BIN/supolicy /system/xbin/supolicy
cp_perm 0 0 0644 $BIN/libsupol.so $SYSTEMLIB/libsupol.so
fi
if ($APKFOLDER); then
mkdir /system/app/SuperSU
set_perm 0 0 0755 /system/app/SuperSU
fi
cp_perm 0 0 0644 $COM/Superuser.apk $APKNAME
cp_perm 0 0 0755 $COM/install-recovery.sh /system/etc/install-recovery.sh
ln_con /system/etc/install-recovery.sh /system/bin/install-recovery.sh
if ($APPPROCESS); then
rm /system/bin/app_process
ln_con /system/xbin/daemonsu /system/bin/app_process
if ($APPPROCESS64); then
if [ ! -f "/system/bin/app_process64_original" ]; then
mv /system/bin/app_process64 /system/bin/app_process64_original
else
rm /system/bin/app_process64
fi
ln_con /system/xbin/daemonsu /system/bin/app_process64
if [ ! -f "/system/bin/app_process_init" ]; then
cp_perm 0 2000 0755 /system/bin/app_process64_original /system/bin/app_process_init
fi
else
if [ ! -f "/system/bin/app_process32_original" ]; then
mv /system/bin/app_process32 /system/bin/app_process32_original
else
rm /system/bin/app_process32
fi
ln_con /system/xbin/daemonsu /system/bin/app_process32
if [ ! -f "/system/bin/app_process_init" ]; then
cp_perm 0 2000 0755 /system/bin/app_process32_original /system/bin/app_process_init
fi
fi
fi
cp_perm 0 0 0744 $COM/99SuperSUDaemon /system/etc/init.d/99SuperSUDaemon
echo 1 > /system/etc/.installed_su_daemon
set_perm 0 0 0644 /system/etc/.installed_su_daemon
ui_print "- Restoring files"
if ($APKFOLDER); then
if [ -f "/Maps.apk" ]; then
cp_perm 0 0 0644 /Maps.apk /system/app/Maps/Maps.apk
rm /Maps.apk
fi
if [ -f "/GMS_Maps.apk" ]; then
cp_perm 0 0 0644 /GMS_Maps.apk /system/app/GMS_Maps/GMS_Maps.apk
rm /GMS_Maps.apk
fi
if [ -f "/YouTube.apk" ]; then
cp_perm 0 0 0644 /YouTube.apk /system/app/YouTube/YouTube.apk
rm /YouTube.apk
fi
else
if [ -f "/Maps.apk" ]; then
cp_perm 0 0 0644 /Maps.apk /system/app/Maps.apk
rm /Maps.apk
fi
if [ -f "/GMS_Maps.apk" ]; then
cp_perm 0 0 0644 /GMS_Maps.apk /system/app/GMS_Maps.apk
rm /GMS_Maps.apk
fi
if [ -f "/YouTube.apk" ]; then
cp_perm 0 0 0644 /YouTube.apk /system/app/YouTube.apk
rm /YouTube.apk
fi
fi
ui_print "- Post-installation script"
rm /system/toybox
rm /system/toolbox
LD_LIBRARY_PATH=$SYSTEMLIB /system/xbin/su --install
else
ui_print "- System-less mode, boot image support required"
SUIMG=/data/su.img
HAVEDATA=true
if (! is_mounted /data); then
SUIMG=/cache/su.img
HAVEDATA=false
fi
ui_print "- Creating image"
# we want a 96M image, for SuperSU files and potential mods such as systemless xposed
# attempt smaller sizes on failure, and hope the launch_daemonsu.sh script succeeds
# in resizing to 96M later
for SUIMGSIZE in 96M 64M 32M 16M; do
if [ ! -f "$SUIMG" ]; then make_ext4fs -l $SUIMGSIZE -a /su -S $COM/file_contexts_image $SUIMG; fi
if [ ! -f "$SUIMG" ]; then LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/make_ext4fs -l $SUIMGSIZE -a /su -S $COM/file_contexts_image $SUIMG; fi
set_perm 0 0 0600 /data/su.img u:object_r:system_data_file:s0
done
if [ -f "$SUIMG" ]; then
LD_LIBRARY_PATH=$SYSTEMLIB /system/bin/e2fsck -p -f $SUIMG
fi
ui_print "- Mounting image"
mkdir /su
# 'losetup -f' is unreliable across devices/recoveries
LOOPDEVICE=
for LOOP in 0 1 2 3 4 5 6 7; do
if (! is_mounted /su); then
LOOPDEVICE=/dev/block/loop$LOOP
HAVE_LOOPDEVICE=false
if [ -f "$LOOPDEVICE" ]; then
HAVE_LOOPDEVICE=true
elif [ -b "$LOOPDEVICE" ]; then
HAVE_LOOPDEVICE=true;
fi
if (! $HAVE_LOOPDEVICE); then
mknod $LOOPDEVICE b 7 $LOOP
fi
losetup $LOOPDEVICE $SUIMG
if [ "$?" -eq "0" ]; then
mount -t ext4 -o loop $LOOPDEVICE /su
if (! is_mounted /su); then
/system/bin/toolbox mount -t ext4 -o loop $LOOPDEVICE /su
fi
if (! is_mounted /su); then
/system/bin/toybox mount -t ext4 -o loop $LOOPDEVICE /su
fi
fi
if (is_mounted /su); then
break;
fi
fi
done
ui_print "- Creating paths"
mkdir /su/bin
set_perm 0 0 0751 /su/bin
mkdir /su/xbin
set_perm 0 0 0755 /su/xbin
mkdir /su/lib
set_perm 0 0 0755 /su/lib
mkdir /su/etc
set_perm 0 0 0755 /su/etc
mkdir /su/su.d
set_perm 0 0 0700 /su/su.d
ui_print "- Removing old files"
wipe_system_files_if_present
wipe_data_competitors_and_cache
rm -rf /su/bin/app_process
rm -rf /su/bin/sush
rm -rf /su/bin/daemonsu
rm -rf /su/bin/daemonsu_*
rm -rf /su/bin/su
rm -rf /su/bin/su_*
rm -rf /su/bin/supolicy
rm -rf /su/bin/supolicy_*
rm -rf /su/lib/libsupol.so
rm -rf /su/lib/libsupol_*
rm -rf /su/bin/sukernel
ui_print "- Placing files"
# Copy binaries and utilities
cp_perm 0 0 0755 $BIN/$SU /su/bin/su
cp_perm 0 0 0755 $BIN/$SU /su/bin/daemonsu
ln_con /su/bin/su /su/bin/supolicy
cp_perm 0 0 0755 $BIN/supolicy /su/bin/supolicy_wrapped
cp_perm 0 0 0644 $BIN/libsupol.so /su/lib/libsupol.so
cp_perm 0 0 0755 $BIN/sukernel /su/bin/sukernel
# Copy APK, installation is done by /sbin/launch_daemonsu.sh
if ($HAVEDATA); then
cp_perm 1000 1000 0600 $COM/Superuser.apk /data/SuperSU.apk
# Wipe /data/security to prevent SELinux policy override
# Important to keep the folder itself
rm -rf /data/security/*
else
cp_perm 1000 1000 0600 $COM/Superuser.apk /cache/SuperSU.apk
fi
# Fix Samsung deep sleep issue. Affects enough millions of users to include.
if ($SAMSUNG); then
cp_perm 0 0 0700 $COM/000000deepsleep /su/su.d/000000deepsleep
fi
if ($BINDSYSTEMXBIN); then
mkdir /su/xbin_bind
set_perm 0 0 0755 /su/xbin_bind
else
rm -rf /su/xbin_bind
fi
if ($PATCHBOOTIMAGE); then
ui_print " "
ui_print "******************"
ui_print_always "Boot image patcher"
ui_print "******************"
ui_print "- Finding boot image"
find_boot_image
CONTINUE=true
if [ -z "$BOOTIMAGE" ]; then
ui_print_less "$UI_PRINT_LAST"
ui_print_always "--- Boot image: not found, aborting"
CONTINUE=false
else
ui_print "--- Boot image: $BOOTIMAGE"
fi
if [ -z "$STOCKBOOTIMAGE" ]; then
STOCKBOOTIMAGE=$BOOTIMAGE
fi
rm -rf /sutmp
mkdir /sutmp
IMAGETYPE=android
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-type $BOOTIMAGE
if [ $? -eq 2 ]; then
IMAGETYPE=chromeos
fi
check_zero_def "- Extracting ramdisk" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-extract-ramdisk $BOOTIMAGE /sutmp/ramdisk.packed"
check_zero_def "- Decompressing ramdisk" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --ungzip /sutmp/ramdisk.packed /sutmp/ramdisk"
if ($CONTINUE); then
ui_print "- Checking patch status"
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --patch-test /sutmp/ramdisk
if [ $? -ne 0 ]; then
ui_print "--- Already patched, attempting to find stock backup"
if ($CONTINUE); then
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --restore /sutmp/ramdisk /sutmp/stock_boot.img
if [ $? -ne 0 ]; then
ui_print_always "--- Stock restore failed, attempting ramdisk restore"
CONTINUE=false
else
ui_print "--- Stock backup restored"
STOCKBOOTIMAGE=/sutmp/stock_boot.img
fi
fi
check_zero_def "- Extracting ramdisk" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-extract-ramdisk /sutmp/stock_boot.img /sutmp/ramdisk.packed"
check_zero_def "- Decompressing ramdisk" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --ungzip /sutmp/ramdisk.packed /sutmp/ramdisk"
check_zero "- Checking patch status" "" "--- Already patched, attempting ramdisk restore" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --patch-test /sutmp/ramdisk"
if (! $CONTINUE); then
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-restore /sutmp/ramdisk /sutmp/ramdisk
if [ $? -ne 0 ]; then
ui_print_always "--- Ramdisk restore failed, aborting"
else
ui_print "--- Ramdisk backup restored (OTA impossible)"
CONTINUE=true
fi
check_zero "- Checking patch status" "" "--- Already patched, aborting" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --patch-test /sutmp/ramdisk"
fi
else
ui_print "- Creating backup"
rm /data/stock_boot_*.img
rm /data/stock_boot_*.img.gz
rm /cache/stock_boot_*.img
rm /cache/stock_boot_*.img.gz
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --backup $BOOTIMAGE
if [ $? -ne 0 ]; then
ui_print "--- Backup failed"
fi
fi
fi
if ($CONTINUE); then
cp_perm 0 0 0644 /sutmp/ramdisk /sutmp/ramdisk.original
if ($SLOT_USED); then
check_zero_def "- Importing system_root" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-import-system-root /sutmp/ramdisk /sutmp/ramdisk"
fi
fi
if ($CONTINUE); then
ui_print "- Patching sepolicy"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-extract /sutmp/ramdisk ${CPIO_PREFIX}sepolicy /sutmp/sepolicy"
if ($CONTINUE); then
if ($PERMISSIVE); then
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/supolicy --file /sutmp/sepolicy /sutmp/sepolicy.patched "permissive *"
else
LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/supolicy --file /sutmp/sepolicy /sutmp/sepolicy.patched
fi
if [ ! -f "/sutmp/sepolicy.patched" ]; then
ui_print_less "$UI_PRINT_LAST"
ui_print_always "--- Failure, aborting"
CONTINUE=false
fi
fi
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}sepolicy /sutmp/sepolicy.patched"
fi
check_zero_def "- Adding daemon launcher" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 700 ${CPIO_PREFIX}sbin/launch_daemonsu.sh $COM/launch_daemonsu.sh"
check_zero_def "- Adding init script" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 750 ${CPIO_PREFIX}init.supersu.rc $COM/init.supersu.rc"
check_zero_def "- Creating mount point" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-mkdir /sutmp/ramdisk /sutmp/ramdisk 755 ${CPIO_PREFIX}su"
COMMAND="LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --patch /sutmp/ramdisk /sutmp/ramdisk $STOCKBOOTIMAGE --sdk=$API"
if ($KEEPVERITY); then
COMMAND="$COMMAND --keep-verity"
fi
if ($KEEPFORCEENCRYPT); then
COMMAND="$COMMAND --keep-forceencrypt"
fi
check_zero_def "- Patching init.*.rc, fstabs, file_contexts, dm-verity" "$COMMAND"
if ($CONTINUE); then
if ($SLOT_USED); then
ui_print "- Patching init, system_root, system"
LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-extract /sutmp/ramdisk sbin/twrp /sutmp/twrp
if [ -f "/sutmp/twrp" ]; then
# backup TWRP's version of init
check_zero_def "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-extract /sutmp/ramdisk init /sutmp/init_twrp"
check_zero_def "" "LD_LIBRARY_PATH=$RAMDISKLIB $BIN/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 750 init_twrp /sutmp/init_twrp"
fi
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 750 init $BIN/suinit"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-mkdir /sutmp/ramdisk /sutmp/ramdisk 755 boot/system_root"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-mkdir /sutmp/ramdisk /sutmp/ramdisk 755 boot/system"
if (! $CONTINUE); then
ui_print_less "$UI_PRINT_LAST"
ui_print_always "--- Failure, aborting"
fi
fi
fi
if [ -f "/data/custom_ramdisk_patch.sh" ]; then
check_zero_def "- Calling user ramdisk patch script" "sh /data/custom_ramdisk_patch.sh /sutmp/ramdisk"
fi
if ($CONTINUE); then
if ($FRP); then
ui_print "- Factory reset protection"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-mkdir /sutmp/ramdisk /sutmp/ramdisk 0 ${CPIO_PREFIX}.sufrp"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 755 ${CPIO_PREFIX}.sufrp/frp_install $COM/frp_install"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}.sufrp/file_contexts_image $COM/file_contexts_image"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}.sufrp/su $BIN/su"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}.sufrp/sukernel $BIN/sukernel"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}.sufrp/supolicy $BIN/supolicy"
check_zero_def "" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-add /sutmp/ramdisk /sutmp/ramdisk 644 ${CPIO_PREFIX}.sufrp/libsupol.so $BIN/libsupol.so"
fi
fi
check_zero_def "- Creating ramdisk backup" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --cpio-backup /sutmp/ramdisk.original /sutmp/ramdisk /sutmp/ramdisk"
check_zero_def "- Compressing ramdisk" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --gzip /sutmp/ramdisk /sutmp/ramdisk.packed"
if [ "$IMAGETYPE" = "chromeos" ]; then
$BIN/chromeos/futility vbutil_kernel --get-vmlinuz $STOCKBOOTIMAGE --vmlinuz-out /sutmp/boot.chromeos.img
STOCKBOOTIMAGE=/sutmp/boot.chromeos.img
fi
check_zero_def "- Creating boot image" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-replace-ramdisk $STOCKBOOTIMAGE /sutmp/ramdisk.packed /sutmp/boot.img"
if ($SLOT_USED); then
check_zero_def "- Extracting kernel" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-extract-kernel $BOOTIMAGE /sutmp/kernel"
KERNEL_COMPRESSED=false
if ($CONTINUE); then
ui_print "- Decompressing kernel"
if (`LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --ungzip /sutmp/kernel /sutmp/kernel >/dev/null 2>/dev/null`); then
KERNEL_COMPRESSED=true
fi
fi
check_zero_def "- Patching kernel" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --patch-slot-kernel /sutmp/kernel /sutmp/kernel"
if ($CONTINUE); then
if ($KERNEL_COMPRESSED); then
check_zero_def "- Compressing kernel" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --gzip /sutmp/kernel /sutmp/kernel"
fi
fi
if ($CONTINUE); then
check_zero_def "- Replacing kernel" "LD_LIBRARY_PATH=$SYSTEMLIB /su/bin/sukernel --bootimg-replace-kernel /sutmp/boot.img /sutmp/kernel /sutmp/boot.img"
fi
fi
if [ "$IMAGETYPE" = "chromeos" ]; then
ui_print "- Signing boot image"
$BIN/chromeos/futility vbutil_kernel --pack /sutmp/boot.img.signed --keyblock $COM/chromeos/kernel.keyblock --signprivate $COM/chromeos/kernel_data_key.vbprivk --version 1 --vmlinuz /sutmp/boot.img --config $COM/chromeos/kernel.config --arch arm --bootloader $COM/chromeos/kernel.bootloader --flags 0x1
if [ -f "/sutmp/boot.img.signed" ]; then
rm -rf /sutmp/boot.img
mv /sutmp/boot.img.signed /sutmp/boot.img
else
ui_print_less "$UI_PRINT_LAST"
ui_print_always "--- Failure, aborting"
$CONTINUE=false
fi
fi
if ($CONTINUE); then
# might return 1 even if we do not want to abort
ui_print "- Applying hex patches"
/su/bin/sukernel --hexpatch $COM/hexpatch /sutmp/boot.img /sutmp/boot.img
fi
if [ -f "/data/custom_boot_image_patch.sh" ]; then
check_zero_def "- Calling user boot image patch script" "sh /data/custom_boot_image_patch.sh /sutmp/boot.img"
fi
if ($CONTINUE); then
DEV=$(echo `resolve_link $BOOTIMAGE` | grep /dev/block/)
if [ $? -eq 0 ]; then
ui_print "- Flashing boot image"
dd if=/dev/zero of=$BOOTIMAGE bs=4096
else
ui_print "- Saving boot image"
fi
if ($SAMSUNG); then
# Prevent "KERNEL IS NOT SEANDROID ENFORCING"
SAMSUNG_CHECK=$(cat /sutmp/boot.img | grep SEANDROIDENFORCE)
if [ $? -ne 0 ]; then
echo -n "SEANDROIDENFORCE" >> /sutmp/boot.img
fi
fi
dd if=/sutmp/boot.img of=$BOOTIMAGE bs=4096
fi
rm -rf /sutmp
fi
umount /su
losetup -d $LOOPDEVICE
ui_print " "
ui_print "*************************"
ui_print " IMPORTANT NOTICES "
ui_print "*************************"
TWRP2=$(cat /tmp/recovery.log | grep "ro.twrp.version=2");
if [ $? -eq 0 ]; then
ui_print "If TWRP offers to install"
ui_print "SuperSU, do *NOT* let it!"
ui_print "*************************"
fi
ui_print "First reboot may take a "
ui_print "few minutes. It can also "
ui_print "loop a few times. Do not "
ui_print "interrupt the process! "
ui_print "*************************"
ui_print " "
if (! $LESSLOGGING); then
sleep 5
fi
fi
ui_print "- Unmounting /system"
if ($SLOT_USED); then
if (! $HAD_SYSTEM_ROOT); then
umount /system
umount /system_root
if ($HAD_SYSTEM); then
if ($HAD_SYSTEM_RW); then
mount -o rw /system
else
mount -o ro /system
fi
fi
fi
else
if (! $HAD_SYSTEM); then
umount /system
fi
fi
ui_print_always "- Done !"
exit 0
La questione è un'altra, per ora non è noto nessun virus per android che vada a compromettere il sistema operativo al punto tale da non poterlo più considerare affidabile e dover ricorrere a strumenti esterni. Basti pensare anche a tutti gli exploit che erano disponibili per le vecchie versioni di android (dalla 4.0 alla 4.4) e che ora non funzionano più. Al giorno d'oggi il root è quasi esclusivamente ottenuto sbloccando il bootloader, per il quale ti serve un codice ufficiale fornito dal produttore. E per compromettere il sistema operativo in quel modo il root non è nemmeno sufficiente, ti serve qualcosa di più potente come l'Xposed Framework.
Il sistema di sicurezza di Android è sufficientemente blindato da garantirti che con bootloader bloccato le parti cruciali del sistema operativo siano al sicuro. Se per qualche motivo trova qualcosa di compromesso, semplicemente rifiuta di avviarsi. I malware (quei pochi) che son in giro al momento sono app normali, al limite ti rubano o criptano i dati.
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Buona giornata
Pp
- Ganondolf
- Livello: Disco fisso (9/15)
- Messaggi: 674
- Iscritto il: mar gen 28, 2014 10:51 am
- Località: Mestre
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Lo script era solo un esempio per dire che quello di cui parlavamo poteva essere tecnicamente fattibile, ma poi come ho spiegato non è necessario.
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Ti auguro una buona serata
Pp
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Non ho dubbi e sono d'accordo... sulla fiducia: le mie conoscenze di Android non si spingono così in là.Ganondolf ha scritto:Non credo sia tanto un problema tecnico, le custom recovery già dispongono di un busybox e possono eseguire script, anche complessi.PippoDJ ha scritto:beh... proprio a sistema operativo "spento" direi di no: credo ci siano notevoli difficoltà tecniche per poterlo fare.
Ma la mia affermazione si riferiva più che altro ad un sistema integro, non modificato, come mi pare di capire voglia conservare Pulcepiccola.
- Pulcepiccola
- Livello: Workstation (10/15)
- Messaggi: 1344
- Iscritto il: mar set 30, 2014 4:37 pm
Re: Esiste la possibilità di fare una scansione del proprio device a sistema operativo spento?
Notte
-
- Argomenti simili
- Risposte
- Visite
- Ultimo messaggio
-
- 0 Risposte
- 1295 Visite
-
Ultimo messaggio da crazy.cat
-
- 1 Risposte
- 1010 Visite
-
Ultimo messaggio da speedyant
-
- 1 Risposte
- 715 Visite
-
Ultimo messaggio da CUB3
-
- 0 Risposte
- 296 Visite
-
Ultimo messaggio da Zane
-
- 2 Risposte
- 1485 Visite
-
Ultimo messaggio da Pulcepiccola