Commit Graph

154 Commits

Author SHA1 Message Date
samosvalishe 9d454dbd41 fix(captcha): адаптация 2026-08-19 20:02:00 +03:00
samosvalishe 60e3a69a7d fix(vkauth): отмена капчи не сжигает персону
свои же рестарты стоили поколения персоны и лока на минуту.
2026-08-18 15:29:32 +03:00
samosvalishe 9c2cc93a1c fix(session): рецикл после пробуждения только при тишине в канале
гэп-детектор сносил живые аллокации: сон сам по себе их не убивает, а
keepalive туннеля идёт через тот же relay. пинок теперь проверяет rx в окне
и схлопывает пачку сигналов в один рецикл.
2026-08-18 15:29:32 +03:00
samosvalishe fd9c6abf1e fix(udprelay): рецикл turn-аллокации пересоздаёт dtls-сессию
смерть аллокации теперь роняет и dtls: у новой аллокации другой relayed-адрес,
а миграция по dtls connection id под obf-профилем на сервере не работает.
логи turn-клиента уведены в logx - коды отказа vk не было видно нигде.
2026-08-18 15:29:32 +03:00
samosvalishe 49eecb3478 fix: устранение предупреждений линтера 2026-08-18 00:21:35 +03:00
samosvalishe 65bc8a8993 fix: устранение предупреждений линтера 2026-08-18 00:15:52 +03:00
samosvalishe 53b8345aa0 fix: возврат фонового детектора сна для рецикла аллокаций 2026-08-18 00:07:34 +03:00
samosvalishe 0bef2e8ab5 fix: soft reconnect on network handover without tunnel drop 2026-08-17 23:29:19 +03:00
samosvalishe 5fdd8c3112 fix(vkauth): ловим 486 как auth-error для рецикла аллокации 2026-08-17 18:45:31 +03:00
samosvalishe 3cf78316df perf: меньше фоновых таймеров при поднятом туннеле и опрос метрик только при видимом окне 2026-08-17 17:14:10 +03:00
samosvalishe a033cfb9a2 fix(udprelay): рецикл аллокации на простое туннеля 2026-08-17 17:13:44 +03:00
samosvalishe 5b5c93fae1 fix(captcha): устранение регрессий 2026-08-17 15:45:21 +03:00
samosvalishe 74241de764 break!: выпил tcp-режим туннеля
убраны флаги -mode и -bond: остался только udp-релей для wireguard.
удалены tcpfwd, tcpfwdserver, bondclient, bondserver, bondframe, kcptun,
wire/relay; proxy/common переехал в udprelay/dial.

BREAKING CHANGE: флаги -mode и -bond удалены; конфиги и ссылки freeturn://
с tcp-режимом больше не принимаются.
2026-08-17 00:27:23 +03:00
samosvalishe 648c55415b feat: comment cleanup 2026-08-16 23:13:01 +03:00
samosvalishe 6b14a95434 fix(captcha): персонная модель PoW и кэш TURN-кредов 2026-08-16 21:19:15 +03:00
samosvalishe 681dde8a6d feat(mobile): переживание сна и рестарта на Android 2026-08-16 21:19:14 +03:00
samosvalishe 95803f481a fix(captcha): fmt 2026-08-14 13:48:05 +03:00
samosvalishe 235ab1a646 fix(captcha): выровнять авторешение по живому браузеру 2026-08-14 13:46:39 +03:00
samosvalishe 1ca3451b76 refactor(captcha): убрать трассировку запросов
Разовая диагностика под сверку с виджетом; расхождения, которые она нашла,
закрыты коммитом выше.
2026-08-04 12:05:54 +03:00
samosvalishe 59a8c84157 fix(captcha): линтер в трассировке запросов 2026-08-04 12:01:46 +03:00
samosvalishe 4174f29c63 fix(captcha): блокировать рекламные хосты в ручном режиме
Внешние трекеры резались allowlist-ом и раньше, но ads.vk.com и ads.vk.ru
проходили по суффиксу домена. Captcha без них решается: adFp остаётся пустым,
ровно как у браузера с блокировщиком.
2026-08-04 11:56:03 +03:00
samosvalishe 4fa7810afa fix(captcha): привести запросы к поведению живого виджета 1.1.1388
Сверка протокола с бандлом вскрыла три расхождения.

Телеметрия: указатель виджет пишет только через externalCoords, а их заполняет
хост-страница iframe или нативный бридж мобильного SDK. Мы ходим на captcha
прямой навигацией, где живой браузер оставляет cursor и taps пустыми, - вместе с
ними ушла синтетическая траектория руки, недостижимая для этого режима. A/B на
живой captcha: 10/10 сессий против 9/10 со старым поведением.

