Shizuku è uno strumento che consente alle applicazioni di accedere a specifiche API di sistema di Android con privilegi elevati, senza la necessità di disporre dei permessi di root. A differenza del rooting, che richiede la modifica del sistema operativo e comporta potenziali rischi per la sicurezza, Shizuku sfrutta ADB (Android Debug Bridge) per permettere alle applicazioni di eseguire (diverse) operazioni che normalmente richiederebbero permessi elevati, come disinstallare applicazioni bloatware di sistema.

shizuku

Avvio tramite wireless debugging

Il metodo di avvio tramite wireless debugging è disponibile su dispositivi che eseguono Android 11 o versioni successive. Questa modalità di avvio non richiede una connessione a un computer, ma a causa delle limitazioni di Android, i vari passaggi devono essere ripetuti dopo ogni riavvio (nei paragrafi successivi vedremo come automatizzare questa procedura).

Abilitare il wireless debugging

  • Attivare le opzioni sviluppatore
  • Attivare Debugging USB, quindi wireless debugging per la propria rete. Questa impostazione consente di eseguire comandi ADB in modalità wireless, eliminando la necessità di collegare lo smartphone a un computer tramite cavo
  • Il metodo più semplice per attivare il wireless debugging consiste nell’utilizzare un tile dedicato nelle impostazioni rapide. Per aggiungere questo tile, è necessario attivarlo all’interno delle Opzioni Sviluppatore alla voce Quick settings developer tiles.

Pairing

L’associazione deve essere effettuata solo la prima volta.

  • Aprire l’app Shizuku e avviare il pairing

start-paring-from-shizuku

  • Assicurarsi di aver abilitato il wireless debugging
  • Selezionare Pair device with pairing code nel menu del wireless debugging

start-pairing

  • Inserire il codice di associazione nella notifica pop-up di Shizuku

enter-pairing-code

  • Avviare Shizuku

Avvio automatico di Shizuku

Tutte queste operazioni devono essere eseguite una sola volta, quindi non è necessario preoccuparsi della loro complessità.

  • Installare Termux
  • Installare le dipendenze necessarie e inizializzare Termux con i seguenti comandi:
1
2
3
pkg up
pkg install nmap openssl android-tools
termux-setup-storage

Assicurarsi di aver dato a Termux il permesso di accedere ai file di sistema.

  • Aprire Termux e la pagina di wireless debugging in split-screen
  • Selezionare l’opzione Pair device with pairing code
  • Eseguire il comando ADB di associazione in Termux:
1
adb pair localhost:Port 'WiFi-pairing-code'
  • In Shizuku selezionare l’opzione Use Shizuku in terminal apps, successivamente Export files
  • Esportare i file, ad esempio, in /storage/emulated/0/shizuku. Il file rish_shizuku.dex contiene il codice necessario per interagire con Shizuku, permettendo di eseguire comandi ADB
  • Creare, nella stessa directory, un file copy.sh includendo lo script riportato di seguito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/data/data/com.termux/files/usr/bin/bash

BASEDIR=$( dirname "${0}" )
BIN=/data/data/com.termux/files/usr/bin
HOME=/data/data/com.termux/files/home
DEX="${BASEDIR}/rish_shizuku.dex"

# Exit if dex is not in the same directory
if [ ! -f "${DEX}" ]; then
  echo "Cannot find ${DEX}"
  exit 1
fi

# Create a Shizuku script file
tee "${BIN}/shizuku" > /dev/null << EOF
#!/data/data/com.termux/files/usr/bin/bash

# Make a list of open ports
ports=\$( nmap -sT -p30000-50000 --open localhost | grep "open" | cut -f1 -d/ )

# Go through the list of ports
for port in \${ports}; do

  # Try to connect to the port, and save the result
  result=\$( adb connect "localhost:\${port}" )

  # Check if the connection succeeded
  if [[ "\$result" =~ "connected" || "\$result" =~ "already" ]]; then

    # Show a message to a user
    echo "\${result}"

    # Start Shizuku
    adb shell "\$( adb shell pm path moe.shizuku.privileged.api | sed 's/^package://;s/base\\.apk/lib\\/arm64\\/libshizuku\\.so/' )"

    # Disable wireless debugging, because it is not needed anymore
    adb shell settings put global adb_wifi_enabled 0

    exit 0
  fi
done

# If no working ports are found, give an error message to a user
echo "ERROR: No port found! Is wireless debugging enabled?"

exit 1
EOF

# Set the dex location to a variable
dex="${HOME}/rish_shizuku.dex"

# Create a Rish script file
tee "${BIN}/rish" > /dev/null << EOF
#!/data/data/com.termux/files/usr/bin/bash

[ -z "\$RISH_APPLICATION_ID" ] && export RISH_APPLICATION_ID="com.termux"

