Pruebas de penetracion a aplicaciones moviles — comandos

EthicalHCOP
5 min readMar 23, 2023

Pasar archivos de aab a apk.

Los archivos AAB (Android App Bundle) es el formato de archivo que exige google play para cargar la aplicación a la tienda en lugar del formato APK que todos conocemos.

Comandos:

- java -jar bundletool.jar build-apks — bundle=aplicacion.aab — output aplicacion.apks — mode=universal
- mv aplicacion.apks aplicacion.zip
- unzip aplicacion.zip
- java -jar uber-apk-signer-1.2.1.jar -a universal.apk

Interacción con el ADB

El adb (Android Debug Bridge) es una herramienta de terminal de comandos para equipos de computo, la cual permite a un usuario interactuar con el dispositivo android de forma remota y controlar las funciones de debug del mismo.
A continuación se mostraran algunos comandos útiles sobre la herramienta:

Comandos:

Mostrar dispositivos conectados al pc:
- adb devices

Instalar apk en un dispositivo especifico:
- adb -s {dispo_id} install aplicacion.apk

Buscar el nombre del paquete dentro del dispositivo:
- adb -s {dispo_id} shell pm list packages | grep {ref}

Localizar la ruta logica del paquete dentro del dispositivo:
- adb -s {dispo_id} shell pm path co.com.aplicacion

Descargar archivo dentro del dispositivo:
- adb -s {dispo_id} pull /ruta/archivo/android /ruta/local

Cargar Archivo al dispositivo android
- adb -s {dispo_id} push /ruta/archivo/local /ruta/android

Ejecutar una actividad de la aplicación:
- adb -s {dispo_id} shell am start -n co.com.aplicacion/app.modules.login.login.view.LoginActivity

Apagar servidor adb:
- adb kill-server

Ejecutar la terminal de comandos del dispositivo:
- adb -s {dispo_id} shell

Una vez se accede a la terminal del dispositivo, al estar basado el sistema en UNIX, podemos ejecutar comandos conocidos en linux en esta terminal

Elevar los privilegios del usuario
- su

Buscar directorios y archivos relacionados al paquete android
- find / -name “*co.com.aplicacion*” 2>/dev/null

Implementar un Hombre en Medio para capturar el trafico SSL

A este proceso se le conoce como “SSL Unpinning”, el proceso consta de modificar la aplicación, para que acepte certificados auto-firmados por el usuario y los implemente en la navegación de la aplicación. Permitiendo así que un usuario pueda configurar un proxy y visualizar en texto plano las peticiones HTTP.

La ejecución de este paso, depende en gran medida de la tecnología y configuraciones aplicadas a la apk, por lo que no es un proceso que funcione 100% en todas las aplicaciones móviles.
Las herramientas mas comunes para ejecutar estos procesos son:

Comandos:

- apk-mitm {apk}
- reflutter {apk}
- frida — codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida -f co.com.aplicacion — no-pause
- objection (android sslpinning disable — quiet)

Manipulación de la aplicación con Frida y Objection

Frida, es una herramienta de análisis dinámico, la cual le permite a un usuario manipular la ejecución de una aplicación móvil en tiempo real. A través de esta herramienta, es posible alterar el comportamiento de la aplicación a través de una manipulación directa de los valores de entrada y de salida sin alterar el código fuente de la aplicación.

Instalación de frida:
Para instalar frida, se siguen los siguientes pasos:

1- Tener instalado python 3
2- Ejecutar el comando pip en la terminal: pip install frida-tools
3- Verificar la instalacion con el comando: frida — version
NOTA: En los sistemas windows, es común que el paquete no sea reconocido en la terminal de comandos, por lo que toca buscar en donde quedo el archivo frida.exe y agregar la ruta a las variables del sistema.

Una vez se tenga instalado frida en el equipo de computo, se requiere instalar frida en el dispositivo móvil. Para esto, se hace uso de los archivos expuestos en el repositorio de github de frida, en donde para dispositivos android se descarga alguno de los siguientes archivos, dependiendo de la arquitectura de tu equipo móvil.

android-arm:
https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-arm.xz

android-arm64: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-arm64.xz

android-x86: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-x86.xz

android-x86_64: https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-x86_64.xz

“Para dispositivos IOS, frida es instalado desde la aplicación Cydia. Pero eso es tema para otro post.”

Para instalar y ejecutar frida en el dispositivo móvil, se debe de descomprimir el archivo .xz y mover su contenido a una ruta dentro del dispositivo. Este archivo puede ser descomprimido con winrar, 7zip, o desde la terminal de comandos con el comando:

