Skip to main content
Glama
ako2345

Android Security Analyzer

by ako2345

Android Security Analyzer

MCP-Server für die statische Sicherheitsanalyse von Android-Anwendungsquellcode. Läuft auf Cloudflare Workers als Remote-MCP-Server über Streamable HTTP.

Funktionsweise

Analysiert die Quelldateien von Android-Projekten — ohne das Projekt zu bauen — und liefert einen strukturierten Sicherheitsbericht. Die Analyse umfasst:

  • Manifest-Analyse — exportierte Komponenten, gefährliche Berechtigungen, Klartext-Datenverkehr, Debug-Flags, Backup-Einstellungen, SDK-Versionen

  • Gradle-/Build-Konfiguration — Fehlkonfigurationen bei Release-Builds, veraltete SDKs, verdächtige Abhängigkeiten, hartkodierte Geheimnisse

  • Quellcode (Java/Kotlin) — unsichere WebView, SSL/TLS-Bypass, schwache Kryptografie, SQL-Injection-Muster, Prozessausführung, unsichere Dateispeicherung, PendingIntent-Probleme

  • XML-Konfiguration — Schwachstellen in der Netzwerksicherheitskonfiguration, zu weit gefasste Dateiprovider-Pfade

  • Secret-Scanning — API-Schlüssel, Tokens, Passwörter, private Schlüssel, Cloud-Zugangsdaten, Zeichenketten mit hoher Entropie

Die gesamte Analyse ist regex-/musterbasiert und läuft nativ in der Workers-Runtime – ganz ohne externe Tools, Java oder Android SDK.

Related MCP server: APK Security Guard MCP Suite

Architektur

POST /mcp ──► McpServer (JSON-RPC 2.0) ──► Tool Router
                                              │
              ┌───────────────────────────────┘
              ▼
         Orchestrator
              │
    ┌─────────┼─────────┬─────────────┬──────────────┐
    ▼         ▼         ▼             ▼              ▼
 Manifest  Gradle   Source Code   XML Config    Secret
 Analyzer  Analyzer  Analyzer     Analyzer     Scanner
    │         │         │             │              │
    └─────────┴─────────┴─────────────┴──────────────┘
              │
              ▼
     Scoring + Deduplication ──► AnalysisReport

Wichtige Entwurfsentscheidungen:

  • Zustandslos — keine Sitzungen, keine Durable Objects

  • Minimale MCP-JSON-RPC-2.0-Implementierung (keine umfangreichen SDK-Abhängigkeiten)

  • Datengetriebene Regel-Engine mit erweiterbarem Regelregister

  • Unabhängige Analyzer mit einheitlichem Finding-Typ

  • Schlankes XML-Parsing über fast-xml-parser

  • Eingabevalidierung über zod

  • Bundle-Größe: ~66 KB gzip-komprimiert

MCP-Tools

Tool

Beschreibung

analyze_android_project

Vollständige Sicherheitsanalyse von Projektdateien

list_android_security_checks

Alle implementierten Sicherheitsregeln auflisten

explain_finding

Detaillierte Erklärung einer bestimmten Regel

health

Serverstatus und Statistiken der Regel-Engine

Installation

Gehosteter Server (empfohlen für Cline / MCP-Clients): keine lokale Installation erforderlich. Der Server läuft unter:

https://android-security-analyzer.ako-labs.workers.dev/mcp

Fügen Sie diese URL zur Konfiguration Ihres MCP-Clients hinzu (siehe Verbindung zu einem MCP-Client herstellen weiter unten).

Lokale Entwicklung:

npm install

Entwicklung

npm run dev

Dadurch wird ein lokaler Wrangler-Entwicklungsserver gestartet. Der MCP-Endpoint ist unter http://localhost:8787/mcp verfügbar.

Deployment

npm run deploy

Stellt auf Cloudflare Workers bereit. Erfordert eine wrangler-Authentifizierung (npx wrangler login).

Testen

npm test              # Run all tests
npm run test:watch    # Watch mode
npm run typecheck     # TypeScript type checking

Lokale MCP-Tests

Verbindung initialisieren

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Windows (PowerShell):

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' -UseBasicParsing).Content

Verfügbare Tools auflisten

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Windows (PowerShell): Die Antwort ist in result.tools; um die Liste als JSON zu erhalten, verwenden Sie die Ausgabe der Rohantwort:

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' -UseBasicParsing).Content

Oder über das Objekt: (Invoke-RestMethod ...).result.tools | ConvertTo-Json -Depth 5

Health-Check

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}'

Windows (PowerShell):

(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health","arguments":{}}}' -UseBasicParsing).Content

Analyse ausführen (minimales Beispiel)

Unix:

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "analyze_android_project",
      "arguments": {
        "projectName": "TestApp",
        "files": [
          {
            "path": "app/src/main/AndroidManifest.xml",
            "content": "<manifest><application android:debuggable=\"true\" android:allowBackup=\"true\"></application></manifest>"
          }
        ]
      }
    }
  }'

Windows (PowerShell):

$body = @{
  jsonrpc = "2.0"
  id = 4
  method = "tools/call"
  params = @{
    name = "analyze_android_project"
    arguments = @{
      projectName = "TestApp"
      files = @(
        @{
          path = "app/src/main/AndroidManifest.xml"
          content = "<manifest><application android:debuggable=`"true`" android:allowBackup=`"true`"></application></manifest>"
        }
      )
    }
  }
} | ConvertTo-Json -Depth 10
(Invoke-WebRequest -Method Post -Uri "http://localhost:8787/mcp" -ContentType "application/json" -Body $body -UseBasicParsing).Content

