
Kit de ferramentas de teste de penetração e auditoria para aplicativos Android.
Uma ferramenta Java que ajuda a realizar testes de penetração em aplicativos Android de forma mais rápida, fácil e eficiente. O AndroTickler oferece diversos recursos de coleta de informações, verificações estáticas e dinâmicas que cobrem a maioria dos aspectos dos testes de penetração em aplicativos Android. Também oferece vários recursos que os testadores de penetração precisam durante seus testes. O AndroTickler também se integra ao Frida para fornecer rastreamento e manipulação de métodos. Anteriormente foi publicado sob o nome de Tickler.
O AndroTickler requer um host Linux e um dispositivo Android rooteado conectado à sua porta USB. A ferramenta não instala nada no dispositivo Android, apenas cria um diretório Tickler no /sdcard. O AndroTickler depende do SDK do Android para executar comandos no dispositivo e copiar os dados do aplicativo para o diretório TicklerWorkspace no host para análise posterior. TicklerWorkspace é o diretório de trabalho do AndroTickler e cada aplicativo tem um subdiretório separado em TicklerWorkspace que pode conter o seguinte (dependendo das ações do usuário):
O diretório libs e o arquivo de configuração Tickler.conf existem no mesmo diretório do arquivo jar. O arquivo de configuração define a localização do diretório TicklerDir no host e Tickler no /sdcard do dispositivo Android. Se o arquivo de configuração não existir ou esses 2 diretórios não estiverem definidos, os valores padrão serão usados (Tickler_workspace no diretório atual e /sdcard/Tickler respectivamente). O diretório Tickler_lib contém algumas bibliotecas Java e ferramentas externas usadas pelo AndroTickler, como apktool e dex2jar.
O AndroTickler depende fortemente das seguintes ferramentas, portanto elas devem existir em sua máquina antes de usá-lo:
Outras ferramentas são necessárias para alguns recursos, mas o AndroTickler ainda pode funcionar sem elas:
Construir a ferramenta a partir do código
gradle build
Mover AndroTickler.jar para o mesmo diretório do diretório Tickler_lib e do arquivo Tickler.conf (criado automaticamente em build/libs)
Tornar dex2jar executável (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh e libs/notJars//dex2jar-2.1/d2j_invoke.sh)
Conectar seu dispositivo Android com o aplicativo a ser testado instalado
Nota: Se a construção do código-fonte falhar, você pode baixar a versão compilada mais recente na aba releases
A versão atual faz o seguinte:
java -jar AndroTickler.jar -h
Lista aplicativos instalados no dispositivo:
java -jar AndroTickler.jar -pkgs
Pesquisa por um aplicativo (pacote) instalado no dispositivo, cujo nome do pacote contenha a chave de pesquisa
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
Qualquer comando com a opção -pkg (usado com qualquer uma das opções a seguir ou não) realiza as seguintes ações se não tiverem sido feitas antes:
java -jar AndroTickler.jar -pkg <package> -info
Retorna as seguintes informações:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
Obtém o seguinte do código Java descompilado do aplicativo:
Como esperado, sua saída geralmente é enorme, então é recomendável redirecionar a saída do comando para um arquivo
short Faz o squeeze apenas do código descompilado que pertence ao desenvolvedor. Por exemplo, se um aplicativo tem um nome de pacote com.notEnaf.myapp, então squeeze short faz o squeeze apenas do código no diretório com/notEnaf.
Faz o squeeze do código apenas no diretório codeLocation. Útil para limitar sua pesquisa ou fazer o squeeze do código-fonte se disponível.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
Lista todos os componentes do aplicativo
-exp Mostra apenas componentes exportados
-v Fornece informações mais detalhadas para cada componente:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
Por padrão, todos os comandos -db atualizam o diretório de armazenamento de dados do aplicativo no host antes de executar a verificação.
nenhum atributo OU e Testa se os bancos de dados do aplicativo estão criptografados. É a ação padrão caso nenhuma opção seja fornecida após a flag -db. l Lista todos os bancos de dados do aplicativo. Bancos de dados criptografados podem não ser detectados. d Faz um dump sqlite de qualquer um dos bancos de dados não criptografados. nu noUpdate: executa qualquer uma das opções acima sem atualizar o diretório de dados do aplicativo no host.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
Copia o diretório de armazenamento de dados do aplicativo (para DataDirOld) e então pede ao usuário para realizar a ação desejada e pressionar Enter quando terminar. Em seguida, copia o diretório de armazenamento de dados novamente (para DataDir) e executa diff entre eles para mostrar quais arquivos foram adicionados, excluídos ou modificados.
d|detailed Faz o mesmo que o comando -diff normal, também mostra exatamente o que mudou em arquivos de texto e bancos de dados não criptografados.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
Pesquisa por key nos seguintes locais:
A pesquisa não diferencia maiúsculas de minúsculas.
Substitui a localização do código Java descompilado pela localização personalizada.
java -jar AndroTickler.jar -pkg <package> -sd <key>
Pesquisa no diretório de armazenamento de dados do aplicativo pela chave fornecida
Dispara componentes do aplicativo, por todas as combinações possíveis de intents. Por exemplo, se uma activity tem um intent-filter com 2 ações possíveis e 3 esquemas de URI de dados, então o AndroTickler irá disparar essa activity com todas as combinações possíveis dessa intent. Além disso, o AndroTickler captura os extras de intent mencionados na classe Java correspondente ao componente, atribui a eles valores fictícios e os adiciona às combinações de intent possíveis. Apenas extras dos tipos boolean, string, int e float são suportados.
Se a opção -exp for usada, os componentes serão disparados sem privilégios de root ou permissões especiais. Caso contrário, os componentes serão disparados com privilégios de root. Isso ajuda a testar o aplicativo em 2 cenários diferentes: contra atacantes com privilégios normais ou com altos privilégios.
Antes de disparar os componentes, o AndroTickler imprime todos os comandos a serem executados. Em seguida, para cada comando, ele dispara o componente, imprime o comando e espera pelo usuário. Isso dá ao usuário tempo suficiente para fazer quaisquer verificações extras após a execução do comando. Antes de o usuário passar para o próximo comando, ele tem a opção de capturar uma captura de tela do dispositivo para documentação de PoC.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target como explicado com o comando list, pode ser:
se nenhum valor, então o target é todos os acima
[-comp] <component_name> Especifica apenas um componente. Você também pode usar <component_name> diretamente sem a flag -comp. -exp AndroTickler usa privilégios normais para disparar apenas os targets exportados. -all A opção padrão. AndroTickler usa privilégios de root para disparar os targets exportados. -log Captura todas as mensagens de logcat geradas durante a sessão de disparo. O arquivo de log é salvo no subdiretório logs.
O Frida deve estar instalado em sua máquina host. Além disso, a localização do servidor Frida no dispositivo Android deve ser adicionada ao arquivo Tickler.conf na entrada Frida_server_path
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
Exibe argumentos e valor de retorno deste método (apenas tipos de dados primitivos e String)
reuse No caso das opções vals e set, o Frida cria/atualiza um script Frida dessa funcionalidade. Você pode modificar o script criado como desejar, e se quiser executá-lo através do AndroTickler, use a opção -reuse para que ele não seja sobrescrito.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
Define o argumento número NumberOfArgToModify para newValue (apenas tipos de dados primitivos e String). NumberOfArgToModify começa com 0: Primeiro argumento --> NumberOfArgToModify = 0, ...etc Para modificar o valor de retorno --> defina NumberOfArgToModify para ret
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
Executa um script JS do Frida localizado em scriptPath em seu host
Enumerar classes carregadas:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
Cria uma versão depurável do aplicativo, que pode ser instalada no dispositivo e depurada usando qualquer ferramenta externa. O AndroTickler vem com um keystore para assinar o apk depurável, mas requer a ferramenta jarsigner no host.
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
Constrói um arquivo apk a partir de um diretório, assina e o instala.
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
Copia as capturas de tela de fundo tiradas pelo dispositivo (funciona com e sem a opção -pkg) para o subdiretório bgSnapshots.
Copiar diretório de armazenamento de dados:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
Copia o diretório de armazenamento de dados para DataDir dest Nome opcional do diretório de destino, que estará localizado no subdiretório transfers.
Copiar qualquer arquivo / diretório:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Copia arquivos / diretórios do dispositivo Android.
Se a opção dest não for fornecida, o nome do diretório será o timestamp da transação.
java -jar AndroTickler.jar [-pkg <package>] -screen
Para as opções que não requerem a opção -pkg, seus dados serão salvos em Tickler_Dir/NoPackage
java -jar AndroTickler.jar -pkg <package> -t -act -exp
Dispara activities exportadas
java -jar AndroTickler.jar -pkg <package> -t -prov -log
Consulta todos os content providers e salva mensagens de logcat até a ferramenta parar a execução
java -jar AndroTickler.jar -pkg <package> -t <component_name>
Dispara o componente, o tipo de disparo depende do tipo do componente
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
Hooked no método "myMethod" que tem 2 argumentos e altera o valor do primeiro argumento (args[0]) para "newValue"
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
Hooked no método "myMethod" que tem 2 argumentos e altera o valor de retorno para boolean false