· Droidwatch Security Research team · 14 min de lectura · Static Analysis Deep-Dives analisis-apk mitre-attack-mobile inteligencia-de-amenazas
🌐 Read in English →

Analizar un APK online: qué ves en el informe

Recorrido sección a sección de la cadena de análisis estático de Droidwatch, del informe que produce y de los límites del análisis estático.

Analizar un APK online: qué ves en el informe

La mayoría de servicios que permiten analizar un APK online devuelven un veredicto y poco más. El veredicto afirma que un fichero es malicioso. No establece qué hace la aplicación, qué evidencia sostiene esa clasificación ni qué debe escalar un analista.

Este artículo documenta la cadena de análisis de Droidwatch de principio a fin: los formatos admitidos, las etapas que se ejecutan al subir una muestra, cada bloque del informe resultante y el punto en que el análisis estático deja de producir evidencia utilizable.

El razonamiento del analista —cómo trabajar una muestra sospechosa, en lugar de cómo la procesa la plataforma— se trata por separado en el flujo de triaje de APK.

Formatos admitidos

Se admiten cinco formatos. Todos son de Android salvo el último.

Formato Descripción
.apk Paquete de aplicación Android estándar
.aab Android App Bundle, el formato de distribución de Play
.xapk Contenedor de APK divididos, habitual en tiendas alternativas
.dex Ejecutable Dalvik suelto, para bytecode ya extraído
.ipa Archivo de aplicación iOS — sólo análisis estático

El tamaño máximo depende del plan: 150 MB sin cuenta, 200 MB en Free, 500 MB en Pro, 750 MB en Team y 1 GB en Enterprise. Las aplicaciones bancarias en producción quedan generalmente muy por debajo del techo de Free; los paquetes que superan los 500 MB suelen ser juegos.

Existen dos vías de entrada. La subida por navegador atiende ficheros sueltos. La API atiende todo lo demás y se documenta más abajo.

La cadena de análisis

Una sola subida dispara una cadena de 28 etapas que produce más de 25 análisis independientes. Las etapas pertenecen a una misma ejecución y no a productos distintos, lo cual es relevante para interpretar el resultado: un hallazgo producido por una etapa puede alterar cómo puntúa la muestra una etapa posterior.

Las etapas se agrupan en seis áreas. Identificar de qué área procede un hallazgo determina qué peso tiene ese hallazgo.

1. Paquete e identidad

Parseo del manifiesto, nombre de paquete, versión y código de versión, SHA-256, min_sdk, target_sdk y la cadena del certificado de firma. Esta área ejecuta además la comparación con Google Play: si el paquete existe en Play y, de existir, si su certificado coincide con el que Play distribuye.

Un desajuste de certificado es la salida de mayor valor de toda la cadena. Reclasifica la muestra de «aplicación sospechosa» a «reempaquetado confirmado», que es un tipo de incidente distinto y con otro responsable dentro de la organización.

2. Bytecode

Análisis profundo de DEX mediante androguard: clases, métodos, uso de API, reflexión, carga dinámica de clases y postura de ofuscación de la build. El comportamiento de tipo dropper aflora aquí. Un APK cuya carga útil se descarga tras la instalación se presenta como irrelevante en todas las demás áreas.

3. Código nativo y empaquetado

Objetos compartidos, firmas de packers, assets de alta entropía y cualquier componente incluido en el paquete que el manifiesto no justifique.

4. Detección de familia

Reglas YARA combinadas con heurísticas. La atribución de familia es el dato operativamente más útil que puede contener un informe, porque incorpora todo el conocimiento existente sobre la infraestructura, los objetivos y el comportamiento de esa familia.

5. Cadena de suministro

Droidwatch identifica 87 SDK de terceros por firma y consulta OSV.dev en el momento del análisis en busca de vulnerabilidades conocidas.

Son dos mediciones distintas y la diferencia importa. OSV cubre 12 de los 87. Los SDK de publicidad y atribución son cerrados y no están representados en las bases de vulnerabilidades públicas. Para los 75 restantes, la plataforma establece qué contiene la aplicación pero no puede establecer si existe un CVE publicado. Las afirmaciones de cobertura de CVE sobre SDK móviles propietarios deben contrastarse con el contenido real de las bases públicas. Un módulo aparte sigue aproximadamente 120 trackers de privacidad.