sudo apt-get install xz-utils
unxz file.xz

Y para colocar el archivo de frida dentro del dispositivo móvil, hacer uso del ADB y del comando push para cargar el archivo al dispositivo.

adb -s {dispo_id} push archivo-frida /ruta/android

Finalmente, acceder al dispositivo móvil a través de la terminal del adb y asignar permisos de ejecución para posteriormente ejecutar el script de frida.

adb -s {dispo_id} shell
su
cd /ruta/archivo-frida
chmod +x archivo-frida
./ archivo-frida &

Una vez ejecutado frida en el dispositivo móvil ya es posible a través de la terminal de comandos del equipo de computo, ejecutar comandos directamente sobre el dispositivo para manipular una aplicación:

Comandos:

Listar dispositivos conectados al equipo de computo.
- frida-ls-devices

Ejecutar script desde el repositorio codeshare
- frida — codeshare repo/script -f co.com.aplicacion — no-pause

Ejecutar script desde un archivo local
- frida -U — no-pause -l script.js -f co.com.aplicacion

listar procesos
- frida-ps -Uia

Sin embargo, para poder aprovechar todo el potencial que nos ofrece frida, podemos hacer uso de la herramienta objection.
Objection es una caja de herramientas impulsada por frida, para realizar una evaluación mas profunda sobre las aplicaciones móviles y mas amigable con el usuario final.

Para instalar Objection, solo hace falta ejecutar el comando de instalación pip en la terminal de comandos:

pip3 install objection

Una vez instalado podemos hacer uso de esta herramienta y aprovechar el potencial de frida de mejor manera.

Comandos:

Iniciar Objection
- objection -g co.com.aplicacion explore

Listar actividades de la aplicación
- android hooking list activities

Buscar clases del paquete
- android hooking search classes co.com.aplicacion

Listar Clases del paquete
- android hooking list classes

Hacer debug clase la clase de un paquete
- android hooking watch class {clase} — dump-args — dump-return

Buscar métodos de una clase
- android hooking search methods co.com.aplicacion LoginActivity

Listar métodos de una clase y sus parámetros en Objection
- android hooking list class_methods co.com.aplicacion.app.modules.login.login.view.LoginActivity

Hacer debug de un método de una clase
- android hooking watch class_method co.com.aplicacion.app.modules.login.login.view.LoginActivity.login — dump-args — dump-return

Listar actividad actual en la aplicación
- android hooking get current_activity

Modificar valor de retorno de un método sobre una actividad especifica
- android hooking set return_value co.com.aplicacion.app.modules.login.login.view.LoginActivity.captcha true

Llamar una actividad directamente
- android intent co.com.aplicacion.app.modules.login.login.view.LoginActivity

Deshabilitar el SSLPinning de la aplicación
- android sslpinning disable — quiet

Deshabilitar la detección de configuraciones root en el dispositivo
- android root disable — quiet

En los dispositivos IOS, la ejecución de la herramienta objection varia un poco en cuanto a las acciones que puede ejecutar un atacante, sin embargo se pueden ejecutar acciones como

Comandos:

Listar bundles en el dispositivo
- ios bundles list_bundles

Explorar módulos de la memoria del dispositivo
memory list modules

Buscar clases de un ejecutable
- ios hooking search classes EXEC

Listar métodos de una clase
- ios hooking list class_methods {clase}

Buscar métodos que contengan una palabra especifica
- ios hooking search methods {palabra}

Hacer debug a todos los metodos de una clase
- ios hooking watch class {clase}

Hacer debug a un metodo en especifico
- ios hooking watch method “-[{nombre de la clase} {nombre del metodo}]” — dump-args — dump-return — dump-backtrace

Cambiar valor de retorno
- ios hooking set return_value “-[{nombre de la clase} {nombre del metodo}]” false

Como tip adicional, dejare los comandos que me fueron útiles para descargar el archivo .ipa de una aplicación en IOS, cuando esta sea descargada directamente desde la tienda de aplicaciones. Esto nos sera útil cuando se requiera hacer algún análisis estático sobre la aplicación.

ssh root@IP-IOS (Password alpine)
ls /var/containers/Bundle/Application/* | grep -B 2 -i ‘Nombre del paquete’
cd /var/containers/Bundle/Application/HASH-RUTA
mkdir payload
cp -r Aplicacion.app/ payload/
mkdir /var/root/IPA/
zip -r /var/root/IPA/app.ipa payload/

sftp root@IP-IOS
cd /var/root/IPA
get app.ipa

Espero les sirva.
Hasta la próxima.

--

--