Android

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

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

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

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

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

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

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

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.