Esta área produce hallazgos en aplicaciones legítimas con más frecuencia que ninguna otra, y es la razón por la que los equipos de seguridad de aplicaciones ejecutan la plataforma sobre sus propias builds y no sólo sobre presuntas muestras maliciosas.

6. Inteligencia de infraestructura

Extracción de endpoints, identificación de C2 y extracción de configuración cifrada cuando la muestra lo permite.

Clasificador de aprendizaje automático

Un clasificador se ejecuta en paralelo a la cadena. Su rendimiento medido es F1 macro 0,9873 sobre un holdout de 1.661 muestras, entrenado con 6.642 muestras de CICMalDroid 2020. El tamaño del holdout se cita deliberadamente: una cifra de precisión sin conjunto de evaluación declarado no es una medición.

El clasificador aporta una señal al veredicto. No determina el veredicto, y ningún hallazgo de un informe se apoya únicamente en él.

Duración del análisis

Mediciones tomadas sobre informes de producción el 19 de septiembre de 2026:

Tamaño del paquete Tiempo de análisis
48 MB 157 s
97 MB 503 s
111 MB 611 s
165 MB 595 s

Un APK de 50 MB se completa en dos a cinco minutos. Los paquetes por encima de 100 MB promedian entre ocho y diez minutos. Los trabajos transitan por cuatro estados: queued, running, done y failed.

La documentación anterior indicaba de 30 a 90 segundos. Esa cifra era inexacta y se ha retirado.

Estructura del informe

metadata

run_id, app_name, package, version_name, version_code, sha256, file_size, min_sdk, target_sdk, analyzed_at.

Es el bloque más citado aguas abajo. La combinación de sha256 y analyzed_at establece la reproducibilidad: identifica qué build se examinó y cuándo, que es lo que exige una auditoría o una discrepancia seis meses después.

min_sdk merece atención. Una aplicación que apunta a un nivel de API obsoleto suele hacerlo para quedar fuera de un modelo de permisos que las versiones actuales de Android sí imponen.

overview

score, verdict y una distribución de severities entre info, low, medium, high y critical.

Droidwatch puntúa el riesgo de 0 a 100, donde una puntuación más alta indica mayor riesgo. Las bandas de veredicto son fijas:

Veredicto Score Definición
Malicious 65 o más Familia identificada, o conjunto de capacidades sin interpretación legítima posible
High Risk 40-64 Capacidades peligrosas junto a anomalías de identidad; familia sin confirmar
Suspicious 20-39 Anomalías sin patrón malicioso coherente — adware, o aplicación legítima mal construida
Benign Menos de 20 Nada fuera de la norma para su categoría de aplicación

Se utiliza una sola escala. La columna Score del threat feed público contiene el mismo valor, de modo que un 63 en el feed corresponde a un 63 en un informe privado.

Para triaje, la distribución de severities suele ser más informativa que la puntuación compuesta, porque describe la forma del problema. Dos hallazgos críticos y nada más indican una aplicación concreta y explicable. Cuarenta hallazgos medios y ningún crítico indican normalmente una aplicación legítima con deuda técnica. Los dos informes se dirigen a equipos distintos.

sections

Un array de { id, title, findings } que contiene el cuerpo del análisis: permisos, componentes, detalles del certificado, configuración de red, indicadores extraídos, análisis de código y cadena de suministro. La cadena del certificado, los indicadores de red y las coincidencias YARA se ubican dentro de sus respectivas secciones, no en el primer nivel del documento.

Cada hallazgo incorpora su propio razonamiento de apoyo. Ésta es la diferencia sustantiva entre un informe y un veredicto de escáner: el informe identifica qué componente solicita un permiso determinado y qué habilita ese permiso, en lugar de afirmar que el permiso es peligroso. Cuando un equipo de desarrollo discute un hallazgo, el razonamiento es lo que resuelve la discrepancia en un sentido o en otro.

Tres elementos dentro de sections merecen atención específica:

ttp_mapping

Hallazgos mapeados a técnicas de MITRE ATT&CK Mobile.

