Skip to main content
Glama
ako2345

Android Security Analyzer

by ako2345

Android Security Analyzer

MCP-сервер для статического анализа безопасности исходного кода Android-приложений. Работает на Cloudflare Workers как удалённый MCP-сервер через Streamable HTTP.

Что он делает

Анализирует исходные файлы Android-проекта — без сборки проекта — и возвращает структурированный отчёт по безопасности. Анализ охватывает:

  • Анализ манифеста — экспортированные компоненты, опасные разрешения, незашифрованный трафик, debug-флаги, настройки резервного копирования, версии SDK

  • Конфигурацию Gradle/сборки — ошибки конфигурации release-сборки, устаревшие SDK, подозрительные зависимости, захардкоженные секреты

  • Исходный код (Java/Kotlin) — небезопасный WebView, обход SSL/TLS, слабая криптография, паттерны SQL-инъекций, выполнение процессов, небезопасное хранение файлов, проблемы с PendingIntent

  • XML-конфигурацию — слабые места в network security config, слишком широкие пути file provider

  • Сканирование секретов — API-ключи, токены, пароли, приватные ключи, облачные учётные данные, строки с высокой энтропией

Весь анализ основан на регулярных выражениях/паттернах и выполняется нативно в среде Workers без внешних инструментов, Java или Android SDK.

Related MCP server: APK Security Guard MCP Suite

Архитектура

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

Ключевые проектные решения:

  • Без состояния — нет сессий, нет Durable Objects

  • Минимальная реализация MCP JSON-RPC 2.0 (без тяжёлых SDK-зависимостей)

  • Управляемый данными движок правил с расширяемым реестром правил

  • Независимые анализаторы с единым типом Finding

  • Лёгкий XML-парсинг через fast-xml-parser

  • Валидация входных данных через zod

  • Размер бандла: ~66KB gzipped

MCP-инструменты

Инструмент

Описание

analyze_android_project

Полный анализ безопасности файлов проекта

list_android_security_checks

Список всех реализованных правил безопасности

explain_finding

Подробное объяснение конкретного правила

health

Статус сервера и статистика движка правил

Установка

Хостируемый сервер (рекомендуется для Cline / MCP-клиентов): локальная установка не требуется. Сервер работает по адресу:

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

Добавьте этот URL в конфигурацию вашего MCP-клиента (см. Подключение из MCP-клиента ниже).

Локальная разработка:

npm install

Разработка

npm run dev

Это запускает локальный dev-сервер Wrangler. MCP-эндпоинт доступен по адресу http://localhost:8787/mcp.

Деплой

npm run deploy

Развёртывание на Cloudflare Workers. Требуется аутентификация wrangler (npx wrangler login).

Тестирование

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

Локальное MCP-тестирование

Инициализация соединения

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

Список доступных инструментов

Unix:

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

Windows (PowerShell): ответ приходит в result.tools; чтобы увидеть список как JSON, используйте сырой ответ:

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

Либо через объект: (Invoke-RestMethod ...).result.tools | ConvertTo-Json -Depth 5

Проверка здоровья

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

Запуск анализа (минимальный пример)

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

Подключение из MCP-клиента

Добавьте в конфигурацию вашего MCP-клиента:

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

Для продакшена (хостируемый):

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

Правила безопасности

Анализатор реализует 53 правила безопасности в 5 категориях:

Категория

Префикс

Правил

Примеры

Manifest

MAN-*

17

debuggable, allowBackup, экспортированные компоненты, разрешения

Gradle

GRD-*

9

конфигурация release, версии SDK, зависимости, секреты

Source

SRC-*

17

WebView, SSL/TLS, криптография, инъекции, хранение файлов

XML Config

XML-*

4

network security config, пути file provider

Secret

SEC-*

7

API-ключи, токены, пароли, облачные учётные данные

Каждое найденное замечание включает:

  • Стабильный ID правила

  • Серьёзность (critical/high/medium/low/info) и уверенность (high/medium/low)

  • Путь к файлу и номер строки (когда это можно определить)

  • Фрагмент-доказательство

  • Сопоставление с CWE и OWASP Mobile Top 10

  • Практическую рекомендацию

Оценка риска

Оценка риска (0-100) вычисляется на основе серьёзности замечаний:

  • Critical: 9 баллов

  • High: 6 баллов

  • Medium: 3 балла

  • Low: 1 балл

  • Info: 0 баллов

Сырая сумма нормализуется относительно ожидаемого максимума в 50 баллов.

Ограничения

  • Не замена SAST — эвристика на основе паттернов/регулярных выражений, а не полный анализ AST/потоков данных

  • Сборка не требуется — анализируется исходный код, поэтому преобразования на этапе сборки не видны

  • Возможны ложные срабатывания — особенно для сканирования секретов и некоторых паттернов кода

  • Ограничения Workers — лимит памяти 128MB, ограничения по времени CPU, отсутствие доступа к файловой системе

  • Нет анализа APK/AAB — только исходный код

  • Нет межпроцедурного анализа — паттерны сопоставляются по файлам, а не по графам вызовов

Структура проекта

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

Добавление новых правил

  1. Определите правило в соответствующем файле в src/rules/

  2. Добавьте логику обнаружения в соответствующий анализатор в src/analyzers/

  3. Добавьте сопоставление CWE в src/mappings/cwe.ts при необходимости

  4. Добавьте тестовый пример

  5. Правило автоматически регистрируется через src/core/registry.ts

Лицензия

MIT

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