Droidwatch dentro de tu asistente de IA
Analiza un APK sin salir del chat en el que ya estás. Pregunta «¿esta app es maliciosa?», suelta el fichero, y recibes un veredicto, el C2 del atacante si lo hay, y los hallazgos que importan.
Qué es
Un solo fichero de Python, sin dependencias. Sube la muestra, espera a que termine y te trae el resultado. Todo el análisis ocurre en nuestros servidores.
Es una decisión, no una limitación. Un agente que corra jadx y semgrep en
tu portátil sólo ve lo que esas herramientas ven. «He visto diez mil
muestras» no se improvisa: la inteligencia de amenazas, un modelo entrenado
sobre un corpus y el histórico con el que se correlacionan campañas o viven en
el servidor, o no existen.
Instalar
curl -fsSLO https://droidwatch.app/ci/claude-skill/droidwatch-skill.zip
unzip droidwatch-skill.zip -d ~/.claude/skills/
export DROIDWATCH_API_KEY=dw_... # opcional
El zip trae una carpeta droidwatch/: las instrucciones de la skill
(SKILL.md) y el cliente (scripts/droidwatch.py). Descomprímelo donde tu
asistente busque sus skills; en Claude Code es ~/.claude/skills/. No hace
falta nada más que Python 3.
Funciona sin clave, en modo anónimo y con límites. Es la forma de probarla antes de decidir nada.
La skill no está restringida por plan. Cualquiera puede usarla. Una clave no te da acceso: te sube los límites de la tabla de abajo.
Si quieres una, se crea en droidwatch.app → Mi perfil → Claves de API, con
ámbito read + analyze. Con read only el servidor responde 403.
Límites
| Cómo la uses | Análisis/día | Tamaño máx. |
|---|---|---|
| Sin clave (anónimo) | 3 | 150 MB |
| Cuenta gratuita | 5 | 200 MB |
Pro (con clave dw_) |
100 | 500 MB |
| Team | 500 | 750 MB |
| Enterprise | sin tope | 1 GB |
Usar
Tu asistente los ejecuta por ti. Para probarlos a mano, desde la carpeta
droidwatch/:
python3 scripts/droidwatch.py analyze sospechoso.apk
python3 scripts/droidwatch.py summary <run_id>
python3 scripts/droidwatch.py lookup evil-c2.example.com
Un análisis tarda entre 1 y 10 minutos, según el tamaño del fichero.
Qué devuelve
JSON compacto: unos 8 KB, frente a los hasta 740 KB del informe completo. Así cabe en el contexto de un modelo y le sobra sitio para razonar.
| Campo | Qué es |
|---|---|
veredicto |
Benign · Low Risk · Suspicious · High Risk · Malicious, con puntuación |
hallazgos.graves |
Lo crítico y lo alto, ya ordenado por gravedad |
iocs.c2 |
La infraestructura del atacante, descifrada de la muestra |
attack |
Técnicas MITRE ATT&CK Mobile |
masvs |
Nota de postura de seguridad, por categoría MASVS |
defensas_runtime |
Si la muestra se defiende del análisis |
sin_analizar |
Etapas que no llegaron a completarse |
bloqueado_por_plan |
Secciones que el análisis sí produjo y que tu plan no incluye |
Lo que no hace
Responde a «¿esto es malicioso y quién está detrás?», no a «¿tiene mi app alguna vulnerabilidad?». Para auditar tu propio código, ésta no es la herramienta.
Y no analizará algo que no tengas derecho a analizar.
Por qué importan los tres últimos campos
sin_analizar y las marcas de truncado existen para que un asistente no pueda
darte una falsa tranquilidad. «No se encontró» y «no se pudo buscar» son dos
frases distintas, y un resumen que esconde la diferencia es peor que no tener
resumen. Las instrucciones de la skill obligan al modelo a decir de cuál de las
dos se trata.
Lo mismo con defensas_runtime: si la muestra se cierra al detectar que la
están instrumentando, un informe dinámico vacío no es prueba de inocencia; y
el asistente te lo dirá.
Y lo mismo con bloqueado_por_plan. Autenticidad de app —typosquatting,
comparación del icono con la ficha de Google Play, señales de reempaquetado— es
una sección de pago, así que en un plan gratuito no se envía. Lo que el resumen
no hace es fingir que no encontró nada: esos hallazgos siguen contando en
hallazgos.total, y el campo dice cuántos son. Un candado que se ve es honesto;
uno silencioso deja un informe que se lee como completo sin estarlo.