Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
fortress — Двигатель Stealth Chromium, который предотвращает блокировку скраперов и браузерных агентов, всего одной строкой изменения кода. | Kitploit
Инструменты/GitHubGitHub/tiliondev/fortress
Обход IDS/IPSАнти-БотПодмена Цифрового Отпечатка
GitHubtiliondev/fortress

fortress

Двигатель Stealth Chromium, который предотвращает блокировку скраперов и браузерных агентов, всего одной строкой изменения кода.

Репозиторий
4363227 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Fortress

Один движок браузера, чтобы править всеми

Стелс-движок Chromium

Chromium pip npm Docker pulls
CreepJS Runtime.enable leak
Copy for agent llms.txt
MCP server npm tilion-mcp

Fortress — это стелс-движок Chromium, который предотвращает блокировку ваших скраперов и браузерных агентов одной строкой кода. Детекторы ботов выявляют автоматизацию, считывая отпечаток браузера; Fortress корректирует этот отпечаток внутри C++ Chromium, так что браузер представляется обычной установкой Chrome. Скраперы завершают свои сеансы, агенты доходят до нужных страниц, а CreepJS, Sannysoft, BrowserScan и живой Cloudflare Turnstile определяют его как человека. Укажите ваш существующий Playwright или Puppeteer на Fortress через CDP, и больше ничего в вашем коде не меняется.

Blink · V8 · BoringSSL патчи внутри дерева · WebGL на ANGLE / D3D11 · TLS с JA3/JA4-когерентностью · ежемесячный ребейз апстрима · воспроизводимые, прошедшие проверку полигоном релизы

Fortress проходит живой вызов Cloudflare, затем успешно проходит sannysoft и BrowserScan

Неотредактированный захват бинарного файла Fortress в реальном окне: он проходит живой вызов Cloudflare, делает bot.sannysoft.com полностью зелёным, и показывает BrowserScan «Нормальный». Воспроизведите с помощью tools/gauntlet.py.


🆕 Что нового — 151.0.7908.0 · Обновление движка

Выпущено. Когерентные персоны для каждого запуска, усиленные.

  • Клавиатура под локаль (QWERTY / QWERTZ / AZERTY) · медиаустройства для каждой персоны · полный проход когерентности с паритетом доставки.
  • Платформа ↔ GPU ↔ часовой пояс ↔ язык ↔ голоса ↔ клавиатура изменяются как одно согласованное реальное устройство — при каждом запуске, из одного бинарного файла.
  • Паритет нативного кода (toString() остаётся [native code]), независимость от контекста (main / worker / iframe) — согласованность скомпилирована в браузере, а не пропатчена в JavaScript.```bash pip install -U tilion-fortress # or: docker run --rm -p 9222:9222 tilion/fortress:latest
root@kitploit:~
**[→ полные примечания к релизу](https://github.com/tiliondev/fortress/releases/tag/v151.0.7908.0)**


## Содержание

| | |
|---|---|
| **[Что это такое](#what-it-is)** · **[Быстрый старт](#quick-start)** | что это такое, установка, первый скрипт, настройка ИИ-агента |
| **[Fortress MCP](#the-fortress-mcp--stealth-browsing-as-agent-tools)** | 29 инструментов скрытного браузера для ИИ-агентов (бета) |
| **[Зачем патчить движок, а не страницу](#why-patch-the-engine-not-the-page)** | тезис о самораскрывающемся JS + три уровня обнаружения |
| **[Как Fortress сравнивается](#how-fortress-compares)** | сравнение с puppeteer-stealth · Camoufox · CloakBrowser · закрытые вендоры |
| **[Доказательства: результаты live-детекторов](#proof-live-detector-results)** | CreepJS / Sannysoft / BrowserScan / Cloudflare, со скриншотами |
| **[Настройка персоны](#configure-the-persona)** | поверхность отпечатка `--uxr-*` |
| **[Работает с вашим стеком](#works-with-your-stack)** | browser-use · Crawl4AI · Stagehand · LangChain |
| **[Сборка и проверка](#build--verify)** | воспроизведение из исходников, проверка происхождения |
| **[Справка](#reference)** | устранение неполадок · FAQ · дорожная карта · структура репозитория |

---

## Что это такое

Fortress — это форк Chromium, который подменяет отпечаток браузера изнутри движка. Поверхности, которые считывают детекторы ботов (canvas, WebGL, audio, шрифты, navigator и ещё около тридцати), исправляются в **C++** коде Chromium, без слоя JavaScript-патчей поверх, которые страница могла бы обнаружить.

Он поставляется как обычный бинарник браузера, предоставляющий CDP-эндпоинт. Направьте на него Playwright, Puppeteer или любой CDP-клиент, и ваша существующая автоматизация будет работать без изменений.

JavaScript-стелс-патч оставляет дополнительный слой, который страница может обнаружить: `.toString()` показывает исходный код переопределения, а повторное получение того же примитива из iframe или воркера обходит его. Fortress исправляет поверхность прямо в движке, поэтому `navigator.vendor` обращается к настоящему C++ геттеру, сообщает `[native code]` и возвращает одно и то же значение из любого контекста. Страница, проверяющая себя, видит обычный Chromium. Именно поэтому ваша автоматизация проходит там, где раньше её обнаруживали, а оставшиеся блокировки связаны с вашими прокси и поведением, а не с браузером. В разделе [Зачем патчить движок, а не страницу](#why-patch-the-engine-not-the-page) подробно описана механика обнаружения.```python
from tilion_fortress import Fortress
from playwright.sync_api import sync_playwright

