Extraer base de datos de SQLite en Android sin root

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.

1 - Ver lista de dispositivos

1 – Ver lista de dispositivos

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:

2 - Iniciar una shell para interactuar con base de datos SQLite

2 – Iniciar una shell para interactuar con base de datos SQLite

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

3 - Ejecutar run-as para cambiar a paquete seleccionado

3 – Ejecutar run-as para cambiar a paquete seleccionado

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

4 - Listar bases de datos

4 – Listar bases de datos

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

5 - Copiar base de datos al almacenamiento externo

5 – Copiar base de datos al almacenamiento externo

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.

6 - Copiar base de datos de dispositivo a PC con adb pull

6 – Copiar base de datos de dispositivo a PC con adb pull

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:

7 - Explorar base de datos extraída desde Android

7 – Explorar base de datos extraída desde 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.