
Kit de herramientas de pruebas de penetración y auditoría para aplicaciones Android.
Una herramienta Java que ayuda a realizar pentesting en aplicaciones Android de manera más rápida, fácil y eficiente. AndroTickler ofrece muchas funciones de recopilación de información, análisis estáticos y dinámicos que cubren la mayoría de los aspectos del pentesting de aplicaciones Android. También ofrece varias características que los pentesters necesitan durante sus pruebas. AndroTickler también se integra con Frida para proporcionar trazado y manipulación de métodos. Anteriormente se publicó bajo el nombre de Tickler.
AndroTickler requiere un host Linux y un dispositivo Android rooteado conectado a su puerto USB. La herramienta no instala nada en el dispositivo Android, solo crea un directorio Tickler en /sdcard. AndroTickler depende de Android SDK para ejecutar comandos en el dispositivo y copiar los datos de la aplicación al directorio TicklerWorkspace en el host para su posterior análisis. TicklerWorkspace es el directorio de trabajo de AndroTickler y cada aplicación tiene un subdirectorio separado en TicklerWorkspace que puede contener lo siguiente (dependiendo de las acciones del usuario):
El directorio libs y el archivo de configuración Tickler.conf existen en el mismo directorio que el archivo jar. El archivo de configuración establece la ubicación del directorio TicklerDir en el host y Tickler en /sdcard del dispositivo Android. Si el archivo de configuración no existe o estos 2 directorios no están configurados, se usarán valores predeterminados (Tickler_workspace en el directorio actual y /sdcard/Tickler respectivamente). El directorio Tickler_lib contiene algunas librerías Java y herramientas externas utilizadas por AndroTickler, como apktool y dex2jar.
AndroTickler depende en gran medida de las siguientes herramientas, por lo que deben existir en su máquina antes de usarlo:
Otras herramientas son necesarias para algunas funciones, pero AndroTickler aún puede ejecutarse sin ellas:
Compilar la herramienta desde el código
gradle build
Mover AndroTickler.jar al mismo directorio que el directorio Tickler_lib y el archivo Tickler.conf (creado automáticamente en build/libs)
Hacer ejecutable dex2jar (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh y libs/notJars//dex2jar-2.1/d2j_invoke.sh)
Conecte su dispositivo Android con la aplicación a probar instalada
Nota: Si la compilación del código fuente falla, puede descargar la última versión compilada desde la pestaña releases
La versión actual hace lo siguiente:
java -jar AndroTickler.jar -h
Listar aplicaciones instaladas en el dispositivo:
java -jar AndroTickler.jar -pkgs
Busca una aplicación (paquete) instalada en el dispositivo cuyo nombre de paquete contenga searchKey
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
Cualquier comando con la opción -pkg (ya sea usado con alguna de las siguientes opciones o no), realiza las siguientes acciones si no se han hecho antes:
java -jar AndroTickler.jar -pkg <package> -info
Devuelve la siguiente información:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
Obtiene lo siguiente del código Java descompilado de la aplicación:
Como era de esperar, su salida suele ser enorme, por lo que se recomienda redirigir la salida del comando a un archivo
short Extrae solo el código descompilado que pertenece al desarrollador. Por ejemplo, si una aplicación tiene un nombre de paquete com.notEnaf.myapp, entonces squeeze short extrae solo el código en el directorio com/notEnaf.
Extrae el código solo en el directorio codeLocation. Útil para limitar la búsqueda o extraer el código fuente si está disponible.
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
Lista todos los componentes de la aplicación
-exp Muestra solo los componentes exportados
-v Proporciona información más detallada 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 defecto, todos los comandos -db actualizan el directorio de almacenamiento de datos de la aplicación en el host antes de ejecutar la verificación.
sin atributo O e Comprueba si las bases de datos de la aplicación están encriptadas. Es la acción predeterminada si no se da ninguna opción después de la bandera -db. l Lista todas las bases de datos de la aplicación. Es posible que las bases de datos encriptadas no se detecten. d Toma un volcado sqlite de cualquier base de datos no encriptada. nu sin actualizar: ejecuta cualquiera de las opciones anteriores sin actualizar el directorio de datos de la aplicación en el host.
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
Copia el directorio de almacenamiento de datos de la aplicación (a DataDirOld) y luego pide al usuario que realice la acción que desee y presione Enter cuando haya terminado. Luego copia nuevamente el directorio de almacenamiento de datos (a DataDir) y ejecuta diff entre ellos para mostrar qué archivos se agregaron, eliminaron o modificaron.
d|detailed Hace lo mismo que el comando -diff normal, también muestra exactamente qué cambió en archivos de texto y bases de datos no encriptadas.
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
Busca la clave en las siguientes ubicaciones:
La búsqueda no distingue entre mayúsculas y minúsculas.
Reemplaza la ubicación del código Java descompilado con la ubicación personalizada.
java -jar AndroTickler.jar -pkg <package> -sd <key>
Busca en el directorio de almacenamiento de datos de la aplicación la clave dada
Desencadena componentes de la aplicación mediante todas las combinaciones posibles de intenciones. Por ejemplo, si una actividad tiene un intent-filter de 2 acciones posibles y 3 esquemas URI de datos, AndroTickler desencadenará esta actividad con todas las combinaciones posibles de esta intención. Además, AndroTickler captura los extras de intención mencionados en la clase Java correspondiente al componente, les asigna valores ficticios y los agrega a las combinaciones de intención posibles. Solo se admiten extras de tipo boolean, string, int y float.
Si se usa la opción -exp, los componentes se desencadenarán sin privilegios de root ni permisos especiales. De lo contrario, los componentes se desencadenarán con privilegios de root. Esto ayuda a probar la aplicación en 2 escenarios diferentes: contra atacantes con privilegios normales o con altos privilegios.
Antes de desencadenar componentes, AndroTickler imprime todos los comandos a ejecutar. Luego, para cada comando, desencadena el componente, imprime el comando y espera al usuario. Esto le da al usuario suficiente tiempo para realizar verificaciones adicionales después de la ejecución del comando. Antes de que el usuario pase al siguiente comando, se le da la opción de capturar una captura de pantalla del dispositivo para la documentación de PoC.
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target como se explicó con el comando list, puede ser:
si no se da ningún valor, el objetivo son todos los anteriores
[-comp] <nombre_del_componente> Especifica un solo componente. También puede usar <nombre_del_componente> directamente sin la bandera -comp. -exp AndroTickler usa privilegios normales para desencadenar solo los objetivos exportados. -all La opción predeterminada. AndroTickler usa privilegios de root para desencadenar los objetivos exportados. -log Captura todos los mensajes de logcat generados durante la sesión de desencadenamiento. El archivo de registro se guarda en el subdirectorio logs.
Frida debe estar instalado en su máquina host. Además, la ubicación del servidor Frida en el dispositivo Android debe agregarse al archivo Tickler.conf en la entrada Frida_server_path
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
Muestra los argumentos y el valor de retorno de este método (solo tipos de datos primitivos y String)
reuse En el caso de las opciones vals y set, Frida crea/actualiza un script de Frida de esa funcionalidad. Puede modificar el script creado como desee; luego, si desea ejecutarlo a través de AndroTickler, use la opción -reuse para que no se sobrescriba.
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
Establece el número de argumento NumberOfArgToModify a newValue (solo tipos de datos primitivos y String). NumberOfArgToModify comienza con 0: Primer argumento --> NumberOfArgToModify = 0, etc. Para modificar el valor de retorno --> establezca NumberOfArgToModify a ret
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
Ejecuta un script JS de Frida ubicado en scriptPath en su host
Enumerar clases cargadas:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
Crea una versión depurable de la aplicación, que se puede instalar en el dispositivo y depurar con cualquier herramienta externa. AndroTickler incluye un almacén de claves para firmar el apk depurable, pero requiere la herramienta jarsigner en el host.
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
Construye un archivo apk a partir de un directorio, lo firma y lo instala.
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
Copia las instantáneas de fondo tomadas por el dispositivo (funciona con y sin la opción -pkg) al subdirectorio bgSnapshots.
Copiar directorio de almacenamiento de datos:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
Copia el directorio de almacenamiento de datos a DataDir dest Nombre opcional del directorio de destino, que se ubicará de todos modos en el subdirectorio transfers.
Copiar cualquier archivo/directorio:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Copia archivos/directorios desde los dispositivos Android.
Si no se proporciona la opción dest, el nombre del directorio será la marca de tiempo de la transacción.
java -jar AndroTickler.jar [-pkg <package>] -screen
Para las opciones que no requieren la opción -pkg, sus datos se guardarán en Tickler_Dir/NoPackage
java -jar AndroTickler.jar -pkg <package> -t -act -exp
Desencadena actividades exportadas
java -jar AndroTickler.jar -pkg <package> -t -prov -log
Consulta todos los proveedores de contenido y guarda los mensajes de logcat hasta que la herramienta detenga la ejecución
java -jar AndroTickler.jar -pkg <package> -t <component_name>
Desencadena el componente, el tipo de desencadenamiento depende del tipo de componente
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
Se engancha al método "myMethod" que tiene 2 argumentos y cambia el valor del primer argumento (args[0]) a "newValue"
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
Se engancha al método "myMethod" que tiene 2 argumentos y cambia el valor de retorno a booleano false