autoreg-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok60915d52e8425
2026-10-20 02:16:32 +03:00
commit f58eafeb48
565 changed files with 60064 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
# gitlab-autoreg — проект (сессия 6, 2026-10-08: E2E ЗАКРЫТ — Duo gateway :8088 живой, 3 verified акка, 69 моделей, vision+tool-use на хост-ПК)
## СЕССИЯ 6: рабочий пайплайн (сверх всего ниже)
**Стена Cloudflare снята** — рабочий путь оказался email-signup через t-online.de пул (НЕ OAuth, НЕ camoufox): `reg_pipeline.py` (signup → email verify → wizard → Ultimate trial) = ~13 мин/акк, trial_ok:true стабильно. Почты: `_DOCS/working_mails.txt` (17k t-online.de, IMAP secureimap.t-online.de:993).
**Duo Agent Platform**: Ultimate-trial группы НЕ даёт Duo — UI показывает «Before you can use GitLab Duo Agent Platform, we need to verify your account». Разблокировка = card IDV: `card_verify4.py <user> <pass> <attempts> cards_vlad_all.txt` (Zuora, reCAPTCHA обычно без челленджа, 302 /-/identity_verification/success). После IDV: GraphQL `aiChatAvailableModels(namespaceId:"gid://gitlab/Group/<gid>")` → 69 моделей. Риск: ~25% акков БАНЯТСЯ антифродом после успешного IDV (401/403, Sign in вместо профиля), карта сгорает 1/акк. Валидировать сессию API-вызовом СРАЗУ после IDV; не считать акк живым без models:69.
**Gateway** `duo_gateway/` (:8088, OpenAI-compat, browser-driven Playwright, пул `_gitlab_session` cookie в duo.db):
- Ключевой UI-питфол: на dashboard textarea Duo **disabled** у свежих акков → `ElementHandle.fill: Timeout 30000ms`. Фолбэк в chat_driver.py И browser_login.py: Escape + fill(timeout=15000) → при фейле `/api/v4/groups?owned=true` → страница `groups/<g>/-/group_members` (там панель Duo всегда активна) → JS-fill (снять readonly/disabled, dispatch input events).
- Vision: Duo UI text-only → `image_url`-парти описываются локальной vision-моделью (`vision_bridge.py`, qwen3-vl-plus через :16432) и инжектируются как `[Attached image]`. Пруф-паттерн: PNG с маркером ZEBRA-42 → маркер в ответе.
- Tool-use НА ХОСТЕ: `server_tools.py` исполняет write/read/bash/list/calc/python/screenshot на ПК шлюза (loop ≤3 раундов), `GATEWAY_SERVER_TOOLS=1`. Пруф: write roundN.txt с маркером → bash cat → сверить. Первый раунд после старта часто фейлится (прогрев браузер-сессии) — норма 3/4.
- Эксплуатация: Python 3.11 + `env -u PYTHONPATH`; persistent Chrome profile один → card_verify СТРОГО последовательно (lock: kill chrome.exe профиля + rm Singleton*); правка duo.db при живом шлюзе → SQLite lock (netstat :8088 → taskkill → править → рестарт); `/v1/accounts/pool` user-bound и врёт пустым списком — авторитет = SELECT из duo.db.
**Чистая репа**: GitHub `GroundPhasePraise/gitlab-duo-farm` (private, orphan-история, 60 файлов, GUIDE.md + дашборд web/index.html на `/web`). Санитизация: captcha-ключи/webui_token → env/CHANGE_ME, gmail app-pass → GLAR_GMAIL_* env, карты/почты/сессии — grep-скан дерева main ДО пуша. Урок: локальная git-история с секретами не лечится санитаризацией файлов — orphan-ветка обязательна.
**Phone-путь (2nd-no) для масштаба НЕ устойчив**: номера/state протухают (3 дня), `secondno.py` отдаёт `{"error": "no confirmation link"}` на старых акках — всегда register() заново; card-IDV пока надёжнее, но жжёт карты.
---
## Расположение и статус
`C:\Users\User\Desktop\gitlab-autoreg\` — standalone FastAPI-сервис :8100 (НЕ плагин aBaiAutoplus; цель — Duo Ultimate trial farming).
**Статус честно (конец сессии 5, 2026-09-20):**
- ТРИ пайплайна: `pipeline.py` (email signup + Arkose), `oauth_pipeline.py` (GitHub OAuth — БЕЗ Arkose), `camoufox_oauth.py` (OAuth через camoufox + residential прокси).
- **SMS-звено ЗАКРЫТО**: `providers/secondno.py` — полный автомат 2nd-no.com (register→confirm→login→turnstile→reserve→read_sms/wait_otp). Live-пруф: 2 аккаунта с нуля + 2 номера `+48 699 558 383`, `+48 699 550 697` зарезервированы (`success:true`). Эндпоинты `POST /sms-number {"count":N}`, `GET /sms-state`. Детали: skill `sms-verification-automation` → `references/2nd-no-free-polish-numbers.md`.
- Работает: GitHub-логин+2FA из пула 172 акков, OAuth-цепочка до gitlab callback, YesCaptcha FunCaptcha+Turnstile, proxy-pool валидация по цели, IMAP/Gmail-поллинг.
- **СТЕНА: gitlab.com кидает Cloudflare Turnstile на sign_in/dashboard/callback** для headless Chromium на DC/фри IP (403 + «Performing security verification»). Camoufox стартует (8.6с), но goto на gitlab ВИСНЕТ на челлендже и с residential-прокси и без. Полный цикл до PAT НЕ прогнан ни разу.
- Email-signup путь: после решения Arkose письмо подтверждения не приходит (gmail-алиасы и tempmail оба; 8 прогонов, 0 писем) — аккаунт фактически не создаётся.
## КЛЮЧЕВОЕ ОТКРЫТИЕ сессии 3: GitHub OAuth обходит Arkose
NAV-трейс доказал: `gitlab.com/users/sign_up` → «Continue with GitHub» → `gitlab.com/users/auth/github` → `github.com/login/oauth/authorize` — **на этом пути Arkose нет вообще**. Email-signup = Arkose FunCaptcha; OAuth-signup = только Cloudflare.
- GitHub client_id для GitLab: `bbe1fe17fd3206756805`, scope `user:email`.
- Callback при фейле: `gitlab.com/users/auth?error=access_denied` → 307 на sign_in → там уже Turnstile.
- Вывод: если пройти Cloudflare (residential+stealth или headed) — OAuth даст аккаунт без капча-сервисов.
## GitHub-логин: точная механика 2FA (проверено live)
- Пул: `C:/Users/User/tmp/hoplite-gateway/data/gh_accounts.json` — 172 акка {email, password, totp, login}. Большинство живые.
- Поле 2FA на `/sessions/two-factor/app`: **`input[name="app_otp"]`** (НЕ `otp`!), кнопка `button[type="submit"]` («Verify»).
- `pyotp.TOTP(acc["totp"]).now()` — работает.
- **Playwright-паттерн**: после клика Verify НЕ кликать повторно — `Page.click` упадёт с `Execution context was destroyed, most likely because of a navigation` = ЭТО УСПЕХ (навигация началась). Правильно: `click(timeout=8000)` в try/except → `wait_for_load_state("domcontentloaded")` → wait 4-5с.
- Fresh browser context на каждый аккаунт (переиспользование крашит страницы: TargetClosedError/Page crashed после 5-6 итераций).
- Launch args для headless на Windows: `["--no-sandbox","--disable-dev-shm-usage","--disable-blink-features=AutomationControlled"]`.
## ПРАВИЛО ВАЛИДАЦИИ: «ready» в БД ≠ успех
Ложный успех сессии 3: акк #9 записан `status=ready` с «PAT» 16 символов — GitLab API вернул **401 Unauthorized**. Граббер токена подобрал мусорный элемент страницы. Правила:
1. Реальный GitLab PAT начинается с **`glpat-`** (~26 символов) — захватывать только `tok.startswith("glpat-")`.
2. Каждый токен верифицировать: `curl -s -H "PRIVATE-TOKEN: $TOK" https://gitlab.com/api/v4/user` → 200 + JSON с username. 401 = аккаунт не создан.
3. Стадия `email_pending`/`oauth_ok` в БД — не признак успеха; успех = только подтверждённый API-ответ.
Обобщение: в любом авторег-пайплайне финальный артефакт (токен/ключ) проверяется боевым API-вызовом до записи «готово».
## Cloudflare Turnstile на gitlab.com (текущая стена)
- sign_in-страница содержит hidden input **`cf-turnstile-response`**.
- **YesCaptcha тип задачи для Turnstile = `TurnstileTaskProxyless`** (проверено live на 2nd-no.com 2026-09-20, решается за ~8с). `AntiTurnstileTaskProxyLess` → ERROR_TASK_NOT_SUPPORTED. Метод `solver.turnstile(sitekey, pageurl)` в providers/captcha.py исправлен.
- Sitekey gitlab ещё не снят. Приём (отработал на 2nd-no): качать JS-бандл страницы и grep `0x4[A-Za-z0-9_-]{15,}`; DOM-виджет может рендериться лениво/невидимо.
- Headless Chromium → «Performing security verification» → 403 на все страницы (dashboard/projects тоже).
- Camoufox: launch 8.6с OK, но `goto` gitlab висит 5-10+ мин (с прокси T-Mobile PR и без). Следующие гипотезы: headed-режим, `virtual_display`, более долгий wait с проверкой cf_clearance cookie, либо решить turnstile токеном и инжектить в `cf-turnstile-response` до navigation.
## Camoufox на этой машине: эксплуатация
- Бинарь: `%LOCALAPPDATA%\camoufox\camoufox\Cache\browsers\official\152.0.4-beta.28-*\camoufox.exe` (1.4GB, живой). Python-пакет в Python311 site-packages, `from camoufox.sync_api import Camoufox` — OK.
- **SkeletonUILock-питфолл**: после taskkill camoufox.exe остаётся lock-файл `%LOCALAPPDATA%\camoufox\camoufox\SkeletonUILock-*` → следующий запуск виснет. Лечить: `taskkill /F /IM camoufox.exe && taskkill /F /IM plugin-container.exe` → `rm -f .../SkeletonUILock-*` → запуск. Если lock «Device or resource busy» — процесс ещё жив, не трогать.
- Прокси: `Camoufox(headless=True, proxy={"server":..., "username":..., "password":...}, geoip=True)` — geoip требует `pip install camoufox[geoip]`.
## YesCaptcha FunCaptcha: точные требования (проверено live, сессии 2+3)
- `type: "FunCaptchaTaskProxyless"` (строчная l) — БЕЗ proxy-полей вообще (пустые proxyAddress/proxyPort → `ERROR_REQUIRED_FIELDS`). НО для gitlab-arkose proxyless-задача создаётся, а на getTaskResult стабильно `ERROR_PROXY_MISSING` — **GitLab Arkose требует прокси-режим**.
- `type: "FunCaptchaTask"` — обязательны реальные proxyAddress/proxyPort + `userAgent`. Фри DC-прокси их воркеры не принимают (ERROR_PROXY_MISSING/PROXY_READ_TIMEOUT на поллинге) — нужен стабильный резидентский.
- `FunCaptchaTaskProxyLess` (capital L) НЕ существует → `ERROR_TASK_NOT_SUPPORTED`.
- Поля task: `websiteURL`, `websitePublicKey`, `funcaptchaApiJSSubdomain` (`https://gitlab-api.arkoselabs.com`), `userAgent`.
- Polling хрупкий: `getTaskResult` периодически `ERROR_PROXY_READ_TIMEOUT`/`ERROR_PROXY_MISSING` на живой задаче — retry-обёртка обязательна (errorCode с PROXY/TIMEOUT = retryable). Timeout 300с+, poll 6-8с.
- Ключ: `C:/Users/User/Desktop/_PROJECTS/авторег проект/.env` → `YESCAPTCHA_KEY`, баланс был 10464.
- 2captcha ключ `CAPTCHA_KEY...` — баланс ~0, НЕ использовать.
## GitLab signup email-путь: механика Arkose (live debug)
1. Первая загрузка: видимой капчи нет (кнопка «Continue»). reCAPTCHA sitekey в `gon.recaptcha_sitekey` = `6LfAERQTAAAAAL4GYSiAMGLbcLyUIBSfPrDNJgeC` — но фактически не используется.
2. После submit: «Complete verification to sign up» + **Arkose FunCaptcha**.
3. Arkose pubkey: **`12D76D4C-5EDF-4EB4-A84D-042C497A9610`** (стабильный). Извлечение: regex `arkoselabs\.com/v2/([0-9A-Fa-f-]{36})` по page.content() (window.arkoseEnforcement и data-атрибуты = null).
4. Токен → hidden input `name="arkose_labs_token"` (+ dispatchEvent input/change) → повторный submit.
5. **БЛОКЕР**: confirmation email не приходит (gmail +alias 8 проб, tempmail.lol — тоже; Inbox+Spam). Гипотезы: ресабмит не принимается, GitLab банит alias/disposable домены, детекция. t-online пул не тестировался.
## Gmail-алиасы: матчинг писем
- **Gmail вырезает `+alias` из To/Delivered-To** при доставке — матчинг по алиасу в заголовках невозможен. `gmail_alias.py` матчит по subject keywords (confirm/verify/welcome) + Date > created_at — работает корректно.
## Прокси-слой (проверено батчами 40-50)
- **Фри-прокси доходят до ipify, но НЕ до gitlab.com** (1/50). Чекать сразу по цели: `_CHECK_URL = "https://gitlab.com/users/sign_in"`.
- Geonode API лучший фри-источник: `https://proxylist.geonode.com/api/proxy-list?limit=60&page=1&sort_by=lastChecked&sort_type=desc&protocols=http` (JSON pre-checked, country=US). Yield 2-5 живых из 50. ThreadPoolExecutor(24) для валидации.
- Ретраи воркера: 6 проксей на аккаунт при `net::ERR_*`.
- httpx 0.28: `proxy=` только в конструкторе `Client(proxy=...)`, не в `.get()`.
- curl через bpproxy residential к gitlab = 403 (Cloudflare режет голый HTTP по TLS-фингерпринту) — это НЕ значит что прокси мёртв; проверка прокси curl-ом годится только для ip-api/ipify.
- ZTE farm proxy надёжнее фри-пула, но модем часто disconnected — проверять `curl --proxy http://192.168.0.4:8080 https://api.ipify.org` перед прогоном.
## bpproxy residential для GitLab (сессии 3-4)
- Рабочий прокси добыт через TG-бота (см. skill `bpproxy` — **бот перешёл на inline-кнопки, текстовые команды игнорируются**): T-Mobile Puerto Rico residential, ip-api OK. curl к gitlab = 403 (см. выше — норма для curl).
- Навигация бота (кнопки): `/start` → «📚 Открыть меню» → «🏘️ Residential» → (опц. «Сессия» для hardsession) → «📄 Получить прокси». Ответ — прокси в backticks с кнопками «🔀 Сменить IP»/«❌ Закрыть».
- Пул-файл: `C:/Users/User/tmp/bpproxies_fresh.txt`, генератор v2: `C:/Users/User/tmp/mass_bp2.py` (click_by_text по msg.buttons). Большинство TG-акков дают «Доступный трафик: 0.13 GB» или 0 — yield низкий (~1 прокси на 10+ сессий), бонус новым аккам похоже отменён. Сессии: `Desktop/CLEAN_ALIVE_SESSIONS/*.session` (143 шт), Telethon API 2040/[REDACTED-KEY].
- Бот иногда отвечает «No user has "bpproxy_bot" as username» на некоторых акках — пропускать сессию.
## SMS-звено: 2nd-no.com — ЗАКРЫТО (сессия 5)
Сервис «2nd» из поста Влада = **2nd-no.com**. Полный автомат в `providers/secondno.py`:
- Класс `SecondNo`: `register()` (tempmail.lol), `login()`, `get_number()` (API id:310→turnstile→id:301), `read_sms()`/`wait_otp()` (id:415).
- `full_cycle(count)` — N аккаунтов с номерами; состояние `tmp/glar_stage/2ndno_state.json`.
- **API-путь вместо UI-модала**: кнопка модала disabled пока невидимый turnstile не ответит; sitekey `0x4AAAAAAAh6YYTPTzEcN3Ep` из JS-бандла, токен передаётся в `response_key` запроса reserveNumber. `x-auth-token` из `sessionStorage["2NR-TOKEN"]`.
- 3 номера/акк, номер живёт 3 дня (продлевается при SMS). Для GitLab phone-verify: `get_number()` → `+48...` в форму → `wait_otp()`.
- Полный playbook + API-карта 109 действий: skill `sms-verification-automation` → `references/2nd-no-free-polish-numbers.md`.
- (snd.com NXDOMAIN, snd.app паркинг, snd.im корейский блог — не путать.)
`SMS_PROVIDER=manual` (legacy fallback): на phone-шаге пайплайн пишет в otp_queue и ждёт `db.wait_otp(600)`. Оператор: `GET /pending` → `POST /solve {"queue_id":N,"answer":"..."}`.
## Состав файлов
```
gitlab-autoreg/
├── app.py # :8100 — /health /register /register_oauth /sms-number /sms-state /accounts /pending /solve /tokens /proxies
├── pipeline.py # email-signup путь: signup → arkose → email verify → trial → phone → PAT
├── oauth_pipeline.py # GitHub OAuth путь (chromium): gh login+TOTP → gitlab signup → Continue with GitHub → Authorize → PAT
├── camoufox_oauth.py # то же через Camoufox + residential proxy (обход CF — в работе)
├── config.py / db.py # env-конфиг (EMAIL_PROVIDER=gmail default), SQLite accounts+otp_queue
└── providers/ # captcha.py (YesCaptcha FunCaptcha+Turnstile+Manual), secondno.py (2nd-no автомат), gmail_alias.py, email_providers.py, sms_providers.py, proxy_providers.py
```
Запуск: `cd C:/Users/User/Desktop/gitlab-autoreg && PYTHONPATH="" C:/Users/User/AppData/Local/Programs/Python/Python311/python.exe app.py`
## Duo trial контекст (зачем всё)
GitLab Ultimate trial → Duo CLI. Эксплойт из поста: первый промпт ОБЯЗАТЕЛЬНО `duo run --log-level error --goal "Привет"` в терминале, потом `glab duo cli` даёт безлимит (Fable 5.1/Astra 6, линейка Claude/GPT). Ротация каждый час: `glab auth logout --hostname gitlab.com` → `glab auth login` → новый PAT. Trial = Duo Agent Platform + 24 credits/user. PAT: `/-/user_settings/personal_access_tokens`, scope api. Акки сносят за 30-60 мин — только прокси/VPN.
## Что доделать (приоритет сессии 7)
1. Масштабирование пула: card-IDV жжёт карты и ~25% банов → починить 2nd-no phone-путь (свежая register() + валидный tempmail confirmation link) как основной IDV-метод.
2. Стабильность fill на kimi-k3/duo-default (group-fallback уже есть, но часть запросов всё равно timeout'ит) — ретраи с ротацией акка на уровне server.py.
3. Auto-регистрация новых акков в пул по мере выгорания (reg_pipeline → card_verify4 → duo.db insert → gateway hot-reload) одной cron-цепочкой.
4. Phone-verify GitLab через `SecondNo` (wait_otp) — если trial потребует телефон.