89 lines
10 KiB
Markdown
89 lines
10 KiB
Markdown
---
|
||
title: "ForgetMeAI: семейство бесплатных web-chat прокси (DeepSeek/Qwen/GLM/Kimi) — паттерны обхода анти-бот"
|
||
type: concept
|
||
tags: [forgetmeai, llm-web-proxy, lwp, captcha, baxia-waf, pow, cloakbrowser, stealth, deepseek-web, qwen-web]
|
||
sources: [../raw/forgetmeai-repo-analysis-2026-08-22.md]
|
||
updated: 2026-08-22
|
||
---
|
||
|
||
# ForgetMeAI: бесплатные web-chat прокси — что там есть для lwp
|
||
|
||
Обзор GitHub-аккаунта [ForgetMeAI](https://github.com/ForgetMeAI) (8 репозиториев, автор t.me/forgetmeai) 2026-08-22. Весь аккаунт — ровно та же ниша, что lwp (llm-web-proxy): **локальные прокси, превращающие бесплатные веб-чаты LLM в OpenAI/Anthropic-совместимые API**. Часть репов — прямые аналоги комбо lwp, их подходы к анти-боту — готовый референс для разблокировки qwen-web и укрепления deepseek-web.
|
||
|
||
## Репозитории (по теме)
|
||
|
||
| Репо | ⭐ | Что это | Отношение к lwp |
|
||
|---|---|---|---|
|
||
| FreeDeepseekAPI | 318 | deepseek web-chat → OpenAI/Anthropic API. **PoW-солвер** (`lib/pow.js`) + Chrome-расширение-экспортёр сессии | прямой аналог комбо deepseek-web; PoW уже портирован в lwp (`src/vendor/deepseek-pow.ts`) |
|
||
| FreeQwenApi | 212 (форк) | qwen web-chat → OpenAI API. **Работает через браузер** (stealth-пуппетеер, fetch внутри `page.evaluate`) | ключ к разблокировке [llm-web-proxy-qwen-web]: baxia-WAF проходится браузерным фингерпринтом |
|
||
| FreeGLMKimiAPI | 67 | GLM/Z.ai + Kimi прокси. Прямой fetch + browser-fallback, **CloakBrowser** (патченый Chromium), классификация капчи (Aliyun WAF, `FRONTEND_CAPTCHA_REQUIRED`, `人机验证失败`, punish) | референс: классификаторы капчи, cloakbrowser-заметки |
|
||
| FreeKimiAPI | 27 | Kimi cfbt endpoint прокси, circuit-breaker на `browser_signature_banned` (1010) | простейший аналог, паттерн circuit-breaker уже есть в lwp |
|
||
| FreeNIMAPI | 11 | мост к NVIDIA NIM (trial) | не про капчу |
|
||
| grok_account_checker | 0 | мониторинг X-аккаунтов/SuperGrok: официальный OAuth 2.0 PKCE (Playwright) | честно: не обходит Turnstile/CAPTCHA/2FA |
|
||
|
||
## Главный паттерн аккаунта: НЕ решать капчу, а обходить через реальную браузерную сессию
|
||
|
||
Универсальный приём у ForgetMeAI (и у всех живых free-chat прокси):
|
||
|
||
1. **Один раз логинишься в реальном Chrome** (видимый режим, persistent-профиль) → капчу/2FA проходишь руками.
|
||
2. **Сессия захватывается** одним из способов:
|
||
- Chrome-расширение читает куки + localStorage из залогиненной вкладки (FreeDeepseekAPI: `token`, `ds_session_id`, `smidV2`, localStorage `hif_dliq`/`hif_leim`);
|
||
- экспорт полного cookie-заголовка / cookie-файла и вставка в конфиг;
|
||
- persistent browser profile (профиль переживает рестарты, куки живут).
|
||
3. **Дальше прокси ходит с живой сессией**: прямой fetch с cookie-jar, ИЛИ fetch внутри браузерного контекста (`page.evaluate`) — когда WAF привязан к device-фингерпринту, а не к кукам.
|
||
|
||
Исключение из «не решать»: **DeepSeek PoW** — его решают локально (WASM-солвер, см. ниже).
|
||
|
||
## PoW-солвер DeepSeek (FreeDeepseekAPI/lib/pow.js)
|
||
|
||
- Грузит WASM-модуль челленджа по URL, **компилирует один раз и кэширует** `WebAssembly.Module` (по URL), каждый solve — свежий Instance (чистая линейная память).
|
||
- Префикс челленджа: `salt + '_' + expire_at + '_'`, затем `challenge + prefix` в память WASM, вызов `wasm_solve(sp, cBytes, cBytes.length, pBytes, pBytes.length, difficulty)`, ответ — `float64` (ans) → `Math.floor`.
|
||
- Жёсткий таймаут на fetch WASM (15s), неудачная загрузка не кэшируется.
|
||
- **В lwp PoW уже есть** (`src/vendor/deepseek-pow.ts` + `deepseek-pow-solver.cjs`), deepseek-комбо работает — ничего не портировать. Сравнить подходы при желании: lwp-версия из omniroute (TS), ForgetMeAI-версия автономная (CJS, 54 строки) — пригодна как fallback/референс.
|
||
|
||
## qwen-web: браузерный путь через baxia-WAF (главное для lwp)
|
||
|
||
Наш вывод из сессии 2026-08-22 ([[omniroute-combo-deepseek-web-tuning]]): капча Alibaba baxia-WAF привязана к **device-фингерпринту** (bx-umidtoken минтится JS из sg-wum.alibaba.com), не к cookie; Node-fetch и даже CDP-запросы мимо страницы виснут.
|
||
|
||
FreeQwenApi подтверждает и даёт рабочий путь:
|
||
|
||
- **`src/browser/browser.js`** — puppeteer-extra + stealth-плагин + тяжёлый фингерпринт-спуфинг в `page.evaluateOnNewDocument`: `navigator.platform='Win32'`, `hardwareConcurrency=8`, `deviceMemory=8`, фейк `plugins` (Chrome PDF Plugin), `connection` (4g/50ms/10Mbps), `getBattery`, **шум в `HTMLCanvasElement.toDataURL`** (±2 на пиксель — бьёт canvas-фингерпринт), обёртки-задержки на `mousemove/mousedown/mouseup` (человечность). Launch args: `--disable-blink-features=AutomationControlled`, `--disable-web-security` и др.
|
||
- **`src/api/chat.js`** — чат-запрос исполняется **внутри страницы**: `page.evaluate(async (data) => fetch(data.apiUrl, {...}))`. Так запрос несёт настоящий umidtoken + canvas-фингерпринт + same-origin → WAF пропускает. Node-стриминг пробуется первым, при анти-бот (antiBot детект: `rgv587|fail_sys_user_validate|_____tmd_____|purecaptcha`) — fallback на browser-fetch.
|
||
- Детект анти-бот-эневелопов на HTTP 200: `lower.includes('/_____tmd_____/punish') || (window._config_ && captcha) || purecaptcha`.
|
||
- Первичная авторизация — ручная (видимый браузер, `startManualAuthenticationPuppeteer`), сессия — cookies в `sessions/accounts/`.
|
||
|
||
**Вывод для lwp:** рабочий сценарий qwen-web = **браузерный executor** (puppeteer/playwright + stealth + фингерпринт-спуфинг + fetch в `page.evaluate`), а не реплей cookie-jar через undici. Референс-код закоммичен в lwp: `docs/reference/forgetmeai/`.
|
||
|
||
## CloakBrowser-заметки (FreeGLMKimiAPI/docs/cloakbrowser-notes.md)
|
||
|
||
Пропатченный Chromium против анти-бот (CloakHQ/CloakBrowser + Manager):
|
||
|
||
- **Настоящий патченый браузер** (не JS-инъекции): stealth на уровне бинаря, Playwright-совместимый `launchPersistentContext()`.
|
||
- **Persistent не-incognito профили** обязательны: сохраняются куки/localStorage, меньше детекта.
|
||
- **Humanize-слой**: печать/клики/скролл с реалистичными задержками через доверенные input-пути.
|
||
- **Согласованность locale/timezone/proxy**: флаги браузера + geoip-сверка с IP прокси (в lwp-контексте — per-account proxy уже есть).
|
||
- Очистка lock-файлов профиля (`SingletonLock/SingletonCookie/SingletonSocket`) после падений.
|
||
- **Ограничение:** патченый браузер не решает уже сработавшую капчу — один раз пройти руками в видимом профиле.
|
||
|
||
## Классификация капчи/анти-бот (референс-регэкспы)
|
||
|
||
- DeepSeek: PoW-челлендж (salt/expire_at/difficulty), 503 `chat_admission_busy` = capacity (не капча).
|
||
- Qwen (baxia-WAF): `FAIL_SYS_USER_VALIDATE`, `RGV587_ERROR::SM::...`, `_____tmd_____/punish`, `x5secdata`, `rgv587`, `purecaptcha`, `success:false` на 200.
|
||
- Z.ai (GLM): `FRONTEND_CAPTCHA_REQUIRED`, `人机验证失败`, `请重新验证`, `刷新页面以更新应用`, `aliyun`, `waf`, `punish`.
|
||
- Kimi cfbt: `browser_signature_banned` (1010), `access denied`.
|
||
- Общий маркер WAF-страницы: `text/html` в ответе API + `aliyun_waf|baxia|<html`.
|
||
|
||
## Что берём в lwp (статус)
|
||
|
||
- [x] PoW-солвер — уже портирован (`src/vendor/deepseek-pow.ts`).
|
||
- [x] Классификаторы капчи qwen — уже в `src/lib/qwen-web-executor.ts` (isQwenErrorEnvelope: FAIL_SYS_USER_VALIDATE/punish/x5secdata).
|
||
- [x] Референс-код браузерного пути qwen — `docs/reference/forgetmeai/` (коммит 2026-08-22).
|
||
- [ ] **Браузерный executor qwen** (puppeteer + фингерпринт-спуфинг + fetch в page.evaluate) — следующий шаг для [llm-web-proxy-qwen-web], см. [[qwen-waf-browser-path]] в вики lwp.
|
||
- [ ] (опция) CloakBrowser как запасной движок для z.ai/kimi, если понадобятся.
|
||
|
||
## Связанное
|
||
|
||
- [[omniroute-combo-deepseek-web-tuning]] — диагноз web-комбо, baxia-WAF, план lwp
|
||
- [[llm-web-proxy]] (таска) — спек lwp
|
||
- lwp/.wiki: [[qwen-waf-browser-path]], [[forgetmeai-qwen-browser-fetch]] (sources)
|