Herramientas digitales básicas: aprendiendo a usar ADB a fondo – Parte 1


Ahora que Google está a punto de cerrar una de las pocas puertas que quedaban abiertas en su sistema operativo: la instalación de aplicaciones fuera de su tienda oficial, una decisión que, en un ecosistema que presume de ser abierto, resulta cuando menos contradictoria, os mostramos y enseñamos a usar ADB, una herramienta sencilla, básica y asequible para tareas de análisis en entornos legales con escasos recursos, pero que con un buen aprendizaje puede llegar a ser tan potente como software mucho más avanzado.

¿Por qué es indispensable en forense digital?

La razón central es que si todavía no dominamos herramientas más avanzadas o estamos carentes de recursos para posibilidades más avanzadas, ofrece el acceso privilegiado al sistema de archivos y procesos del dispositivo, lo cual nos permite:

Adquisición de evidencia — ADB permite extraer copias de bases de datos de aplicaciones (WhatsApp, Telegram, historial de llamadas), logs del sistema, ubicaciones GPS almacenadas y mucho más, sin necesidad de desbloquear el dispositivo visualmente.

Preservación de integridad — Puedes hacer una copia forense (imagen bit-a-bit) de particiones o directorios críticos antes de que la batería muera o el sospechoso tenga acceso.

Análisis en vivo — Mientras el dispositivo está encendido, puedes examinar procesos activos, conexiones de red abiertas, archivos en memoria temporal y el estado actual del sistema.

Bypass de bloqueos de pantalla — En versiones antiguas de Android o con permisos de root, ADB permite acceder al sistema aunque la pantalla esté bloqueada.

Extracción de apps y APKs — Para análisis de malware, puedes extraer directamente las aplicaciones instaladas.


A continuación veamos una tabla de comandos donde destacamos la última columna: Riesgo forense pues en contexto de investigación es muy relevante.

ComandoDescripciónRiesgo
Conexión y reconocimiento inicial
adb devicesLista los dispositivos conectados y su estadoLectura
adb shell getprop ro.build.version.releaseVersión de Android instaladaLectura
adb shell getprop ro.product.modelModelo exacto del dispositivoLectura
adb shell dumpsys batteryEstado de batería (relevante para establecer timestamps)Lectura
Extracción de datos
adb pull /sdcard/DCIM/Copia la galería completa al ordenadorLectura
adb pull /data/data/com.android.contacts/databases/Extrae la base de datos SQLite de contactosLectura
adb pull /data/data/com.whatsapp/databasesExtrae los mensajes y medios de WhatsAppLectura
adb backup -apk -all -f backup.abGenera un backup completo cifrado del dispositivoPrecaución
adb shell content query --uri content://call_log/callsConsulta el registro completo de llamadasLectura
Imagen de disco
adb shell dd if=/dev/block/mmcblk0p28 | dd of=imagen.imgCopia bit-a-bit de una partición del dispositivoLectura
Análisis de red y procesos en vivo
adb shell netstat -tulnpConexiones de red activas y puertos en escuchaLectura
adb shell ps -ALista todos los procesos en ejecuciónLectura
adb logcat -d > log_completo.txtVuelca todos los logs del sistema a un archivoLectura
Geolocalización e historial
adb shell dumpsys locationEstado completo del servicio de localizaciónLectura
adb shell dumpsys location | grep "Last Known"Filtra solo la última posición GPS conocidaLectura
adb pull /data/data/com.google.android.apps.maps/Extrae historial de búsquedas y rutas de Google MapsLectura
Integridad y documentación forense
adb shell md5sum /ruta/archivoCalcula hash MD5 para verificar integridad del archivoLectura
adb exec-out screencap -p > pantalla.pngCaptura el estado actual de la pantalla como evidenciaLectura
Comandos a evitar en contexto forense
adb push [archivo] [destino]Escribe archivos en el dispositivo — invalida la evidenciaModifica
adb install [apk]Instala una aplicación — contamina la escena digitalModifica
adb shell rm [archivo]Elimina archivos — destrucción de evidenciaModifica

El principio más importante: no contaminar la escena

Igual que en la forense física nunca tocas una escena sin guantes, en ADB la regla de oro es no modificar el dispositivo. Esto implica:

Usar exclusivamente comandos adb pull y adb shell en modo lectura. Nunca ejecutar adb push (escritura al dispositivo) ni adb install durante una investigación activa. Calcular el hash SHA-256 de cada archivo extraído antes y después para demostrar que no fue alterado. Y activar el modo avión físicamente (no desde software, que puede ser manipulado) antes de comenzar, para prevenir un borrado remoto mientras trabajas.