El mapeo hace legible un hallazgo móvil para responsables que no trabajan en seguridad móvil. Los identificadores de técnica pueden incorporarse a un modelo de cobertura de detección, lo que elimina el parque móvil como hueco en los informes de cobertura ATT&CK.

Los hallazgos se mapean además a las ocho categorías de control de OWASP MASVS: MASVS-STORAGE, MASVS-CRYPTO, MASVS-AUTH, MASVS-NETWORK, MASVS-PLATFORM, MASVS-CODE, MASVS-RESILIENCE y MASVS-PRIVACY. El MASTG aporta el procedimiento de prueba correspondiente a cada control cuando un resultado debe demostrarse de forma independiente.

Una advertencia cuando ambas cifras aparecen en un mismo informe: van en sentidos opuestos. El riesgo se puntúa de 0 a 100 donde más alto es peor. La cobertura MASVS se puntúa de 0 a 100 donde más alto es mejor.

narrative y behavior_summary

Descripciones en prosa de la muestra y su comportamiento, compuestas a partir de los hallazgos.

El método de generación se declara explícitamente porque la suposición predominante ante cualquier prosa dentro de un informe de seguridad es que la produjo un modelo de lenguaje. Estos campos los produce un motor de reglas. Una fase de la cadena de ataque aparece en la salida únicamente cuando hay hallazgos que la respaldan, lo que significa que el resumen no puede afirmar un paso que la evidencia no sostiene — el modo de fallo característico del texto generado, y la razón por la que el texto generado no puede citarse como evidencia.

Ambos campos siguen siendo resúmenes y no evidencia. La evidencia es sections, y sections es lo que corresponde incorporar a un expediente de incidente.

coverage, analyzer_version y toolchain

Estos tres bloques determinan si un informe es defendible.

coverage registra qué pudo examinar el análisis. Una muestra cuyo manifiesto no se pudo parsear no es una muestra limpia, y un informe que no distingue entre «examinado, sin hallazgos» y «no se pudo examinar» no sostiene una conclusión firmada.

analyzer_version y toolchain registran qué produjo el resultado. Esto es operativamente significativo porque el motor de análisis está versionado y cambia con el tiempo. El 19 de septiembre de 2026 el conjunto de firmas de SDK pasó de 35 a 87 y se incorporó la detección de Log4j. Un informe generado a partir de esa fecha puede contener legítimamente hallazgos ausentes en una ejecución anterior sobre el mismo fichero. Cuando se comparan dos análisis de una misma aplicación en fechas distintas, analyzer_version establece que la diferencia es un cambio en el motor y no una inconsistencia de éste.

Formatos de exportación

Hay seis formatos disponibles:

Formato Destino principal
STIX 2.1 Ingesta en SIEM y SOAR
PDF Expedientes de incidente, comités de revisión, entregables a cliente
DOCX Entregables editables, incluido el informe white-label de consultoras
JSON / JSONL Herramientas propias e ingesta en almacenes de datos
CSV Análisis tabular

Acceso programático

Los flujos automatizados utilizan la API y no la subida por navegador. La API replica la secuencia del navegador:

POST /api/upload                              → devuelve upload_id
POST /api/analyze  {"upload_id": "..."}       → devuelve job_id y run_id
GET  /api/jobs/{job_id}                       → sondear hasta done o failed
GET  /api/runs/{run_id}/artifact/report.json  → recuperar el informe

job_id y run_id son UUID distintos y no son intercambiables: el job representa el trabajo, el run representa el resultado. Cuando un fichero ya se analizó previamente, /api/analyze devuelve cached: true con el job_id a nulo; no hace falta sondear, porque el informe ya existe.

La autenticación admite X-API-Key: dw_… o Authorization: Bearer dw_…. Cuando se envían ambas, prevalece la cabecera de clave de API.

El procesamiento masivo utiliza los endpoints por lotes —POST /api/batch/upload, POST /api/batch/analyze, GET /api/batch/{batch_id}—, que procesan la cosecha de un día en una sola pasada. Las exportaciones en PDF y STIX se recuperan desde sus propios endpoints de artefacto.