Заголовки: навигация документа не несла Upgrade-Insecure-Requests и
Sec-Fetch-User, приоритет всем запросам ставился как у fetch, Origin уходил на
GET-ы, где Chrome его не шлёт, Referer навигации указывал на саму цель вместо
страницы-источника, а бандл тянулся профилем fetch вместо тега script. Cookie
отсутствовал в списке порядка и уезжал последним заголовком.

Куки: tls-client отбрасывает удалённые куки только по Max-Age - проверка Expires
в его jar закомментирована. Погашенная сервером remixir=DELETED из-за этого
уходила в каждом запросе. Обёртка в personanet транслирует протухший Expires в
Max-Age, который фильтр библиотеки понимает.

Трассировка запросов под FREETURN_CAPTCHA_TRACE - ей расхождения и найдены.
2026-08-04 11:56:03 +03:00
samosvalishe 8eb3873d27 fix(captcha): разносить попытки слайдера по дорожке
Соседние кандидаты отличаются одним свапом и получают почти равный скор,
поэтому топ-2 ранжирования - всегда пара соседей, и вторая попытка
промахивается вместе с первой. Вторая берётся не ближе трёх позиций от первой,
с откатом на соседей, если дальних кандидатов не хватило.
2026-08-04 10:37:08 +03:00
samosvalishe ee1356308b fix(captcha): не жечь персону на эскалации checkbox -> slider
Эскалация происходит в каждой сессии - слайдер в той же сессии проходит с тем
же browser_fp и device, значит отпечаток VK не отвергал. Сжигание на ней меняло
VisitorID каждый визит, хотя персона выводится из seed именно ради стабильности
между визитами. Сжигание по факту отказа в token_call.go сохранено.
2026-08-04 10:34:16 +03:00
samosvalishe d9a0554489 fix(captcha): убрать reverse-скор из ранжирования slider-кандидатов
Консенсус складывал ранги четырёх метрик с равным весом, но reverse-скор с
остальными не коррелирует: на корпусе из 8 пазлов luma/rgb/text сходились на
одном кандидате 8/8, reverse - 1/8. Кандидат, первый по всем трём рабочим
метрикам, уезжал в десятый ранг консенсуса и не попадал в две доступные
попытки. Побочно перестал считаться второй seam-скор на каждого кандидата.
2026-08-04 10:24:39 +03:00
samosvalishe ea477a3bc2 fix(captcha): обновить пин debug_info под виджет 1.1.1388 2026-08-04 10:24:39 +03:00
samosvalishe cdc7ee8d3d fix(routes): linter 2026-08-01 15:25:22 +03:00
samosvalishe a7798cd851 feat(proxy): встроенное управление маршрутами к TURN-серверам
- Добавлен пакет `internal/routemgr` для автоматического создания
  host-маршрутов (/32) через шлюз ОС (Windows, Linux, macOS).
- В `config.Client` и CLI добавлен флаг `-routes` (по умолчанию отключен).
- Интегрирован callback `OnTURNServer` в `udprelay` и `tcpfwd`
  для динамического добавления маршрутов при старте стримов.
- Для Android (и переименованных JNI-бинарей Linux) добавлено
  graceful-отключение менеджера маршрутов.
- Обновлена документация (`quickstart.md`): добавлены примеры с
  использованием `-routes` и `-client-id`.
2026-08-01 15:07:37 +03:00
samosvalishe 1f86fda104 refactor: перенос логики сессии в internal/session и обновление mobile-фасада 2026-08-01 03:05:14 +03:00
samosvalishe 7c28498f23 fix(captcha): адаптация под новую версию виджета 2026-07-30 23:03:17 +03:00
samosvalishe d1b769a062 fix(captcha): дожимать эскалацию checkbox -> slider в той же сессии
VK меняет тип челленджа на captchaNotRobot.check, а решатель считал это
фатальным и переигрывал сессию целиком (новый PoW + settings + initSession).
Теперь content_settings читается и из check-ответа, слайдер решается на месте.
2026-07-29 01:59:27 +03:00
samosvalishe 3211ed9ad5 feat(captcha)!: телеметрия виджета и одна Chrome-персона на установку
Персона строится детерминированно из FingerprintSeed (Client ID) и живёт
между перезапусками; при отказе captcha сжигается, и цепочка проходится
заново новой личностью с чистыми куками.

Телеметрия captcha (internal/captcha/telemetry.go) собирает аналитику
виджета: сэмплы сенсоров, connection-поля, курсор/тапы. Жест проживается
в реальном времени, иначе тайминги массивов не сходятся.

internal/personanet - TLS-клиент персоны (JA3 + split ClientHello), общий
для VK-auth и ручной captcha; порядок заголовков задаёт browserprofile.