with Fortress() as f:                                   # launches the stealth engine on a CDP endpoint
    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(f.cdp_url)
        page = browser.new_page()
        page.goto("https://bot.sannysoft.com")
        page.screenshot(path="all-green.png")
root@kitploit:~
import { Fortress } from "tilion-fortress";
import { chromium } from "playwright";

const f = await Fortress.launch();                      // stealth engine on a CDP endpoint
const browser = await chromium.connectOverCDP(f.cdpUrl);
const page = await browser.newPage();
await page.goto("https://browserscan.net");
await browser.close();
await f.close();

12-секундный тур

Fortress за 12 секунд: проходит CreepJS, Sannysoft, BrowserScan и rebrowser, парсит реальные сайты и обходит Akamai на aa.com, lowes.com, macys.com и kohls.com.

Один цикл, все реальные захваты: проходит CreepJS / Sannysoft / BrowserScan / rebrowser → парсит структурированные данные через CDP → обходит Akamai на aa.com · lowes · macys · kohls (один и тот же резидентный IP).

Реальный парсинг, полностью безголовый

Неотредактированные захваты движка Fortress, управляемого через CDP. Никаких плагинов скрытности, никаких JS-патчей: отпечаток исправлен в бинарном файле. Воспроизведите любой из них с помощью examples/scrape_demos.py.

Fortress извлекает books.toscrape.com в типизированные JSON-записи в реальном времени через CDP

Структурированное извлечение: записи собираются в типизированный JSON по мере чтения каждого элемента.

Обходит настоящий Akamai — до / после

До: стандартный браузер блокируется Akamai на aa.com с сообщением Access Denied. После: Fortress загружает реальную страницу, и датчик Akamai принимает её.