ADB no es solo una herramienta técnica: es el puente entre el dispositivo del sospechoso y la sala de un tribunal. Recuerda que cada comando que ejecutas puede construir o destruir un caso.

Habilitar la depuración USB en Android para uso forense

Esta es una de las fases más delicadas de toda la investigación. El problema es que habilitar la depuración USB requiere interactuar con el dispositivo, y cada toque que das antes de documentarlo es potencialmente cuestionable en juicio. La clave es hacerlo de forma mínima, ordenada y completamente documentada.

Antes de tocar nada: el protocolo previo

Lo primero es fotografiar el dispositivo en su estado exacto de recepción: pantalla bloqueada, estado de la batería visible si es posible, y los cuatro lados físicos. Solo entonces puedes proceder.

Comprueba también si la depuración ya estaba activada. Si el sospechoso era técnico o desarrollador, puede que no necesites activar nada, lo cual simplifica enormemente tu posición:

adb shell settings get global adb_enabled
# Devuelve 1 si ya estaba activa, 0 si no

El punto crítico: la huella RSA y sus implicaciones

Cuando conectas el dispositivo al ordenador forense por primera vez, Android muestra un diálogo pidiendo que apruebes la huella RSA del equipo. Esta interacción debe quedar documentada porque implica una modificación del dispositivo: se escribe la clave pública de tu equipo en el almacén de claves de confianza del teléfono.

Para documentarlo correctamente anota en el acta la huella RSA de tu equipo forense antes de la sesión:

bash

# En tu ordenador forense, antes de conectar el dispositivo
adb keygen /tmp/clave_forense
# Guarda la huella que aparece — va en el informe pericial

Esto permite demostrar que la única modificación realizada fue la autorización de ese equipo concreto, en ese momento concreto.

Consideraciones según el estado del dispositivo

El escenario ideal es recibir el dispositivo encendido y desbloqueado, pero raramente ocurre. Estas son las situaciones reales más habituales:

Dispositivo encendido con pantalla bloqueada. Puedes activar la depuración desde ADB solo si ya estaba habilitada. Si no lo estaba, necesitas desbloquear la pantalla, lo que en muchos casos requiere el PIN del sospechoso o una orden judicial específica para técnicas de bypass.

Dispositivo apagado. Encenderlo ya es una intervención que debes documentar. Una vez encendido, si tiene pantalla bloqueada, aplica el caso anterior. Algunos dispositivos ofrecen opciones de desarrollador accesibles desde el recovery mode, pero esto es terreno muy delicado legalmente.

Dispositivo con pantalla rota pero encendido. Aquí entran los adaptadores OTG con teclado y ratón para navegar el menú táctilmente desde hardware externo. Documenta el adaptador usado como material de la intervención.

El bloqueador de escritura: imprescindible pero a menudo omitido

La depuración USB en Android no es solo lectura por defecto. El protocolo ADB permite escritura, y sin un bloqueador de escritura hardware (write blocker) interpuesto entre el cable y tu ordenador, cualquier proceso del sistema operativo —un antivirus, una actualización automática, el indexador— podría teóricamente escribir en el dispositivo.

Los más usados en entornos forenses son el Tableau TD3 y el WiebeTech USB WriteBlocker. Si no tienes acceso a hardware físico, puedes activar el modo de solo lectura a nivel de sistema operativo:

# En Linux, montar en modo solo lectura
blockdev --setro /dev/sdX

# Verificar que está en modo lectura
blockdev --getro /dev/sdX
# Debe devolver 1

Documenta el número de serie del bloqueador hardware o el comando ejecutado. Sin esto, la defensa tiene un argumento sólido para cuestionar la integridad de cualquier dato extraído.

Lo que jamás debes hacer

Nunca actives la depuración USB desde una cuenta de desarrollador propia instalando una app auxiliar en el dispositivo. Aunque es técnicamente posible, implica instalar software en el dispositivo intervenido, lo cual en España constituye una modificación de la escena digital que puede hacer inadmisible toda la evidencia posterior bajo el artículo 11 de la LOPJ.


El comando adb devices: la primera comprobación de toda sesión forense

adb devices es el comando de diagnóstico que lanza el servidor ADB en tu ordenador y le pregunta a todos los dispositivos conectados por USB (o por red) quiénes son y en qué estado están. Es siempre el primer comando que ejecutas, y su salida te dice si puedes trabajar o si hay un problema que resolver antes de continuar.


Anatomía de la salida

La respuesta tiene siempre la misma estructura: una cabecera fija, y luego una línea por cada dispositivo detectado con dos columnas separadas por un tabulador.

List of devices attached
SERIALNUMBER        STATE

La columna izquierda es el identificador único del dispositivo. La columna derecha es el estado de la conexión, y es donde está toda la información relevante.

Los cinco estados posibles y qué significan