/system/bin/app_process -Djava.class.path="${dex}" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader "\${@}"
EOF

# Give execution permission to script files
chmod +x "${BIN}/shizuku" "${BIN}/rish"

# Copy dex to the home directory
cp -f "${DEX}" "${dex}"

# Remove dex write permission, because app_process cannot load writable dex
chmod -w "${dex}"
  • Eseguire lo script in Termux con il seguente comando: bash /storage/emulated/0/Shizuku/copy.sh

In breve, lo script copy.sh crea un file denominato shizuku nella directory /data/data/com.termux/files/usr/bin di Termux. Questo script esegue il comando nmap per identificare le porte aperte nel range compreso tra 30000 e 50000. Per ciascuna porta trovata, lo script tenta di connettersi utilizzando ADB. Se la connessione ha successo, Shizuku viene avviato e il wireless debugging disabilitato. In caso contrario, viene visualizzato un messaggio di errore.

copy.sh crea poi un secondo script denominato rish, nella medesima directory, che consente di eseguire comandi ADB attraverso le API di Shizuku.

Al termine del processo, entrambi i file vengono resi eseguibili. Inoltre, il file DEX viene copiato dalla sua posizione originale alla home dell’utente, disabilitando i permessi di scrittura su di esso, in modo da garantirne l’integrità.

Lo script non é nostro, ma dell’utente Knud3

Utilizzo

Di seguito i comandi da eseguire in Termux:

  • shizuku: attiva Shizuku
  • rish: apre la shell ADB o esegue un comando nella shell ADB

È possibile migliorare ulteriormente il processo automatizzando completamente l’intera procedura, eliminando la necessità di aprire Termux e inserire manualmente il comando.

Termux:Boot

Si tratta di un add-on di Termux, scaricabile da F-Droid, per eseguire comandi al boot del sistema.

  • Consentire all’app Termux:Boot di essere eseguita all’avvio del sistema
  • Aprire Termux e creare la directory ~/.termux/boot/
  • Posizionare gli script che si desidera eseguire all’interno della suddetta directory. Se ci sono più file, verranno eseguiti in ordine alfabetico.
  • Quindi, per avviare Shizuku in automatico, creare lo script ~/.termux/boot/shizuku:
1
2
3
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
shizuku

Ora la configurazione è completa. Lo script viene eseguito automaticamente all’avvio e successivamente é disabilito il wireless debugging, poiché non è necessario che rimanga attivo in background affinché Shizuku funzioni correttamente.

awesome-shizuku

Al seguente repository è disponibile un elenco delle migliori applicazioni che sfruttano le funzionalità di Shizuku. Alcuni dei migliori esempi:

  • Hail: consente di congelare le applicazioni Android
  • Canta Debloater: permette di disinstallare qualsiasi applicazione di sistema, senza richiedere i permessi di root
  • TaskManager
  • delta: applicazione che offre accesso a impostazioni avanzate dell’hotspot, consentendo di visualizzare un elenco dei dispositivi connessi, generare QR code ecc.
  • LogFox: strumento per la lettura dei log di sistema
  • ShizuWall: firewall che blocca le connessioni di rete delle applicazioni selezionate senza richiedere accesso root o l’uso di VPN
  • App Lock: permette di aprire applicazioni solo previa autenticazione biometrica
  • LockscreenWidgets
  • Swift Backup: un app proprietaria che consente di eseguire il backup delle applicazioni e dei loro dati. Purtroppo, nella versione free, non é possibile schedulare i backup
  • Gli store Droid-ify, FFUpdater, Aurora Store e Obtainium possono sfruttare Shizuku per attivare l’installazione completamente automatica degli aggiornamenti delle applicazioni

Shizuku vs root

Aspetto Shizuku Root
Accesso Limitato, tramite API ADB Completo, senza restrizioni
Sicurezza Basso rischio Rischi potenziali (alcune app potrebbero non funzionare)
Installazione Semplice, senza modifiche sistema Complessa, con modifiche sistema
Funzionalità Solo app compatibili Illimitate

Rispetto alle funzionalità, Shizuku permette di usare applicazioni che richiedono permessi avanzati, quali operazioni di automazione, backup dei dati e modifica di impostazioni di sistema, ma solo se le queste ultime risultino compatibili con l’API di Shizuku. Il root, invece, permette di avere un controllo pieno e totale sul proprio smartphone: modifica file di sistema, installazione di moduli Magisk, overclock/underclock della CPU, personalizzazione profonda dell’interfaccia e molto altro. Risulta più complesso da installare e alcune applicazioni, come quelle di home banking, potrebbero non funzionare su dispositivi rootati.

Per approfondimenti, si veda l’articolo su come Ottenere i permessi di root con APatch.

root-without-root

Riferimenti