Volver |

Android

Introducción

Apktool es una herramienta para realizar ingeniería inversa de un archivo apk.

Un archivo apk es un archivo Zip. Lo podés comprobar con:

file archivo.apk

O sea, que uno puede descomprimir el apk, sin embargo, al usar apktool y desempaquetar la apk, la aplicación nos queda para un mejor análisis.

 

Sitio oficial: https://ibotpeaches.github.io/Apktool/

Instalación de apktool a través de Snap: https://snapcraft.io/apktool

Desempaquetar apk y ejecutar en modo debug un apk

Desempaquetar un apk

Para desempaquetar un apk se debe hacer:

apktool d base.apk

Esto crea un nuevo directorio donde adentro están los directorios de: assets, smali, res, lib, entre otros.

Ejecutar en modo debug

En el archivo AndroidManifest.xml agregar android:debuggable="true" en el elemento application y luego ejecutar:

apktool b directorio_desempaquetado

 

Flashboot

El SDK de Android tiene una herramienta llamada fastboot, la cual permite flashear archivos.

  • Si quieres comprobar que tu móvil está conectado: fastboot devices

  • Si quieres flashear una ROM: fastboot flash (nombre de la rom).zip

  • Si quieres flashear un recovery: fastboot flash recovery recovery.img

  • Si quieres flashear un kernel: fastboot flash boot boot.img

  • Si quieres arrancar en recovery: fastboot boot recovery.img

  • Si quieres desbloquear el bootloader: fastboot oem unlock

  • Si quieres bloquear el bootloader: fastboot oem lock

 

Referencas:

https://andro4all.com/2016/03/como-flashear-fastboot-android-guia-facil

https://developer.android.com/studio

Firmar una apk

# Genero keystore

keytool -genkey -v -keystore labsis.keystore -alias labsis -keyalg RSA -keysize 2048 -validity 1000000

# Firmo apk

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore labsis.keystore ../base/dist/base.apk labsis

# Instalo apk

adb install signed.apk

 

Aplicaciones híbridas

Algunas aplicaciones pueden ser desarrolladas de forma híbrida, por ejemplo, usando un framework como cordova (https://cordova.apache.org/). Para saber si una apk fue desarrollada con cordova se puede buscar en su directorio assets y, por lo general, debería tener un directorio www y adentro un archivo cordova.js.

Más recursos

Token de Firebase

Para enviar notificaciones PUSH por Firebase se debe hacer una petición POST a https://fcm.googleapis.com/fcm/send con los siguientes datos:

{
    "to": <TOKEN_FIREBASE>,
    "data": {
        "data1": "Test1",
        "data2": "Test2"
    }
}

El TOKEN_FIREBASE está asociado a cada aplicación, el cual dura hasta que se eliminan los datos de la misma.

En el header de la request se necesita agregar:

"Authorization": "key=<KEY_APLICACIÓN_FIREBASE>",
"Content-Type": "application/json"

 

Respuesta

Si el token no está registrado, entonces retorna:

{
    "multicast_id": 6497840834628822956,
    "success": 0,
    "failure": 1,
    "canonical_ids": 0,
    "results": [
        {
            "error": "NotRegistered"
        }
    ]
}

Si la notificación fue exitosa, entonces retorna:

{
    "multicast_id": 2659353913681171562,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [
        {
            "message_id": "0:1629747722269041%4bbb4e5df9fd7ecd"
        }
    ]
}

Si el token es inválido, entonces retorna:

{
    "multicast_id": 821092968613207609,
    "success": 0,
    "failure": 1,
    "canonical_ids": 0,
    "results": [
        {
            "error": "InvalidRegistration"
        }
    ]
}

 

Ejemplo de token firebase

fhT9dpjlT0ql41E1nqrxsV:APA91bHpiFgTFHuE0xLOvLakPH2iYwNgBLMSEJ7oKivu6hMj_sDQXBDiguKnvW5IkDkEgfAwmQSRmzB6OCcOtwKc7IaaQOj1UmQmV6oY07WF-Q_CNeLuI2C6p_FDbd7VhbIVXnUwlbTn

 

Shared Preferences

Las SharedPreferences es un Storage que permite guardar datos clave-valor. Éstas están restringidas a que sólo la app que las escribió pueda leerlas (es decir, otra app no podría hacerlo a menos que el teléfono esté rooteado).

 

Leer las SharedPreferences

Se las puede leer usando adb shell, por ejemplo:

./adb shell "run-as com.gochip.odiva cat /data/data/com.gochip.odiva/shared_prefs/com.gochip.odiva_preferences.xml" > ~/SHARED_PREF_PROTECTED.xml

En este caso, se está asumiendo que com.gochip.odiva es el nombre de paquete de la app.

 

Referencias:

App vulnerable para practicar: https://github.com/Gochip/odiva.

SQLite

Consultar los nombres de las bases de datos SQLite:

./adb exec-out run-as com.gochip.odiva ls -R /data/data/com.gochip.odiva/databases

En este caso, se está asumiendo que com.gochip.odiva es el nombre de paquete de la app.

Herramientas del SDK de Android

El SDK de Android cuenta con varias herramientas útiles. Entre ellas podemos encontrar:

emulator

Consultar lista de máquinas para emular:

emulator -list-avds

Emular una máquina llamada Nexus_S_API_25:

./emulator -avd Nexus_S_API_25

 

En este artículo participaron: