Hoy vamos a ver cómo extraer una base de datos de SQLite de una aplicación de Android para copiarla a nuestra computadora y poder analizarla haciendo consultas; evitando pasar por la API de Java.
No vamos a necesitar root, simplemente tener el ejecutable de adb
que se instala cuando comenzamos a programar en Android.
Por favor mira este tutorial en donde se ve cómo agregar adb.exe a la variable PATH de Windows.
Requisitos
- Conocer el id de tu paquete
- Habilitar depuración USB
- Conectar dispositivo en modo desarrollo
- Comandos básicos de Linux (
ls
,cd
,cp
)
Paso 1: conectar dispositivo e iniciar shell
Conecta tu dispositivo por cable o a través del Wi-Fi como se ve en este post. Ahora es necesario conocer su nombre, para ello ejecuta:
adb devices
Eso dará una lista de dispositivos. Fíjate en el nombre del dispositivo.
Ahora ejecuta:
adb -s [NOMBRE DISPOSITIVO] shell
En mi caso:
adb -s 192.168.1.9:5555 shell
Nota: en mi caso aparece la IP porque lo conecté por Wi-Fi; en tu caso va a variar. Eso te llevará a una shell:
Paso 2: cambiar a paquete con run-as
En este momento ya estamos en nuestro dispositivo (I’m in, dijeran los juankers). Vamos a ejecutar:
run-as id.de.tu.paquete
Debido a que estoy probando la app de control de gastos el id es me.parzibyte.administrate así que:
run-as me.parzibyte.administrate
El comando cambiará el prompt.
Paso 3: copiar base de datos a almacenamiento externo
Como estamos en una terminal de Linux de Android vamos a entrar al directorio databases, si no lo encuentras ejecuta ls
. El punto es entrar al mismo con:
cd databases
Ahí verás todas las bases de datos que hayas creado. A mí me interesa la que se llama “administrate“.
La base de datos de SQLite es un archivo; por lo que basta con copiarlo. Para ello copiamos la base de datos al almacenamiento externo, en mi caso es /storage/emulated/0
así que:
cp administrate /storage/emulated/0/administrate_extraida
Fíjate que la estoy copiando con el nombre “administrate_extraida
“; esto no es estrictamente necesario pero es algo que recomiendo. Eso habrá copiado el archivo a nuestro almacenamiento externo en donde ya podemos tocar a la base de datos.
Paso 4: Copiar base de datos de Android a PC
Ahora falta copiar el archivo desde Android a nuestra computadora con Windows. Si quieres, hazlo como cuando copias un archivo normal; o puedes hacerlo con adb
. Para ello sal de la terminal con:
exit
exit
Es decir, escribe exit dos veces para salir completamente. Después ejecuta:
adb pull ruta_bd ruta_de_tu_pc
Como guardamos la base de datos en /storage/emulated/0 entonces la copiamos de ahí. el segundo argumento es el destino.
Yo haré esto:
adb pull /storage/emulated/0/administrate_extraida C:\Users\usuario\Desktop\administrate_extraida
Esperamos un momento y el archivo se copiará. Recuerda que el segundo argumento es la ruta de destino, puedes cambiarla.
Paso 5: explorar base de datos
Ahora puedes explorar tu base de datos con lo que tú quieras. Es muy probable que tengas el ejecutable de sqlite3 si seguiste mis tutoriales anteriores, pero si no, puedes descargar una herramienta para visualizar bases de datos de SQLite o usar un pequeño script de Python.
Así se ve la base de datos que he extraído de Android:
Conclusión
Un poco complejo, pero lo hemos logrado. Con esto podrías explorar cualquier base de datos de cualquier paquete; pues estás en modo desarrollador.
No veo que atente contra la seguridad de nadie, puesto que se debe habilitar la depuración. Además, la mayoría de apps importantes y enfocadas en la comunicación encriptan las bases de datos.
Por cierto, esto fue para Windows pero sería lo mismo para Linux, pues el ejecutable de adb es multiplataforma.
Excelente aporte!, muchas gracias por la explicación