***********################################*************
***********####### LEGACY_NATIVE ##########*************
***********################################*************

Contiene tutto il codice nativo per le versioni di Android senza SELinux (Android <= 4.1)

###### Contenuto ######

- suidext: contiene la shell standard (versione setuid)
- local2root: contiene tutti gli exploit local2root per le versioni di Android <= 4.1
- headers: include necessari per la compilazione



***********################################*************
***********####### SELINUX_NATIVE #########*************
***********################################*************

Contiene tutto il codice nativo per le ultime versioni di Android con SELinux attivo (Android >= 4.2.2)


###### Contenuto ######

- put_user_exploit: contiene l'exploit basato sulla put_user
- kernel_waiter_exploit: contiene l'exploit towelroot
- suidext: contiene la nuova shell demonizzata
- utils: librerie varie
- headers: include necessari per la compilazione
- remote_main: include i main per shared_library e remote

***********################################*************
***********####### SHARED ################*************
***********################################*************

Contiene codice utilizzato sia da 

###### Contenuto ######
- sqlite_stuff: Contiene alcune funzioni per effettuare query sqlite
- utils: librerie varie
- headers: header necessari alla compilazione. Contiene la configurazione dei log e della shell.

***********################################*************
***********####### CONFIGURAZIONE #########*************
***********################################*************

La configurazione della shell di root è descritta in shared/headers/shell_params.h . Questo file è comune ad entrambe le shell.

 - SHELL_PORT: porta su cui il servizio root andrà in ascolto e su cui la parte client si connetterà
 - ROOT_BIN: path d'installazione del binario che esegue il processo root. Attualmente /system/bin/ddf. 
   	     E' utilizzato sia come server al boot che come client per richiedere l'esecuzione di comandi.
 - INSTALL_SCRIPT: script di avvio al boot (wrapper a /system/bin/debuggerd)
 - INSTALL_SCRIPT_BAK: copia del binario da sostituire
 - INSTALL_REC_SCRIPT: script install-recovery.sh
 - INSTALL_REC_SCRIPT_BAK: backup di install-recovery.sh in caso lo su usi

Per avere i log a disposizione tramite logcat editare il file shared/headers/log.h commentando opportunamente "#define DEBUG".


***********################################*************
***********####### COMPILAZIONE #########*************
***********################################*************

Compilare con il comando "build.sh" e non direttamente tramite ndk-buid. Assicurarsi di avere come working directory la root del codice.
Il sistema di build genera in automatico gli exploit locali in tre versioni diverse: local, remote e shared library.

1) local: file necessari per eseguire gli exploit locali tramite l'apk.
2) remote: exploit da lanciare dalla sandbox del browser.
3) shared library: è la libreria che contiene la funzione per eseguire gli exploit da invocare tramite dlopen.

I corrispettivi file vengono creati in tre cartelle diverse:

1) bin/local: 

 - selinux_exploit: l'exploit basato su put_user
 - selinux4_exploit: l'exploit writeup di towelroot
 - selinux_suidext: la nuova shell che comprende sia il daemon, sia il client
 - selinux_check: esegue un check sull'exploitabilità del device. Restituisce 1 in caso di exploitabilità, 0 altrimenti.
 - runner: è il binario che lancia il demone di root. E' integrato direttamente in selinux_suidext.
 - suidext: shell suid vecchia per Android <= 4.1
 - expl_check: check di exploitabilità tramite exploit legacy
 - local_exploit: binario che lancia tutti gli exploit legacy disponibili

2) bin/local/Android5
 - selinux_suidext: la nuova shell compilata per Android 5

3) bin/remote
 - selinux_exploit: contiene in un unico binario i due exploit selinux e la shell di root.

4) bin/shared_lib
 - libexploit.so: shared library contenente i due exploit selinux e la shell di root.
 - libinstaller.so: shared library contenente il codice per l'installazione dell'apk  



***********################################*************
***********####### ESECUZIONE     #########*************
***********################################*************

###########################
##### 1) LOCAL EXPLOIT: ###
###########################

*** EXPLOIT SELINUX***

Deve essere lanciato passando due argomenti:

     - argv[1]: path assoluto alla nuova shell
     - argv[2]: path assoluto alla vecchia shell

L'exploit installerà automaticamente la shell vecchia se possibile o la shell nuova in base alle rilevazioni effettuate sul device.
Se l'exploit ha successo /system/bin/<shell> sarà presente ed utilizzabile in modo trasparente.

*** EXPLOIT SELINUX 4***

Deve essere lanciato passando un solo argomento

     - argv[1]: path assoluto alla nuova shell

Se l'exploit ha successo /system/bin/<shell> sarà presente ed utilizzabile in modo trasparente.


*** EXPLOIT LEGACY***

Deve essere lanciato passando una stringa come argomento che rappresenza il comando da eseguire.
NB: Alcuni exploit richiedono l'accesso a device video legati alla gesione della camera. 
    E' necessario che tali device siano accessibili in scrittura in base alla sandbox di esecuzione (privilegio CAMERA).

*** SHELL SELINUX***

Per avviare la shell in modalità daemon eseguire "selinux_suidext --daemon" oppure eseguire "selinux_suidext rt" (da root) che avvierà direttamente il demone effettuando un'installazione persistente.
Il client rispetta le specifiche della vecchia shell.

*** SHELL LEGACY***

Semplice file setuid.


############################
##### 2) REMOTE EXPLOIT: ###
############################

Va semplicemente lanciato passando come unico parametro l'apk da installare al termine dell'exploit. E' totalmente automatico.
L'exploit è asincrono di modo da non tenere il browser impegnato. Ritorna 1 se il device risulta vulnerabile e di conseguenza l'exploit viene almeno provato, 0 altrimenti.


####################################
##### 3) SHARED LIBRARY EXPLOIT: ###
####################################

-) libexploit.so: va risolto il simbolo checksum(void). La funzione esegue tutti gli exploit disponibili, sia legacy che selinux ed installa la shell di root adatta.
-) libinstaller.so: va risolto il simbolo checksum(void). La funzione esegue l'installazione dell'apk. L'installer richiede che l'apk sia nella stessa working direcory e che abbia il nome log.tmp. E' necessario aver precedentemente installato la shell di root.

