Skip to content

Releases: x2v0/mtapi

v2.13.0 — Browser overlay + debug UI split

Choose a tag to compare

@x2v0 x2v0 released this 25 Oct 07:31

Browser overlay (⚙️)

  • Toolbar: ⚙️ (back) ← url → ↻ 🐞
  • /proxy/PORT/* (Go, whitelist 5555/3000/8080) — same-origin, full debug
  • /proxy-url?url=... (Go, strips X-Frame-Options, injects base + nav)
  • Android.httpGet (Java DNS, no CORS, no X-Frame-Options)
  • fetch → srcdoc → iframe.src fallback
  • Spinner при загрузке
  • Default: DuckDuckGo HTML

Debug UI (🐞)

  • Back: MTAPI → ⚙️ (16×16)
  • 7 табов: Logs | Console | Errors | Logcat | DevTools | System | Network
  • Logs = JS Logs, Console = Console Eval (split)
  • Иконки: 🌐 🌙 🐞 — 16×16, FAB → 16×16
  • Performance: attach() → uptime (since attach)
  • JS Logs: scrollbar
  • Help: расширен + auto-shown при загрузке

DOM floating (🌳)

  • Root toggle: overlay (debug) / page (основное) + auto-switch
  • Select через overlay: Logcat/табы/кнопки — напрямую
  • Auto-refresh tree 3с (skip если не изменилось, save open+scroll)
  • 8 edge resize, soft clamp (60px видно)
  • Splitter ⋮⋮, minimize/hide
  • Select U+25A3 toggle (магента), Stop убран
  • Copy HTML (toast), AI Snap (toast)
  • disabled → серый (#444, #888)

Fixes

  • CI: run-all.sh --test-force-exit (33s, was 20+ min hang)
  • gofmt http.go (tabs after /proxy registration)
  • ci.yml timeout-minutes (go 10, js-tests 20)

Tests

140/140 PASS (118 mtapi + 22 universal)

APK

  • versionCode=291, versionName=2.13.0
  • 3.1 MB, arm64-v8a, V3 signature

v2.12.0 — Floating DOM: auto-refresh, root toggle, select через overlay

Choose a tag to compare

@x2v0 x2v0 released this 24 Oct 20:49

Floating DOM

Auto-refresh (3с): дерево обновляется каждые 3с (skip если не изменилось/невидимо, сохраняет open+scroll). ↻ — ручной.

Root toggle (▣/🌐): overlay (debug) ↔ page (основное). Авто при open/close.

Select через overlay: Logcat/табы/кнопки — выбираются напрямую. Страница — проброс. Floating — элементы floating. U+25A3 toggle, магента.

Окно: 8-edge resize, soft clamp (60px видно), resize без границы, panels resize:both, splitter ⋮⋮, drag mouse+touch.

Кнопки: Select U+25A3, Stop убран, Copy HTML (toast), AI Snap (toast), disabled серый, ? Help.

Help: расширен, auto-shown при загрузке.

Tests

140/140 PASS

APK

2.9 MB, arm64-v8a, V3

v2.1.0-security — аудит безопасности A+B+C+D

Choose a tag to compare

@x2v0 x2v0 released this 23 Oct 18:35

Безопасность

Закрыто 22 из 27 findings аудита: 5 Critical, 4 High, 7 Medium, 6 Low. Остались 2 в w2a (C-5 V2 signer, M-5 keystore pw).

Закрыто

A — Shizuku, auth, install

  • Shizuku удалён → «без ПК / без root» теперь правда
  • Fail-closed auth (без MTAPI_TOKEN сервер не стартует)
  • Constant-time token compare (crypto/subtle)
  • /restart требует Bearer token
  • bridge.Reset() — typed error вместо nil (не роняет сервер)
  • Токен не логируется в logcat
  • Install APK через Intent.ACTION_VIEW + FileProvider (без Shizuku)

B — path traversal, logcat, SMS, timeouts

  • filesSave, cameraPhoto, microphoneRecord — canonical path check
  • Per-method bridge timeouts (camera 35s, mic 65s, ping 35s, default 5s)
  • Убраны утечки clipboard/sensor/location в logcat
  • SMS: rate-limit 30s, лимит 1000 символов, E.164-ish

C — location leak, WebView, SSRF, sensors

  • locationWatchStart/Stop — removeUpdates + Looper.quitSafely() (нет thread leak, нет battery drain)
  • setWebContentsDebuggingEnabled только в BuildConfig.DEBUG
  • netFetch — SSRF-блоклист (RFC1918 + localhost)
  • sensorStreamStop — нормализация ключа через Sensor.getStringType()
  • saveFileToDownloads — sanitize + canonical check

D — Low/Medium

  • MIXED_CONTENT_NEVER_ALLOW
  • TTS кэширован (было: новый TextToSpeech на каждый вызов)
  • notify id через AtomicInteger (было: коллизии каждые 65с)
  • bad JSON логирует только длину (было: полный payload)
  • wifiInfo → <hidden> вместо <unknown ssid>
  • torch — понятное сообщение про отсутствие flash
  • Dead code (_atoi32, неиспользуемые импорты) убран

Тесты

  • go build — PASS
  • go vet — PASS
  • go test ./... — PASS
  • JS tests — PASS
  • gofmt — чисто

Открыто

  • C-5 (w2a): свой V2 APK signer — код написан, но не вызывается. Сейчас используется apksigner из Android SDK.
  • M-5 (w2a): keystore password виден в ps при apksigner. Закроется после C-5.

Установка

APK к релизу не приложен. Сборка через w2a требует Android SDK build-tools. См. README.

Лицензия

MIT — see LICENSE.