Тот же резидентный IP, тот же сайт (aa.com · Akamai Bot Manager). Стандартный/безголовый браузер получает Access Denied (Reference #); Fortress загружает реальную страницу, и Akamai выдает свой _abck сенсорный cookie — Bot Manager принимает его как реальный браузер. Переменная — это отпечаток, а не IP.


Быстрый старт```bash

Python / Node: prebuilt native binary auto-fetched (Linux x64 & Windows x64), SHA-256 verified

pip install tilion-fortress npm install tilion-fortress

Any OS via Docker: raw CDP on :9222 (~302 MB pull / 851 MB on disk, stripped single-layer)

docker run --rm -p 9222:9222 tilion/fortress:latest

Portable bundle (extract-and-run, like a Chromium snapshot)

tar xzf tilion-fortress-linux-x64.tar.gz # Linux ./tilion-fortress/tilion --headless=new --remote-debugging-port=9222 --user-data-dir=/tmp/p

Debian / Ubuntu

sudo apt install ./tilion-fortress_151.0.7908.0_amd64.deb && tilion https://example.com

root@kitploit:~
> [!TIP]
> SDK поставляется со скомпилированной сборкой **плюс `patches/`**, так что вы можете пересобрать движок самостоятельно и проверить каждое исправление на соответствие исходному коду. Загрузки автоматически проверяются по SHA-256 относительно файла `SHA256SUMS` релиза.

### Версии

Fortress поставляется на **двух базах Chromium** — выбирайте компромисс между маскировкой и актуальностью:

| Канал | Chromium | Когда использовать |
|---|---|---|
| **`stable`** *(по умолчанию)* | **149** | Рекомендуется — соответствует версии Chrome, которую использует большинство реальных пользователей, поэтому лучше всего маскируется |
| **`latest`** | **151** | Новейший движок (сообщает версию немного новее, чем stable) |```python
Fortress().start()                     # Python: stable (149) by default
Fortress(channel="latest").start()     # opt into 151
root@kitploit:~
await Fortress.launch();               // Node: stable (149) by default
await Fortress.launch({ channel: "latest" });
root@kitploit:~
docker run --rm -p 9222:9222 tilion/fortress:149   # or :151
# or set FORTRESS_CHANNEL=latest for either SDK

Native binaries: Linux x64 (both versions) + Windows x64 (151); Windows-149 and macOS run via the Docker image.

Drop it into your AI agent

Fortress — это браузер, которым управляет ваш агент: сырой CDP на :9222, никаких плагинов стелс, которые нужно подключать. Есть два способа подключиться.

Option 1: open it pre-loaded in a chat assistant. One click; it reads our AGENTS.md and walks you through the whole setup:

Ask ChatGPT Ask Claude Ask Gemini

Option 2: Copy for agent (everything, to your clipboard). Hit the copy icon at the top-right of the box below. It puts the entire setup context on your clipboard: what it is, install, connect, persona, and rules, all of AGENTS.md condensed. Paste it into Cursor, Claude Code, Copilot, ChatGPT, or any agent and it takes it from there:```text You're setting up Fortress, an open-source STEALTH Chromium engine, for browser automation. It corrects the browser fingerprint (canvas, WebGL, audio, fonts, navigator, +30 more) in Chromium's C++ and exposes raw CDP on http://localhost:9222, a drop-in for Playwright/Puppeteer. Do NOT add puppeteer-stealth or any JS fingerprint patching (it self-reveals and undoes Fortress).

LAUNCH (pick one; all expose CDP on http://localhost:9222): Docker: docker run -d --rm -p 9222:9222 tilion/fortress:latest Python: pip install tilion-fortress then from tilion_fortress import Fortress; f=Fortress(); f.start() Node: npm install tilion-fortress then import {Fortress} from "tilion-fortress"; const f=await Fortress.launch()

CONNECT (keep my existing automation code): Playwright(py): browser = p.chromium.connect_over_cdp("http://localhost:9222") Playwright(js): const browser = await chromium.connectOverCDP("http://localhost:9222") Puppeteer(js): const browser = await puppeteer.connect({ browserURL: "http://localhost:9222" }) browser-use / Crawl4AI / Stagehand / LangChain: point their CDP endpoint at http://localhost:9222

PERSONA (optional; default is a coherent Windows identity). Override any surface with --uxr-* flags: --uxr-timezone=America/New_York --uxr-hw-concurrency=16 --uxr-languages=en-US,en

RULES:

  1. Drive over raw CDP (:9222); don't spawn chromedriver.
  2. Never pass --user-agent (use --uxr-ua-*); it desyncs UA vs UA-Client-Hints.
  3. No puppeteer-stealth / undetected-chromedriver / JS fingerprint patches.
  4. Blocked ~90% = my IP (datacenter), not the fingerprint. Use a residential/mobile proxy, then retry.

Now walk me through launching Fortress and wiring my automation to it. Full guide: https://github.com/tiliondev/fortress/blob/main/AGENTS.md

root@kitploit:~
## Fortress MCP — скрытый браузинг в виде инструментов агента &nbsp;<sub>Beta</sub>

Сырой CDP предназначен для кода, который вы пишете. **Fortress MCP** — для агентов, вызывающих **инструменты**: сервер [Model Context Protocol](https://modelcontextprotocol.io), который предоставляет Claude, Cursor или любому MCP-клиенту скрытый браузер, поэтому как только запрос блокируется, он просто вызывает инструмент и получает страницу. **29 инструментов, локально и бесплатно** — `fetch_protected_page`, `extract_page`, `crawl_site`, `recon_site_apis`, `search_web`, `run_browser_task`, `save_profile`, `get_stealth_cdp_endpoint` и другие.

<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/795/8f328e2498b09d7433208c5b4a9002450643537f2ee6b0519ac10420ef581bf3.gif" alt="Тот же сайт, тот же запрос: обычный браузер блокируется PerimeterX, в то время как агент с Fortress MCP возвращает чистый JSON" width="760"/></p>

<sub><i>Реальный, датированный запуск против <b>stockx.com</b> (PerimeterX). Обычный браузер получает <b>HTTP 403 — «Доступ запрещён»</b>; агент с Fortress MCP возвращает чистый JSON — тот же сайт, тот же запрос. Воспроизведите это из репозитория фреймворка.</i></sub>

### Настройте за 30 секунд

Два способа запуска — выберите один. `npx` требует Python в PATH; `pip` устанавливает его напрямую:```bash
pip install "tilion[mcp]"      # command:  tilion-mcp
#   —or, zero-install—
npx -y tilion-mcp              # auto-runs the server via uv (no global install)

Claude Desktop — Настройки → Разработчик → Edit Config (claude_desktop_config.json):```json { "mcpServers": { "fortress": { "command": "tilion-mcp" } } }

root@kitploit:~
<sub>Предпочитаете npx? Используйте <code>"command": "npx", "args": ["-y", "tilion-mcp"]</code>. Перезапустите Claude, и появятся инструменты <b>fortress</b>.</sub>

**Claude Code** (CLI) — одна строка:```bash
claude mcp add fortress -- tilion-mcp          # or:  claude mcp add fortress -- npx -y tilion-mcp

Cursor (~/.cursor/mcp.json) · Cline / Windsurf (VS Code → MCP servers) — тот же блок:```json { "mcpServers": { "fortress": { "command": "tilion-mcp" } } }

root@kitploit:~
Затем просто попросите своего агента — *«получить цену с этой страницы StockX»* — и он сам вызовет `fetch_protected_page`.

### Что получает агент

| | tools |
|---|---|
| **Получение заблокированных страниц** | `fetch_protected_page` · `read_page` · `get_page_html` · `search_web` |
| **Структурированные данные** | `extract_page` (с учетом схемы) · `extract_document` (PDF/DOCX/XLSX) |
| **Целые сайты** | `crawl_site` (авто-SPA) · `recon_site_apis` (найти частный JSON API) |
| **Управление страницей** | `page_elements` · `click_button` · `fill_field` · `press_key` · `wait_for` · `evaluate_js` |
| **Многошаговые потоки** | `run_browser_task` (вход, пагинация, бесконечная прокрутка, оформление заказа, …) |
| **Захват / аутентификация** | `screenshot_page` · `save_page` · `download_file` · `save_profile` / `load_profile` |
| **Свой собственный** | `get_stealth_cdp_endpoint` → CDP-URL для Playwright / Puppeteer / browser-use |

Инструменты аннотированы (чтение — автоодобрение, запись — шлюз), **предварительно прогреты** при запуске (~100 мс первый вызов), безопасны для параллельной работы, защищены от тайм-аутов и SSRF-атак. Размещенная конечная точка с **жилым исходящим трафиком скоро появится**.

→ Полная таблица 29 инструментов, бенчмарки и навыки агента: **[`mcp/`](https://github.com/tiliondev/fortress/blob/HEAD/mcp/README.md)**

---

## Почему патчить движок, а не страницу

Обычный подход патчит `navigator.webdriver`, подделывает поставщика WebGL и переопределяет `navigator.plugins` из скрипта. CreepJS и подобные детекторы всё равно его отмечают, и причина **структурная**, а не ещё одно незакрытое свойство. JavaScript-подмена — это функция, стоящая на месте нативной. Детекторы откладывают возвращаемое значение в сторону и выясняют, является ли возвращающий объект нативным:

| Признак | Почему это ловит JS-подмену |
|---|---|
| Саморазоблачение `toString` | Нативный метод преобразуется в строку как `function get vendor() { [native code] }`; переопределённый — в свой собственный исходный код, так что один `.toString()` ловит это. |
| Дескриптор и `hasOwnProperty` | `getOwnPropertyDescriptor` раскрывает переопределённые свойства, а `hasOwnProperty('toString')` возвращает `true` на подменённой функции, тогда как нативная возвращает `false`. |
| `failsTypeError` | Нативные геттеры выбрасывают определённый `TypeError` при неправильном `this`; наивная заглушка молчит, и тишина — это сигнал. |

Повторное получение realm — это то, что побеждает любой патч основного мира. Детектор захватывает неизменный примитив из другого realm и натравливает его на вашу функцию:```js
const iframe = document.createElement('iframe'); document.body.appendChild(iframe);
const realToString = iframe.contentWindow.Function.prototype.toString;
realToString.call(navigator.__lookupGetter__('vendor')); // returns your source code. Caught.

Ваш main-world патч находится в другой области (realm), нежели тот iframe. Та же ловушка срабатывает из Web Worker — потока, который ваш шим главного потока выполняет рядом, а не внутри.

У Fortress нет такого слоя. Геттер navigator.vendor является геттером C++: он возвращает [native code], потому что это нативный код, идентичный во всех областях. Camoufox хорошо это формулирует: «здесь нет перехвата JavaScript, который можно было бы обнаружить». Fortress применяет ту же идею к V8 и Blink вместо Gecko.

Три уровня обнаружения ботов и место Fortress

Современные антибот-системы (Cloudflare, DataDome, Kasada, HUMAN, Akamai) считывают три структурно различных поверхности в трёх разных местах. Один инструмент редко исправляет все три:

Fortress — это движок уровня C, спроектированный так, чтобы уровни A и B тоже соблюдались. Сам бинарник оставляет канал CDP открытым. Это задача слоя управления, и притворяться иначе — значит быть пойманным.


Сравнение Fortress с аналогами

Fortress опирается на реально существующие наработки: fingerprint-chromium, ChromiumFish и CloakBrowser были первыми, а коммерческие вендоры (Multilogin, Kameleo, GoLogin, AdsPower, Browserbase, Surfsky) перекомпилируют Chromium за закрытыми дверями. Большая часть этой работы остаётся закрытой: форки за paywall выдают вам бинарник и просят доверять ему, а вендоры хранят свои патчи внутри компании.

Fortress идёт другим путём, потому что движок скрытности остаётся полезным только тогда, когда те, кто на него полагается, могут видеть, как он работает. Каждое исправление поверхности находится в patches/ как небольшой одноцелевой diff, который можно прочитать за минуту, а весь движок пересобирается из исходников одним скриптом. Когда детектор находит новый индикатор, вы отслеживаете исправление, патчите его и отправляете обратно. Эта обратная связь — суть, и она работает, только пока движок остаётся достаточно открытым для чтения, расширения и пересборки.


Доказательство: результаты живых детекторов

Любую строку можно воспроизвести с помощью tools/gauntlet.py --bundle ./tilion-fortress. Проверено на живых детекторах; дата повторного запуска указана в docs/GAUNTLET_RESULTS.md.

Доказательство: реальные, неотредактированные скриншоты
BrowserScanCreepJSCloudflare

Настройка персоны

Бинарник не содержит ни одной брендовой строки; лаунчер применяет согласованную персону Windows по умолчанию. Переопределите любую поверхность с помощью ключей --uxr-* или установите TILION_NO_DEFAULTS=1 для голого запуска.``` --uxr-platform / --uxr-ua-platform / --uxr-ua-os / --uxr-ua-arch / --uxr-ua-bitness --uxr-ua-platform-version / --uxr-ua-brand / --uxr-hw-concurrency / --uxr-device-memory --uxr-webgl-vendor / --uxr-webgl-renderer / --uxr-webgl-fullparams --uxr-canvas-seed / --uxr-audio-seed / --uxr-timezone / --uxr-languages --uxr-screen-width / --uxr-screen-height / --uxr-webrtc-policy=disable_non_proxied_udp

root@kitploit:~
| Env var | Назначение |
|---|---|
| `TILION_NO_DEFAULTS=1` | Пропустить стандартную персону (чистый запуск) |
| `TILION_TZ` / `TILION_LANG` | Быстрое переопределение часового пояса / языка |

> [!NOTE]
> **Персона сегодня передается через командную строку.** Флаги `--uxr-*` доступны для чтения всем процессам через `/proc/<pid>/cmdline`, поэтому на один запуск приходится одна персона, и она видна другим процессам на хосте. Следом появится среда выполнения `MaskConfig`: она будет передавать персону через IPC и снимет ограничение на одну персону на процесс (см. [что дальше](#whats-next)).

---

## Работает с вашим стеком

Fortress предоставляет сырой CDP на порту `:9222`, поэтому он встраивается в любое решение, поддерживающее Playwright, Puppeteer или CDP.

| Фреймворк | Подключение |
|---|---|
| [**browser-use**](https://github.com/browser-use/browser-use) (~70k звезд) | `cdp_url="http://localhost:9222"` |
| [**Crawl4AI**](https://github.com/unclecode/crawl4ai) (~58k звезд) | CDP конечная точка |
| [**Stagehand**](https://github.com/browserbase/stagehand) (~21k звезд) | `connectOverCDP` |
| [**LangChain**](https://github.com/langchain-ai/langchain) Playwright toolkit | Playwright CDP |
| **Playwright / Puppeteer** (Python и JS) | `connect_over_cdp` / `connect` |```python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp("http://localhost:9222")   # Fortress under the hood

Сборка и проверка

Воспроизведение из исходного кода```bash

export CHROMIUM_VERSION=$(cat CHROMIUM_VERSION) build/build.sh # depot_tools, sync the tag, apply patches, gn gen, ninja build/rebase-monthly.sh 152.0.XXXX.0 # bump + 3-way apply + rebuild + gauntlet-gate

root@kitploit:~
Вывод: `out/Fortress/chrome`. Форк состоит из 34 небольших одноповерхностных патчей (`patches/`), поэтому большинство из них чисто применяются при обновлениях upstream; затем «перчатка» (gauntlet) блокирует релиз при любых регрессиях.

| Платформа | Статус |
|---|---|
| Linux x64 (нативный) · **Windows x64 (нативный)** · любая ОС через Docker | <img src="https://raw.githubusercontent.com/tiliondev/fortress/HEAD/docs/assets/icons/check.svg" width="15" alt="yes"> **поставляется** |
| Установщики с цифровой подписью · macOS `.app` · `linux/arm64` | в процессе |

### Проверьте, что это действительно наше

Fortress поставляется из четырех официальных каналов. Ко всему остальному относитесь как к недоверенному:

| | Официальный источник |
|---|---|
| **Исходный код** | [github.com/tiliondev/fortress](https://github.com/tiliondev/fortress) |
| **Docker** | [`tilion/fortress`](https://hub.docker.com/r/tilion/fortress) |
| **Python** | [`tilion-fortress`](https://pypi.org/project/tilion-fortress/) |
| **Node** | [`tilion-fortress`](https://www.npmjs.com/package/tilion-fortress) |

**Проверьте загрузку.** Каждый релиз включает `SHA256SUMS`, а SDK для `pip`/`npm` выполняют эту проверку за вас при установке:```bash
BASE=https://github.com/tiliondev/fortress/releases/download/v151.0.7908.0
curl -LO $BASE/tilion-fortress-linux-x64.tar.gz
curl -Ls $BASE/SHA256SUMS | sha256sum -c --ignore-missing     # -> OK

Проверьте образ Docker по дайджесту (а не только по тегу):```bash docker pull tilion/fortress:151.0.7908.0 docker inspect --format '{{index .RepoDigests 0}}' tilion/fortress:151.0.7908.0

compare the printed sha256:... against the digest in the GitHub Release notes

root@kitploit:~
**Или ничему не доверяйте и пересоберите его.** Весь форк состоит из 34 читаемых патчей в `patches/`; `build/build.sh` воспроизводит бинарник из исходников Chromium, так что вы можете сравнить то, что собрали, с тем, что мы поставляем.

---

## Справочник

<details><summary><b>Устранение неполадок</b></summary>

<br/>

**Всё ещё блокируется Cloudflare, DataDome или Kasada.** В большинстве случаев это ваш **IP**, а не отпечаток: диапазон дата-центра получает флаг до выполнения любого скрипта страницы. Направьте исходящий трафик через резидентные или мобильные прокси и повторите попытку; если блокировка снята, отпечаток был в порядке.

**Отпечаток выглядит неправильно на хосте Linux.** Персона по умолчанию — Windows, но форма TLS и некоторые сигналы, связанные с ОС, следуют за основной машиной. Сопоставьте персону с вашей исходящей ОС или установите соответствующие флаги `--uxr-*`, чтобы история ОС соответствовала тому, откуда исходит трафик.

**macOS использует образ Docker.** Нативные бинарники для Linux и Windows поставляются сегодня; macOS всё ещё запускает Fortress через официальный образ Docker (`tilion/fortress`). Установите Docker Desktop или запускайте на Linux/Windows x64 для нативного бинарника.

**Персона отображается в `/proc/<pid>/cmdline`.** Флаги `--uxr-*` читаемы другими процессами на хосте, одна персона на запуск. Пока не появится runtime `MaskConfig`, держите одну персону на процесс и избегайте общего хоста с недоверенным кодом.

**Детектор отмечает то, что gauntlet проходит.** Обнаружение движется. Убедитесь, что вы на текущем rebase Chromium, затем откройте issue с тестовой страницей. Эта страница станет следующим патчем.

</details>

<details><summary><b>Часто задаваемые вопросы</b></summary>

<br/>

**Это законно?** Fortress — это проект по разработке браузера для легитимной автоматизации, тестирования и сбора общедоступных данных. Уважайте условия использования каждого сайта и законы вашей юрисдикции.

**Он действительно бесплатный?** Да. BSD-3, полностью открытый и размещаемый самостоятельно. Серия патчей опубликована, так что вы можете собрать текущий движок из исходников самостоятельно.

**Почему бы просто не использовать puppeteer-stealth или undetected-chromedriver?** Они патчат слой JS/CDP *после* того, как страница может проверить браузер, поэтому они раскрывают себя через `toString` и повторное получение области. Fortress переносит подмену в C++, где страница находит нативный код. (См. «Почему патчить движок, а не страницу».)

**Чем это отличается от Camoufox?** Та же идея перехвата на C++. Camoufox форкает Firefox (~3% трафика, постоянная аномалия), в то время как Fortress форкает Chromium и V8 (основной движок), поэтому User-Agent Chrome согласован по построению.

**Будет ли он проходить всё всегда?** Нет. Обнаружение постоянно развивается, поэтому мы поставляем датированный, воспроизводимый gauntlet и ежемесячный rebase Chromium; вы всегда можете точно увидеть, что проходит сегодня.

</details>

<details><summary><b>План развития</b></summary>

<br/>

- [ ] Конфигурация JSON времени выполнения в C++ `MaskConfig` (один бинарник, множество согласованных отпечатков, ничего в командной строке)
- [ ] Собственный MCP-сервер и SDK для Puppeteer / raw-CDP (замена для AI-агентов)
- [ ] Подписанные кодом Windows `.exe` и macOS `.app`
- [ ] Образ Docker `linux/arm64`
- [ ] Перенести `patches/` на переопределения в стиле Brave `chromium_src/`
- [ ] Опубликованные строки бенчмарков reCAPTCHA v3 / DataDome / Kasada (датированные, воспроизводимые)

</details>

<details><summary><b>Структура репозитория</b></summary>```
patches/     34 per-surface C++ patches (+ series), the source of truth for the fork
build/       args.gn, build.sh, apply-patches.sh, rebase-monthly.sh, windows/, macos/
packaging/   tilion launcher, fonts.conf, Dockerfile, .deb + bundle builders
fonts/       33 metric-compatible Windows-named fonts (incl. color emoji)
sdk/         python + node (tilion-fortress) prebuilt-binary SDKs
tools/       gauntlet.py, the CreepJS / Sannysoft / BrowserScan CI gate
docs/        GAUNTLET_RESULTS, BUILD_NATIVE, BENCHMARK

Вклад в проект

Нашли вектор обнаружения или утечку, которую мы пропустили? Откройте issue с воспроизводимой тестовой страницей. Страница, которая надежно детектит Fortress, — это самое ценное, что вы можете отправить. Она станет следующим патчем. Два правила: каждое заявление о возможности сопровождается командой, которая её воспроизводит, и каждый предел задокументирован. Слово «необнаружимый» в репозитории не используется.

Лицензия

Лицензия BSD-3-Clause для патчей и инструментов Fortress (соответствует Chromium). Chromium и встроенные шрифты сохраняют свои собственные лицензии; см. LICENSE и NOTICE. Серия патчей опубликована, так что вы можете самостоятельно проверить и пересобрать движок.


Что дальше

[!IMPORTANT] v2: Маскированные персоны времени выполнения MaskConfig. IPC-доставляемый, детерминированный граф персон, питающий глобальный для процесса синглтон C++ MaskConfig: тысячи инвариантных к согласованности отпечатков из одного бинарного файла, изоляция идентичности по BrowserContext и нулевой след в командной строке. Остальное — в дорожной карте.

Оставайтесь в курсе

Обнаружение не стоит на месте, поэтому скрытый движок настолько хорош, насколько свежим был его последний ребейз. Fortress ежемесячно отслеживает последнюю версию Chromium, заново проходит полный набор тестов и выпускает патч, как только детектор находит новый признак, чтобы то, что вы запускаете, продолжало соответствовать реальной установке Chrome. Следите за релизами, чтобы быть в курсе работы над v2 MaskConfig, или поставьте звезду репозиторию, если он вам полезен.

Star History Chart

Стелс, который можно читать, пересобирать и запускать самостоятельно.

Скачать инструмент

34

одноповерхностные
патчи C++

0%

CreepJS
безголовый / стелс

[native code]

в каждом
контексте

BSD-3

открытый движок,
соберите сами

Паритет нативного кода

Каждый поддельный геттер является геттером C++: toString возвращает [native code], независимо от контекста в главном фрейме, iframe'ах и Web Workers.

Встраиваемый CDP

Сырой CDP в стиле nodriver на :9222, без утечки Runtime.enable. Оставьте Playwright, Puppeteer или любой CDP-клиент; меняйте браузер, код остаётся прежним.

Проходит полигон

0% headless в CreepJS; Sannysoft, BrowserScan и живой Cloudflare Turnstile пройдены, всё как в стандартной установке Chrome.

Аудируемые патчи

34 небольших одноцелевых diff'а в patches/. Прочитайте один за минуту; пересоберите движок одним скриптом.

Когерентность по построению

Настоящие V8, Blink и BoringSSL поддерживают согласованность движка, user-agent и формы TLS JA3/JA4: персона Windows на совместимом стеке.

Настраиваемая персона

Один бинарный файл, проверенная на согласованность личность Windows; ключи --uxr-* переопределяют любую поверхность: GPU, экран, часовой пояс, оборудование, Client-Hints.

Fortress автоматически разбивает на страницы quotes.toscrape.com
Авто-пагинация: 30 цитат на 3 страницах.
Fortress глубоко обходит страницу с деталями товара
Глубокий обход деталей: UPC · цена · налог · остаток · отзывы.
Fortress обходит Akamai на lowes.com
lowes.com · заблокирован → обойден
Fortress обходит Akamai на macys.com
macys.com · заблокирован → обойден
Fortress обходит Akamai на kohls.com
kohls.com · заблокирован → обойден

Не случайность на одном сайте — такое же до/после на крупных ритейлерах, защищенных Akamai, каждый запуск с одного и того же резидентного IP.

Copy for agent
УровеньИндикаторыГде находится исправлениеFortress
A: артефакты драйвера / бинарные артефактыcdc_ переменные ChromeDriver, поверхность протокола WebDriverИспользуйте сырой CDP, пропуская chromedriveryes спроектирован для такого управления
B: побочные эффекты CDPRuntime.enable раскрывает информацию через sourceURL + следы init-скриптов, независимо от чистоты бинарникаСлой управления/CDP-клиент: откладывайте Runtime.enable, используйте Runtime.addBinding + изолированные мирыyes без утечек (подтверждено)
C: поверхность отпечатковcanvas, WebGL, аудио, шрифты, navigator, во всех фреймах, iframe, worker'ахДвижок (C++), потому что JS-переопределения выдают себяyes это и есть Fortress
Stock Playwrightpuppeteer-extra-stealthundetected-chromedriverCamoufoxCloakBrowserFortress
Уровень подменынетJS-инъекцияпатч CDP/конфигаC++ движокC++ движокC++ движок
toString возвращает [native code]н/дnoн/дyesyesyes
Выживает при повторном получении области (iframe/worker)nononoyesyesyes
Нет утечек Runtime.enablenonopartialyesyesyes
Движок = Chrome / V8 (большинство трафика)yesyesyesno Firefoxyesyes
Согласованная форма TLS Chromiumyesyesyesno Firefoxyesyes
Полностью открытый движокyesyesyesyespartial последняя мажорная за paywallyes
Опубликованная, проверяемая серия патчейн/дн/дн/дyespartial только бинарникyes
Воспроизводимая сборка из исходниковн/дн/дн/дyesnoyes
Указывает собственные ограничениян/дн/дн/дyesnoyes
НаборОбычный ChromiumFortress
CreepJSпомечен как headless0% headless · 0% stealth, сигналы worker согласованы
bot.sannysoft.comкрасные строки0 ошибок · WebDriver Advanced пройден · WebGL = NVIDIA RTX 3060 / ANGLE D3D11
browserscan.netобнаружен бот«Ботов не обнаружено, возможно, человек»
rebrowser bot-detectorутечка Runtime.enableнет утечки · webdriver=false · чистые init-скрипты (сырой CDP)
Cloudflare Turnstileзаблокированобойдён: человеческий клик прошёл живой челлендж (headed, датацентровый IP)