BREAKING CHANGE: флаг -browser убран, семейство персоны всегда Chrome -
только Chromium даёт NetworkInformation и Generic Sensors, без которых
телеметрия captcha неполна. Класс устройства по-прежнему за -platform.
2026-07-28 16:40:32 +03:00
samosvalishe e5874e3c30 chore: lint fix 2026-07-13 21:48:45 +03:00
samosvalishe 8311a2e2f9 chore: fmt autofix 2026-07-13 21:37:22 +03:00
samosvalishe 305754cd60 fix(captcha): persona-модель вместо захвата профиля браузера 2026-07-13 21:29:34 +03:00
samosvalishe 6f934f10f4 chore: fmt autofix 2026-07-12 19:13:26 +03:00
samosvalishe b4189f8f43 fix(captcha): адаптировать авторешение под SPA-капчу VK 2026-07-12 18:54:08 +03:00
samosvalishe 4c0bed1797 fix(captcha): linter 2026-07-08 01:04:39 +03:00
samosvalishe ea1cb930cc refactor(captcha): вынести inject.js из Go и убрать легаси image-капчу 2026-07-08 00:50:41 +03:00
samosvalishe 3b33d33b9e fix(captcha): устойчивый разбор debug_info и сигнал дрейфа версии скрипта 2026-07-07 20:05:12 +03:00
samosvalishe b391d7bf25 fix(vkauth): классификация terminal-ошибок по коду перед текстом
Транзиентные коды (5, 6, 9, 14, 29) короткозамыкаются в nil до матча по
error_msg, поэтому подстрока в сообщении больше не может пометить рабочую
ошибку как терминальную и уронить подключение через ErrFatalNoStreams.
2026-07-02 12:28:31 +03:00
Anton 0a6bc0ae4f Merge pull request #36 from smediainfo/feat/host-socket-protect
feat(mobile): add host socket protector (SetProtect) for tun/VPN hosts
2026-07-01 19:30:28 +03:00
Anton 805228e62a Merge pull request #35 from smediainfo/feat/terminal-link-errors
fix(vkauth): fast-fail on terminal call/link errors (9000/9008, anonymous-only, full)
2026-07-01 19:29:28 +03:00
samosvalishe 12161aed4a feat(vk): улучшение браузерных отпечатков для captcha
- Добавлена поддержка Safari в -browser.
    Обновлена валидация флага, документация и выбор TLS/HTTP2-профиля для
    chrome, firefox и safari.

  - Улучшено переиспользование сохранённого браузерного профиля.
    Добавлен VK_PROFILE_PATH, сохраняется Accept-Language, определяется семейство
    браузера и mobile-профиль, а TLS-клиент пересобирается под захваченный UA.

  - Обновлена форма запросов VK Smart Captcha.
    Учитываются domain из redirect_uri, id.vk.ru origin/referer, settings_key для
    slider captcha, сохранённый browser_fp и device JSON.

  - Улучшено автоматическое решение captcha.
    Обновлён формат PoW-ответа, добавлена mobile accelerometer телеметрия,
    NetworkInformation отправляется только для Chromium-профилей, а slider solver
    получил обратный скоринг и более естественные cursor traces.

  - Убрано шумное throughput debug-логирование в relay-путях.
    Удалён Stats.LogEvery и его вызовы в UDP/TCP relay, при этом агрегированная
    TrafficStats-статистика сохранена.

  - Обновлены тесты и инфраструктура сборки.
    Добавлены проверки Safari, browser profile storage, captcha telemetry и
    saved-profile fallback; tls-client обновлён до v1.15.1; Android bind в
    Taskfile разделён для Windows и Unix-платформ
2026-06-30 19:16:35 +03:00
smediainfo 3481de79a3 feat(mobile): add host socket protector (SetProtect) for tun/VPN hosts
Checked type assertions (errcheck) and Close() error returns to satisfy golangci-lint.
2026-06-28 15:31:04 +03:00
smediainfo 014f964ad9 fix(vkauth): fast-fail on terminal call/link errors (9000/9008, anonymous-only, full) 2026-06-28 15:21:28 +03:00
samosvalishe 575f278a9a feat(mobile): переименование ios -> mobile, универсальный движок для iOS/Android 2026-06-25 02:44:31 +03:00
Anton fb998547eb Merge pull request #25 from tremendous-stimulus/master
gomobile-биндинг для приложения iOS
2026-06-24 15:25:14 +03:00
samosvalishe 384c350e7d fix: заменить устаревший token_type=messages на анонимные скоупы в VK авторизации 2026-06-24 11:35:59 +03:00
Tremendous Stimulus e2d59ef7e5 feat(ios): ручной fallback решения VK captcha через презентер приложения
Когда авто-решатель captcha не справился, прокидываем в vk-провайдер
ManualSolverFunc, который переиспользует SolveViaProxy и сигналит UI через
gomobile-интерфейс CaptchaPresenter (Show/Hide). Без презентера поведение
прежнее. Файлы библиотеки не затронуты - мостик в новом файле vk/iosmanual.go.
2026-06-23 23:21:08 +03:00