Skip to content

feat: add android-apk-research capability#29

Merged
monoxgas merged 2 commits into
mainfrom
promote/android-apk-research
May 28, 2026
Merged

feat: add android-apk-research capability#29
monoxgas merged 2 commits into
mainfrom
promote/android-apk-research

Conversation

@monoxgas
Copy link
Copy Markdown
Contributor

Summary

  • Promotes android-apk-research from dreadnode/capabilities-internal to the public catalog.
  • Static semantic-bug research on Android APKs: deep-link routers, intent redirection, WebView trust boundaries, auth/session/client-state bypass, Dirty Stream share targets, and APK-derived backend API chains.
  • Ships a 10-tool orchestration MCP and four skills teaching the JADX / ripgrep / Semgrep / Joern / CodeQL pipeline against MASVS 2.1, MASTG 1.7, MASWE (beta), and CWE.

Surface

  • MCP (android-research, 10 tools): inventory_status, run_corpus_inventory, extract_components, rank_components, detect_runtime_kind, detect_protector, dexprotector_unpack, extract_api_map, rank_backend_richness, normalize_semantic_findings.
  • Skills: android-corpus-prep, android-semantic-vuln-hunting (canonical methodology with Mode A/B/C), android-targeted-assessment (one-APK depth), android-protector-triage (DexProtector structural unpack + protector-aware adjacency).
  • Scripts: 12 mainline orchestrators + 5 research-grade Promon Shield evaluators under scripts/research/promon/ (documented as not-wired, deliberate quarantine).

Promotion cleanup applied vs. internal repo

  • Added repository: https://github.com/dreadnode/capabilities to manifest (sibling-capability convention).
  • Dropped redundant skills: ["skills/"] declaration (auto-discovery picks up the directory).
  • Normalized MCP shebang to #!/usr/bin/env -S uv run --script (matches the four sibling PEP-723 scripts under scripts/).
  • Documented the deliberate skills-only posture (no top-level agent) in skills/android-semantic-vuln-hunting/references/workflow.md under "Why no top-level agent" — the four skills cover non-overlapping intents, the description: triggers and allowed-tools: gates are the routing layer, and an agent prompt on top would duplicate Mode A/B/C selection without adding tools: / model: value a skill can't already express.

Prior-art audit (recap)

The skill prose (workflow.md § "Why bash, not MCP") already cites and refuses every above-the-floor public MCP for the wrapped tools, with named architectural blockers:

  • zinja-coder/jadx-mcp-server (633★ Apache-2.0) — GUI co-pilot, wrong fit for headless corpus runs.
  • semgrep/mcp (668★, archived 2025-10-28) — can't express the multi-pack ensemble.
  • sfncat/mcp-joern (43★ MIT) — Joern is already lowest-volume; marginal automation gain.
  • JordyZomer/codeql-mcp (146★) — no LICENSE, not redistributable.
  • dnakov/frida-mcp (326★ MIT) — N/A by design (DexProtector libdp.so detects frida at start-up; capability is intentionally static-only).

Verification

  • dn capability validate ./capabilities/android-apk-research --strict → ✓
  • uv run --script mcp/test_server.py → 22/22 passing (helpers + tool-surface lock + script-wiring contract)
  • pre-commit run --files <staged> → all hooks pass (ruff, ruff-format, yaml, gitleaks)

Follow-up

A separate PR in dreadnode/capabilities-internal will delete the source directory per the lifecycle in that repo's AGENTS.md — no duplicates across repos.

Test plan

  • Reviewer runs dn capability validate ./capabilities/android-apk-research --strict and confirms clean.
  • Reviewer runs uv run --script capabilities/android-apk-research/mcp/test_server.py and confirms 22 passing.
  • Spot-check skills/android-semantic-vuln-hunting/SKILL.md for any drift from the in-repo references it links to.

🤖 Generated with Claude Code

monoxgas and others added 2 commits May 28, 2026 16:50
Promoted from dreadnode/capabilities-internal. Static semantic-bug
research on Android APKs — deep-link routers, intent redirection,
WebView trust boundaries, auth/session/client-state bypass, Dirty
Stream share targets, and APK-derived backend API chains.

Ships a 10-tool orchestration MCP (parallel Androguard/APKiD inventory,
component ranking, runtime classification, DexProtector detection +
static unpack, API map extraction, finding-schema normalization) and
four skills teaching the JADX / ripgrep / Semgrep / Joern / CodeQL
pipeline against MASVS/MASTG, CWE, and MASWE.

Promotion cleanup:
- Add repository: field to manifest
- Drop redundant skills: ["skills/"] (auto-discovery handles it)
- Normalize MCP shebang to `uv run --script` (matches sibling scripts)
- Document deliberate skills-only posture in workflow.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- skills/android-targeted-assessment/SKILL.md: Hermes bytecode magic
  was c6 1e b6 0e; canonical value per facebook/hermes BCVersion.h
  (and detect_runtime_kind.sh + the sibling skill) is c6 1f bc 03.
  An agent grepping for the wrong bytes would misidentify Hermes
  bundles.

- skills/android-semantic-vuln-hunting/SKILL.md, .../references/
  workflow.md, skills/android-targeted-assessment/SKILL.md: drop
  the stale `sed -n '1,220p'` upper bound against agent-utility-index.md
  (file is 74 lines now); use `cat` instead.

- skills/android-semantic-vuln-hunting/references/output-schema.md:
  align example hypothesis with the canonical SKILL.md contract.
  Old example showed `risk`/`confidence`/`needs_backend_validation`;
  canonical contract uses `confidence_tier`/`validation_tier`/
  `missing_evidence`. normalize_findings.py still accepts the legacy
  shape; the doc now matches what SKILL.md teaches.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@monoxgas monoxgas merged commit 4eada46 into main May 28, 2026
5 checks passed
@monoxgas monoxgas deleted the promote/android-apk-research branch May 28, 2026 23:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant