Repository navigation
Releases: x2v0/mtapi
Release list
v2.13.0 — Browser overlay + debug UI split
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
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
Безопасность
Закрыто 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 tokenbridge.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.DEBUGnetFetch— SSRF-блоклист (RFC1918 + localhost)sensorStreamStop— нормализация ключа черезSensor.getStringType()saveFileToDownloads— sanitize + canonical check
D — Low/Medium
MIXED_CONTENT_NEVER_ALLOW- TTS кэширован (было: новый
TextToSpeechна каждый вызов) notifyid черезAtomicInteger(было: коллизии каждые 65с)bad JSONлогирует только длину (было: полный payload)wifiInfo→<hidden>вместо<unknown ssid>torch— понятное сообщение про отсутствие flash- Dead code (
_atoi32, неиспользуемые импорты) убран
Тесты
go build— PASSgo vet— PASSgo 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.