Verbindung zu einem MCP-Client herstellen

Fügen Sie Folgendes zu Ihrer MCP-Client-Konfiguration hinzu:

{
  "mcpServers": {
    "android-security-analyzer": {
      "url": "http://localhost:8787/mcp"
    }
  }
}

Für Produktionsumgebung (gehostet):

{
  "mcpServers": {
    "android-security-analyzer": {
      "url": "https://android-security-analyzer.ako-labs.workers.dev/mcp"
    }
  }
}

Sicherheitsregeln

Der implementierte Analyzer enthält 53 Sicherheitsregeln aus 5 Kategorien:

Kategorie

Präfix

Regeln

Beispiele

Manifest

MAN-*

17

Debug-Flags, allowBackup, exportierte Komponenten

Gradle

GRD-*

9

Release-Konfiguration, SDK-Versionen, Abhängigkeiten

Quellcode im (Java/Kotlin)

SRC-*

17

WebView-interaktion, SSL/TLS, Krypto, Injection, Dateispeicherung

XML-Konfiguration

XML-*

4

Netzwerksicherheitskonfiguration, Dateiprovider-Pfade

Secret

SEC-*

7

API-Schlüssel, Tokens, Passwörter, Cloud-Anmeldedaten

Jeder Befund enthält:

  • Stabile Regel-ID

  • Schweregrad (kritisch/hoch/mittel/niedrig/info) und Konfidenz (hoch/mittel/niedrig)

  • Dateipfad und Zeilennummer (falls bestimmbar)

  • Beweis-Snippet

  • CWE- und OWASP-Mobile-Top-10-Zuordnung

  • Konkrete Handlungsempfehlung

Bewertung

Der Risikowert (0-100) wird aus den Schweregraden der Findings berechnet:

  • Kritisch: 9 Punkte

  • Hoch: 6 Punkte

  • Mittel: 3 Punkte

  • Niedrig: 1 Punkt

  • Info: 0 Punkte

Die Rohsumme wird gegenüber einem erwarteten Maximum von 50 Punkten normalisiert.

Einschränkungen

  • Kein SAST-Ersatz — heuristische Muster-/Regex-Analyse, keine vollständige AST-/Datenflussanalyse

  • Kein Build erforderlich — auszüge analysieren, Build-Zeit-Transformationen nicht sichtbar

  • Falschpositive möglich — insbesondere beim Secret-Scanning und bei einigen Codesmustern

  • Workers-Limits — 128 MB Arbeitsspeicher, CPU-Limits, kein Dateisystemzugriff

  • Keine APK-/AAB-Analyse — nur Quellcode, keine Interprozedurale Analyse

  • Keine interprozedurale Analyse — Muster pro Datei abgeglichen, nicht über Aufrufgraphen

Muss

Projektstruktur

src/
├── index.ts                          # Worker entry point
├── server/
│   ├── mcp.ts                        # MCP JSON-RPC 2.0 handler
│   └── tools/                        # MCP tool implementations
│       ├── analyzeAndroidProject.ts
│       ├── listAndroidSecurityChecks.ts
│       ├── explainFinding.ts
│       └── health.ts
├── core/
│   ├── types.ts                      # TypeScript types & Zod schemas
│   ├── scoring.ts                    # Risk score computation
│   ├── registry.ts                   # Rule registry
│   └── orchestrator.ts              # Analysis orchestrator
├── analyzers/
│   ├── manifestAnalyzer.ts
│   ├── gradleAnalyzer.ts
│   ├── sourceAnalyzer.ts
│   ├── xmlConfigAnalyzer.ts
│   └── secretScanner.ts
├── parsers/
│   ├── xml.ts                        # XML parser wrapper
│   ├── gradle.ts                     # Gradle file parser
│   ├── source.ts                     # Source code pattern matcher
│   └── files.ts                      # File classifier
├── rules/
│   ├── manifestRules.ts
│   ├── gradleRules.ts
│   ├── sourceRules.ts
│   ├── xmlRules.ts
│   └── secretRules.ts
├── mappings/
│   ├── cwe.ts                        # CWE descriptions
│   └── owaspMobile.ts               # OWASP Mobile Top 10
└── utils/
    ├── lines.ts                      # Line number utilities
    ├── paths.ts                      # Path classification
    └── text.ts                       # Text utilities
test/
├── fixtures/                         # Sample Android project files
├── unit/                             # Unit tests per module
└── integration/                      # Full analysis integration tests

Neue Regeln hinzufügen

  1. Definieren Sie die Regel in der entsprechenden Datei unter src/rules/

  2. Fügen Sie die Erkennungslogik mit dem passenden Analyzer unter src/analyzers/ hinzu.

  3. Falls nötig, ergänzen Sie die CWE-Zuordnung in src/mappings/cwe.ts

  4. Fügen Sie einen Testfall an.

  5. Die Regel wird automatisch über src/core/registry.ts registriert.

Lizenz

MIT

Hinweis: Bei der Manifest-Kategorie empfehle ich die englischen Begriffe wie „exported components“ beizubehalten? Hmm, wait: The user wants German, and it's already translated in the table. Good.

F
license - not found
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides a one-stop automated solution for Android APK security analysis by integrating tools like JEB, JADX, APKTOOL, FlowDroid, and MobSF into unified MCP standard API interfaces.
    11
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Android APK triage, providing tools to parse APK headers, list DEX classes, and decode AndroidManifest.xml using apktool or androguard backends.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local static-analysis assistant for Android malware research that manages investigation cases, exposes MCP tools via a local server, and persists evidence-backed findings without cloud dependency.
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ako2345/android-security-analyzer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server