Skip to content

feat(detect): six competitor-derived VPN/proxy detectors#74

Merged
xtclovver merged 14 commits into
mainfrom
feat/competitor-detectors
Jun 11, 2026
Merged

feat(detect): six competitor-derived VPN/proxy detectors#74
xtclovver merged 14 commits into
mainfrom
feat/competitor-detectors

Conversation

@xtclovver

Copy link
Copy Markdown
Owner

Summary

Добавляет шесть детекторов VPN/proxy, заимствованных из проектов youtubediscord/yourvpndead и cherepavel/VPN-Detector, интегрированных в существующую архитектуру (VerdictEngine, VpnCheckRunner, EvidenceSource). Каждая фича разработана по TDD, прошла spec- и code-quality-ревью, плюс финальный холистический ревью.

Детекторы

  1. Расширение паттернов интерфейсов (NetworkInterfacePatterns) — добавлены utun/zt/tailscale/svpn/gre/l2tp/he-ipv6; xfrm направлен через IPsec-дизамбигуацию (не hard VPN), чтобы не давать ложных срабатываний на операторском VoLTE/IMS.
  2. Тип VPN через рефлексию (DirectSignsChecker) — классификация VpnTransportInfo.getType() → SERVICE/PLATFORM/LEGACY/OEM (по константам AOSP). Диагностическое, на вердикт не влияет.
  3. Host-route /32 эвристика (NativeSignsChecker, NativeInterfaceProbe) — детект /32 (IPv6 /128) маршрута к публичному IP VPN-сервера через физический интерфейс (утечка IP сервера). Сигнал NATIVE_ROUTE → R5 indirect. Переиспользует UrlSanitizer.isPublicAddress.
  4. SOCKS5 weak-auth brute + UDP ASSOCIATE (ProxyProber/ProxyScanner/BypassChecker) — словарь слабых учёток (RFC 1929) + UDP associate bypass (RFC 1928). Строго loopback, opt-in (toggle default false). Новый PROXY_AUTH_BYPASS → R1 hard DETECT.
  5. Clash/mihomo/sing-box REST API (ClashApiClient/ClashApiScanner/BypassChecker) — пассивный REST-probe localhost (порты 9090/19090/9091/9097), вытаскивает реальные destination IP VPN-серверов из /connections. Новый CLASH_API → R1 hard DETECT.
  6. TUN type 65534 из sysfs (C++ native_signs_probe.cpp → JNI → NativeSignsChecker) — детект ARPHRD_TUNTAP по /sys/class/net/<iface>/type независимо от имени интерфейса. Сигнал NATIVE_INTERFACE → R5 indirect.

Все новые user-facing строки локализованы на en/ru/fa/zh-rCN.

Также включены два независимых коммита мейнтейнера: исправление отображения marketplace и fastlane icon/screenshots.

Known follow-ups (не блокеры)

  • Рефактор 16-параметрной bypassCheck лямбды в VpnCheckRunner в BypassCheckParams data class (накопленный smell от фич 4+5; порядок параметров верифицирован корректным).
  • VerdictNarrative не отражает Clash-детекцию в structured discovered-секции (асимметрия с Xray); CLASH_API findings рендерятся через общий путь.
  • leakedDestIps из Clash не интегрированы в IpConsensusBuilder (другая ось — destination IP, не observed public IP; намеренно пропущено).

Test Plan

  • ./gradlew testDebugUnitTest — все юнит-тесты проходят
  • ./gradlew assembleDebug lint — сборка (включая native CMake для arm64-v8a/armeabi-v7a/x86_64) и lint без ошибок
  • Новые тесты: паттерны интерфейсов, VPN-тип маппинг (AOSP-константы), host-route фильтр, SOCKS5 auth-probe gate+loopback guard, Clash API парсинг+скан, sysfs type парсинг+детект
  • VerdictEngine: PROXY_AUTH_BYPASS и CLASH_API → DETECTED через R1

@sonarqubecloud

Copy link
Copy Markdown

@xtclovver xtclovver merged commit 653a9f6 into main Jun 11, 2026
3 checks passed
xtclovver added a commit that referenced this pull request Jun 11, 2026
Подготовка релиза v2.9.0 (versionCode 20900).

- Добавлены fastlane changelog 20900.txt для en-US/ru-RU/fa/zh-CN,
  охватывающие коммиты #73/#74/#75 (6 детекторов VPN/прокси,
  детектор эмулятора/изоляции, профили маркетплейса, Ed25519-подпись
  каталога, фиксы).
- README (все 4 локали) синхронизированы с новыми детекторами:
  дерево архитектуры, паттерны интерфейсов (4.2), BypassChecker
  (Clash API + SOCKS5-auth, 6.4), NativeSignsChecker (TUN/TAP по типу,
  host-route /32, эмулятор, изоляция, 12.1-12.4), тип VPN-транспорта (3.1).
- build.gradle.kts: versionCode 20802 -> 20900, versionName 2.8.2 -> 2.9.0.
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