EstadoQué significa¿Puedo trabajar?Cómo resolverlo
authorizedDispositivo conectado, depuración USB activa y la huella RSA de tu equipo está aceptada. Estado ideal para trabajar.Sí — listoNada. Comienza la extracción y documenta el serial.
unauthorizedEl dispositivo está conectado y tiene depuración activa, pero no ha aceptado la huella RSA de tu equipo. Aparece el diálogo en pantalla esperando confirmación.No aúnDesbloquear pantalla del dispositivo y pulsar «Permitir» en el diálogo RSA. Documenta esta acción en el acta.adb kill-server && adb start-server
offlineADB detecta el dispositivo pero no puede comunicarse con él. Suele indicar un problema de cable, driver o que el daemon del dispositivo falló.NoCambiar cable USB. Reiniciar servidor ADB.adb kill-server && adb start-server
recoveryEl dispositivo está arrancado en modo recovery, no en Android normal. Acceso muy limitado al sistema de archivos de usuario.ParcialAlgunos comandos funcionan. Útil para acceder a particiones de sistema, no a datos de usuario.
sideloadEl dispositivo está en modo de instalación de paquetes desde recovery. No es un estado forense útil.NoReiniciar el dispositivo normalmente. Documenta que estaba en este estado al recibirlo.
(lista vacía)No se detecta ningún dispositivo. La depuración USB puede estar desactivada, el driver no está instalado en el equipo forense, o el cable no transmite datos.NoVerificar drivers ADB, probar otro cable (muchos cables USB solo cargan, no transmiten datos), confirmar que la depuración está activa en el dispositivo.

Ejemplos reales de salida y cómo leerlos

Caso ideal — dispositivo listo para trabajar:

List of devices attached
R58M31XDKPL     device

El estado device es sinónimo de authorized en versiones modernas de ADB. El serial R58M31XDKPL es lo que debes anotar en el acta forense — es el identificador único de esa sesión.

Caso más habitual en campo — esperando autorización:

List of devices attached
R58M31XDKPL     unauthorized

El teléfono tiene la pantalla bloqueada o el usuario no ha aceptado el diálogo RSA todavía. Sin desbloquear la pantalla no puedes avanzar.

Varios dispositivos conectados simultáneamente:

List of devices attached
R58M31XDKPL     device
emulator-5554   device
192.168.1.45:5555   device

Aquí ves un dispositivo físico (serial alfanumérico), un emulador y una conexión ADB por red (WiFi). En contexto forense, si aparecen varios dispositivos, todos los comandos posteriores necesitan el flag -s para especificar sobre cuál actúas:

bash

adb -s R58M31XDKPL shell getprop ro.product.model

Sin ese flag, ADB devuelve error si hay más de uno conectado — y ese error en mitad de una sesión forense documentada es exactamente el tipo de ruido que la defensa puede usar para cuestionar el rigor del proceso.


El serial como huella de sesión

El número de serie que aparece en adb devices no es arbitrario — es el mismo que está grabado en el dispositivo y que puedes cruzar con:

bash

adb shell getprop ro.serialno        # Serial por software
adb shell getprop ro.boot.serialno   # Serial de bootloader

Si los tres coinciden (el de adb devices, ro.serialno y ro.boot.serialno), tienes confirmación triple de que estás trabajando sobre el dispositivo correcto. Anota los tres en el informe pericial.


El shell de ADB: entrando al sistema del dispositivo

Si adb devices es el apretón de manos, adb shell es cruzar la puerta. Es el comando que te da acceso a una terminal Linux completa ejecutándose directamente dentro del dispositivo Android — el mismo entorno que usa el propio sistema operativo para funcionar. Para un forense digital, es la diferencia entre mirar un edificio desde fuera y poder recorrer cada habitación.


Qué es exactamente el shell de Android

Android está construido sobre un núcleo Linux. Debajo de la interfaz táctil, las apps y Google Play existe un sistema de archivos Unix completo con usuarios, permisos, procesos y daemons. adb shell te conecta a ese sistema mediante el daemon adbd que corre en el dispositivo, dándote una sesión de terminal similar a conectarte por SSH a un servidor.

La diferencia crítica respecto a un Linux convencional es el usuario con el que entras:

Dos modos de uso: interactivo y directo

El shell tiene dos formas de invocarse, y en forense digital la elección importa porque afecta al log de comandos:

Modo interactivo — abres una sesión y ejecutas comandos uno a uno:

bash

adb shell
# Ahora estás dentro del dispositivo
$ whoami
shell
$ pwd
/
$ ls /sdcard/
DCIM  Download  Pictures  WhatsApp...
$ exit

