
Kit di penetration testing e auditing per app Android.
Uno strumento Java che aiuta a eseguire pentest sulle app Android in modo più veloce, semplice ed efficiente. AndroTickler offre molte funzionalità di raccolta informazioni, controlli statici e dinamici che coprono gran parte degli aspetti del pentesting di app Android. Offre inoltre diverse funzionalità di cui i pentester hanno bisogno durante i loro test. AndroTickler si integra anche con Frida per fornire tracciamento e manipolazione dei metodi. In precedenza era pubblicato con il nome di Tickler.
AndroTickler richiede un host Linux e un dispositivo Android con root collegato alla sua porta USB. Lo strumento non installa nulla sul dispositivo Android, crea solo una directory Tickler su /sdcard. AndroTickler dipende da Android SDK per eseguire comandi sul dispositivo e copiare i dati dell'app nella directory TicklerWorkspace sull'host per ulteriori analisi. TicklerWorkspace è la directory di lavoro di AndroTickler e ogni app ha una sottodirectory separata in TicklerWorkspace che può contenere quanto segue (a seconda delle azioni dell'utente):
La directory libs e il file di configurazione Tickler.conf si trovano nella stessa directory del file jar. Il file di configurazione imposta la posizione della directory TicklerDir sull'host e Tickler su /sdcard del dispositivo Android. Se il file di configurazione non esiste o queste 2 directory non sono impostate, verranno utilizzati i valori predefiniti (Tickler_workspace nella directory corrente e /sdcard/Tickler rispettivamente). La directory Tickler_lib contiene alcune librerie Java e strumenti esterni utilizzati da AndroTickler, come apktool e dex2jar.
AndroTickler dipende fortemente dai seguenti strumenti, quindi devono essere presenti sulla tua macchina prima di usarlo:
Altri strumenti sono richiesti per alcune funzionalità, ma AndroTickler può comunque funzionare senza di essi:
Compilare lo strumento dal codice
gradle build
Spostare AndroTickler.jar nella stessa directory della directory Tickler_lib e del file Tickler.conf (creato automaticamente in build/libs)
Impostare dex2jar come eseguibile (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh e libs/notJars//dex2jar-2.1/d2j_invoke.sh)
Collegare il dispositivo Android con l'applicazione da testare installata
Nota: Se la compilazione del codice sorgente fallisce, puoi scaricare l'ultima release compilata dalla scheda releases
La versione corrente fa quanto segue:
java -jar AndroTickler.jar -h
Elenca le app installate sul dispositivo:
java -jar AndroTickler.jar -pkgs
Cerca un'app (pacchetto) installata sul dispositivo il cui nome del pacchetto contiene la chiave di ricerca
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <pacchetto> [altre opzioni]
Qualsiasi comando con l'opzione -pkg (usata o meno con una delle seguenti opzioni) esegue le seguenti azioni se non sono già state eseguite:
java -jar AndroTickler.jar -pkg <pacchetto> -info
Restituisce le seguenti informazioni:
java -jar AndroTickler.jar -pkg <pacchetto> -squeeze [short | <codeLocation> ]
Recupera quanto segue dal codice Java decompilato dell'app:
Come prevedibile, il suo output è solitamente enorme, quindi si consiglia di reindirizzare l'output del comando in un file.
short Squeeza solo il codice decompilato che appartiene allo sviluppatore. Ad esempio, se un'app ha un nome pacchetto com.notEnaf.myapp, allora squeeze short squeeze solo il codice nella directory com/notEnaf.
Squeeza il codice solo nella directory codeLocation. Utile per limitare la ricerca o per squeezeare il codice sorgente se disponibile.
java -jar AndroTickler.jar -pkg <pacchetto> -l [-exp] [-v]
Elenca tutti i componenti dell'app
-exp Mostra solo i componenti esportati
-v Fornisce informazioni più dettagliate per ogni componente:
java -jar AndroTickler.jar -pkg <pacchetto> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <pacchetto> -db [|e|l|d] [nu]
Per impostazione predefinita, tutti i comandi -db aggiornano la directory di archiviazione dati dell'app sull'host prima di eseguire il controllo.
nessun attributo O e Verifica se i database dell'app sono crittografati. È l'azione predefinita se non viene fornita alcuna opzione dopo il flag -db. l Elenca tutti i database dell'app. I database crittografati potrebbero non essere rilevati. d Esegue un dump sqlite di uno qualsiasi dei database non crittografati. nu noUpdate: esegue una qualsiasi delle opzioni sopra senza aggiornare la directory dati dell'app sull'host.
java -jar AndroTickler.jar -pkg <pacchetto> -diff [d|detailed]
Copia la directory di archiviazione dati dell'app (in DataDirOld) quindi chiede all'utente di eseguire l'azione desiderata e di premere Invio quando ha finito. Quindi copia di nuovo la directory di archiviazione dati (in DataDir) ed esegue un diff tra di esse per mostrare quali file sono stati aggiunti, eliminati o modificati.
d|detailed Fa la stessa cosa del normale comando -diff, inoltre mostra esattamente cosa è cambiato nei file di testo e nei database non crittografati.
java -jar AndroTickler.jar -pkg <pacchetto> -sc <chiave> [<posizionePersonalizzata>]
Cerca la chiave nelle seguenti posizioni:
La ricerca non distingue tra maiuscole e minuscole.
Sostituisce la posizione del codice Java decompilato con la posizione personalizzata.
java -jar AndroTickler.jar -pkg <pacchetto> -sd <chiave>
Cerca la chiave nella directory di archiviazione dati dell'app
Attiva i componenti dell'app, con tutte le possibili combinazioni di intent. Ad esempio, se un activity ha un intent-filter con 2 possibili azioni e 3 schemi URI di dati, AndroTickler attiverà questa activity con tutte le possibili combinazioni di questo intent. Inoltre, AndroTickler cattura gli intent extras menzionati nella classe Java corrispondente al componente, assegna loro valori fittizi e li aggiunge alle possibili combinazioni di intent. Sono supportati solo extras di tipo boolean, stringa, int e float.
Se viene utilizzata l'opzione -exp, i componenti verranno attivati senza privilegi di root o permessi speciali. In caso contrario, i componenti verranno attivati con privilegi di root. Questo aiuta a testare l'app in 2 scenari diversi: contro attaccanti con privilegi normali o con privilegi elevati.
Prima di attivare i componenti, AndroTickler stampa tutti i comandi da eseguire. Quindi per ogni comando, attiva il componente, stampa il comando e attende l'utente. Questo dà all'utente abbastanza tempo per eseguire eventuali controlli aggiuntivi dopo l'esecuzione del comando. Prima che l'utente passi al comando successivo, gli viene data la possibilità di acquisire uno screenshot del dispositivo per la documentazione del PoC.
java -jar AndroTickler.jar -pkg <pacchetto> -t [-all | -exp] [target] [-log]
target come spiegato con il comando list, può essere:
se nessun valore, allora il target è tutto quanto sopra
[-comp] <nome_componente> Specifica un solo componente. Puoi anche usare <nome_componente> direttamente senza il flag -comp. -exp AndroTickler utilizza privilegi normali per attivare solo i target esportati. -all Opzione predefinita. AndroTickler utilizza privilegi di root per attivare i target esportati -log Cattura tutti i messaggi logcat generati durante la sessione di attivazione. Il file di log viene salvato nella sottodirectory logs.
Frida deve essere installato sul tuo host. Inoltre, la posizione del server Frida sul dispositivo Android deve essere aggiunta al file Tickler.conf nella voce Frida_server_path
java -jar AndroTickler.jar -pkg <pacchetto> -frida vals <NomeClasse> <NomeMetodo> <NumeroArgomenti> [-reuse]
Mostra gli argomenti e il valore di ritorno di questo metodo (solo tipi di dati primitivi e String)
reuse In caso di opzioni vals e set, Frida crea/aggiorna uno script Frida di quella funzionalità. Puoi modificare lo script creato come desideri, quindi se vuoi eseguirlo tramite AndroTickler, usa l'opzione -reuse in modo che non venga sovrascritto.
java -jar AndroTickler.jar -pkg <pacchetto> -frida set <NomeClasse> <NomeMetodo> <NumeroArgomenti> <NumeroArgomentoDaModificare> <nuovoValore>[-reuse]
Imposta l'argomento numero NumeroArgomentoDaModificare su nuovoValore (solo tipi di dati primitivi e String). NumeroArgomentoDaModificare parte da 0: Primo argomento --> NumeroArgomentoDaModificare = 0, ...ecc Per modificare il valore di ritorno --> impostare NumeroArgomentoDaModificare su ret
java -jar AndroTickler.jar -pkg <pacchetto> -frida script <percorsoScript>
Esegue uno script Frida JS situato in percorsoScript sul tuo host
Enumera le classi caricate:
java -jar AndroTickler.jar -pkg <pacchetto> -frida enum
java -jar AndroTickler.jar -pkg <pacchetto> -dbg
Crea una versione debuggable dell'app, che può essere installata sul dispositivo e sottoposta a debug utilizzando qualsiasi strumento esterno. AndroTickler include un keystore per firmare l'apk debuggable, ma richiede lo strumento jarsigner sull'host.
java -jar AndroTickler.jar -pkg <pacchetto> -apk <directoryDecompilata>
Crea un file apk da una directory, lo firma e lo installa.
java -jar AndroTickler.jar [-pkg <pacchetto>] [-bg|--bgSnapshots]
Copia le istantanee di sfondo catturate dal dispositivo (funziona con e senza l'opzione -pkg) nella sottodirectory bgSnapshots.
Copia la directory di archiviazione dati:
java -jar AndroTickler.jar -pkg <pacchetto> -dataDir [dest]
Copia la directory di archiviazione dati in DataDir dest Nome opzionale della directory di destinazione, che verrà comunque posizionata nella sottodirectory transfers.
Copia qualsiasi file / directory:
java -jar AndroTickler.jar -pkg <pacchetto> -cp2host <percorso_sorgente> [dest]
Copia file / directory dal dispositivo Android.
Se l'opzione dest non viene fornita, il nome della directory sarà il timestamp della transazione.
java -jar AndroTickler.jar [-pkg <pacchetto>] -screen
Per le opzioni che non richiedono l'opzione -pkg, i loro dati verranno salvati in Tickler_Dir/NoPackage
java -jar AndroTickler.jar -pkg <pacchetto> -t -act -exp
Attiva le activity esportate
java -jar AndroTickler.jar -pkg <pacchetto> -t -prov -log
Interroga tutti i content provider e salva i messaggi logcat fino all'arresto dello strumento
java -jar AndroTickler.jar -pkg <pacchetto> -t <nome_componente>
Attiva il componente, il tipo di attivazione dipende dal tipo di componente
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
Si aggancia al metodo "myMethod" che ha 2 argomenti e cambia il valore del primo argomento (args[0]) in "newValue"
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
Si aggancia al metodo "myMethod" che ha 2 argomenti e cambia il valore di ritorno in boolean false