Dos familias de endpoints no requieren autenticación: el threat feed (GET /api/threat-feed, GET /api/threat-feed/lookup) y explore (GET /api/explore, GET /api/explore/search). Ambas sirven únicamente ejecuciones cuyo propietario optó por publicarlas y cuyo veredicto sea Malicious, High Risk o Suspicious. El feed público se publica bajo licencia CC BY 4.0. El endpoint de consulta permite comprobar un hash sin disponer de cuenta.

El escaneo en tiempo de compilación se gestiona mediante CI/CD y no por API. La GitHub Action analiza los artefactos de build y falla la compilación según umbrales de veredicto configurables. Existen cinco integraciones adicionales: GitLab, Bitrise, Jenkins, CircleCI y Azure Pipelines. La guía rápida documenta la secuencia mínima funcional; la referencia de API, los esquemas.

Alcance y limitaciones

Todo lo anterior es análisis estático. El análisis estático establece capacidad y no comportamiento: lo que una aplicación puede hacer, no lo que hizo durante su ejecución. Esto basta para la mayoría de decisiones de triaje y está disponible en minutos.

Cuando una decisión depende del comportamiento en ejecución, se aplican tres restricciones:

El análisis de .ipa en iOS ejecuta siete módulos estáticos: análisis del binario Mach-O, Info.plist, entitlements, configuración de App Transport Security, class-dump, frameworks enlazados y manifiestos de privacidad declarada. No existe componente en ejecución para iOS en ningún plan.

Planes y límites

Plan Precio Análisis/día Tamaño máximo Retención
Sin cuenta 3 150 MB 7 días
Free $0 5 200 MB 7 días
Pro $29/mes 100 500 MB 90 días
Team $99/mes 500 750 MB 180 días
Enterprise A medida Ilimitado 1 GB 365 días

Todos los planes ejecutan la misma cadena de análisis. Los niveles de plan rigen el rendimiento, el tamaño de fichero y la retención, no la profundidad del análisis. El análisis dinámico y el acceso a la API arrancan en Pro, con 30 minutos de emulador al mes; Team dispone de 90 y Enterprise de 150.

Preguntas frecuentes

¿El análisis de APK está disponible sin coste? Sí. Una cuenta gratuita proporciona cinco análisis diarios con la cadena estática completa, mapeo MITRE ATT&CK Mobile, cobertura MASVS y los seis formatos de exportación, incluido STIX 2.1. Sin cuenta se dispone de tres análisis diarios.

¿Se comparten las muestras enviadas con terceros? Los envíos son privados por defecto. Los indicadores se publican en el threat feed público únicamente en las ejecuciones cuyo propietario optó por ello. Esto difiere de los servicios multi-escáner gratuitos, donde los envíos del plan gratuito suelen quedar disponibles para otros clientes, restricción que impide utilizarlos con muestras de clientes que contengan datos personales. Las prácticas de manejo y divulgación están documentadas en la página de confianza.

¿En qué se diferencia de VirusTotal? VirusTotal responde a si un hash ha sido observado y cómo lo clasificaron los motores participantes. Es la primera consulta adecuada. No proporciona razonamiento por hallazgo, análisis del certificado, mapeo ATT&CK ni un informe apto para presentar ante un comité de revisión. Hay disponible una comparativa detallada.

¿En qué se diferencia de una instancia propia de MobSF? En el plano del análisis la diferencia es limitada; MobSF es un motor solvente y buena parte de la disciplina de seguridad móvil se construyó sobre él. La diferencia es operativa: sin orquestación de contenedores, sin escalado de workers, sin mantenimiento de dependencias, y con multi-tenant, control de acceso por roles, traza de auditoría, facturación e inteligencia de amenazas. La comparativa completa documenta el trade-off.

¿Cuál es el tiempo de análisis previsto? De dos a cinco minutos para un APK de 50 MB; de ocho a diez minutos de media para paquetes por encima de 100 MB.


Envía un APK a análisis. No se requiere método de pago.

Threat Research

Droidwatch's research team analyzes Android & iOS malware — banking trojans, spyware, droppers and overlay kits — and writes up the static and dynamic signals that give them away. Every post is grounded in real platform output.

Analyze your first app free — drag an APK or iOS .ipa onto the homepage for a full static report in about a minute. Get started free