Modo directo — ejecutas un solo comando y obtienes la salida inmediatamente, sin abrir sesión. Es el preferido en forense porque cada comando queda como una línea independiente y fechada en el log:

bash

adb shell whoami
adb shell ls /sdcard/
adb shell getprop ro.product.model
```

Para documentación forense, el modo directo es más limpio: cada invocación es atómica, aparece con su propio timestamp en el log de sesión, y no hay riesgo de que comandos de navegación interactiva (como `cd`) afecten a los siguientes.

---

### El sistema de archivos que verás desde el shell
```
/
├── data/          ← Datos de aplicaciones (requiere root para la mayoría)
│   ├── data/      ← Sandbox de cada app instalada
│   └── media/     ← Almacenamiento interno (accesible sin root)
├── sdcard/        ← Enlace simbólico al almacenamiento externo o interno
├── system/        ← Sistema operativo Android (solo lectura normalmente)
├── proc/          ← Información del kernel en tiempo real (procesos, red...)
├── dev/           ← Dispositivos de bloque — particiones físicas
└── cache/         ← Caché del sistema (interesante para recuperación)

La ruta más valiosa forensemente es /data/data/, donde vive la base de datos de cada aplicación instalada — mensajes, contactos, historial de búsquedas, tokens de sesión. El problema es que sin root solo puedes acceder a ella mediante los Content Providers expuestos por Android, no directamente.


Comandos del shell que más información forense generan

Reconocimiento del sistema:

adb shell getprop          # Todas las propiedades del sistema de una vez
adb shell uname -a         # Versión exacta del kernel
adb shell df -h            # Espacio usado/libre por partición
adb shell mount            # Sistemas de archivos montados y sus opciones

Usuarios y procesos:

adb shell ps -A -o pid,user,name,cmd    # Procesos con usuario que los ejecuta
adb shell top -b -n 1                   # Snapshot de uso de CPU y memoria
adb shell service list                  # Servicios del sistema activos

Red (muy relevante en casos de exfiltración de datos):

adb shell netstat -tulnp               # Conexiones activas y puertos
adb shell cat /proc/net/arp            # Tabla ARP — dispositivos vistos recientemente
adb shell dumpsys wifi | grep -i ssid  # Redes WiFi conocidas y conectadas
adb shell dumpsys telephony.registry   # Estado de la red móvil

Actividad reciente del usuario:

adb shell dumpsys usagestats           # Qué apps se usaron y cuándo
adb shell dumpsys notification         # Historial de notificaciones
adb shell content query --uri content://browser/bookmarks   # Marcadores del navegador
adb shell dumpsys activity recents     # Últimas apps abiertas (recientes)

La trampa del sandbox: por qué el shell no lo es todo

El límite más importante que encontrarás es el modelo de permisos de Android. Cada aplicación corre con su propio usuario de sistema (u0_a67, u0_a134…) y sus datos en /data/data/ son inaccesibles para el usuario shell. Desde el shell sin root verás el directorio pero no podrás leer su contenido:

bash

adb shell ls /data/data/com.whatsapp/databases/
# opendir failed, Permission denied

Aquí el shell te muestra exactamente su límite, lo cual es en sí mismo información forense útil: sabes que los datos existen, sabes la estructura del directorio, pero necesitas un vector diferente para acceder. Las alternativas legítimas son el backup mediante adb backup (si la app lo permite), los Content Providers públicos de la app, o la extracción con herramientas especializadas en dispositivos rooteados.


Por qué el shell es irreemplazable aunque tengas herramientas automatizadas

Cellebrite, Oxygen o MSAB hacen lo mismo que el shell pero con interfaz gráfica y generación automática de informes. Sin embargo, el shell directo tiene tres ventajas que ninguna herramienta comercial puede darte. Primera, la granularidad: puedes ejecutar exactamente el comando que necesitas para un caso concreto, sin que la herramienta decida qué extrae y qué no. Segunda, la transparencia: el informe muestra exactamente qué se ejecutó, sin caja negra. Y tercera, la disponibilidad: el shell funciona con cualquier ordenador con ADB instalado, sin licencias, sin dongles y sin dependencia de que el fabricante soporte ese modelo de dispositivo. En campo, esa independencia puede ser la diferencia entre perder evidencia volátil y preservarla.

Con toda la información de que dispones ya deberías ser capaz de iniciar una conexión, la semana que viene seguiremos con la captura de log, la imagen de partición etc. Pero hasta entonces mi consejo para practicar, es conseguir, al menos media docena de antiguos y nuevos móviles Android y sus correspondientes cables de conexión de tus amigos, una tienda de segunda mano u otra fuente. La práctica es muy importante y verás que incluso dentro de una familia de SOs y equipos el ecosistema es bastante diferente y la conexión puede variar ligeramente.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *