Droidwatch inside your AI assistant
Analyse an APK without leaving the chat you are already in. Ask "is this app malicious?", drop the file, and get back a verdict, the attacker's C2 if there is one, and the findings that matter.
What it is
A thin client — one Python file, no dependencies. It uploads, polls and brings back the result. Every bit of analysis happens on our servers.
That is deliberate, and not only because the analyser is not distributed: an
agent driving jadx and semgrep on your laptop only ever sees what those
tools see. You cannot improvise "I have seen ten thousand samples." Threat
intelligence, a model trained on a corpus and the history to correlate
campaigns are things that live on the server or do not exist.
Install
git clone https://github.com/<your-org>/droidwatch-skill
export DROIDWATCH_API_KEY=dw_... # optional
Point your assistant at the folder. Python 3 is the only requirement.
It works without a key, anonymously and with limits. That is the way to try it before deciding anything.
The key is created at droidwatch.app → My Profile → API Keys, scope
read + analyze. With read only the server answers 403.
Limits
| How you use it | Analyses/day | Max size |
|---|---|---|
| Without a key (anonymous) | 3 | 150 MB |
| Free account | 5 | 200 MB |
Pro (with a dw_ key) |
100 | 500 MB |
| Team | 500 | 750 MB |
| Enterprise | unlimited | 1 GB |
The skill is not gated. What needs a Pro plan is the key, which lifts the limits — not the skill itself. Anyone can try it anonymously.
Use
python3 scripts/droidwatch.py analyze suspicious.apk
python3 scripts/droidwatch.py summary <run_id>
python3 scripts/droidwatch.py lookup evil-c2.example.com
An analysis takes 1 to 10 minutes depending on size.
What comes back
Compact JSON — around 8 KB, down from a full report of up to 740 KB, so it fits in a model's context with room left to reason:
| Field | What it is |
|---|---|
veredicto |
Benign · Low Risk · Suspicious · High Risk · Malicious, with a score |
hallazgos.graves |
The critical and high findings, already prioritised |
iocs.c2 |
The attacker's infrastructure, decrypted out of the sample |
attack |
MITRE ATT&CK Mobile techniques |
masvs |
Security-posture scorecard |
defensas_runtime |
Whether the sample fights back against analysis |
sin_analizar |
Stages that did not complete |
bloqueado_por_plan |
Sections the analysis produced that your plan does not include |
What it will not do
It answers "is this malicious, and who is behind it?" — not "does my own app have a vulnerability?". For an audit of your own code, this is the wrong tool.
And it will not analyse something you have no right to analyse.
Why the last three fields matter
sin_analizar and the truncado flags exist so an assistant cannot give you
false comfort. "Nothing was found" and "it could not be looked for" are
different sentences, and a summary that hides the difference is worse than no
summary. The skill instructions make the model say which one it is.
The same goes for defensas_runtime: if the sample kills itself when it detects
instrumentation, an empty dynamic report is not evidence of innocence — and
you will be told so.
And it goes for bloqueado_por_plan too. App Authenticity — typosquatting, icon
comparison against the Play listing, repackaging signals — is a paid section, so
on a free plan it does not travel. What the summary will not do is pretend it
found nothing: the blocked findings still count in hallazgos.total, and the
field says how many they are. A gate you can see is honest; a silent one is a
report that reads complete and is not.