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
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