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.