
스크래퍼와 브라우저 에이전트가 차단되는 것을 방지하는 스텔스 Chromium 엔진, 코드 한 줄 변경만으로.
스텔스 Chromium 엔진
Fortress는 코드 한 줄만 바꾸면 스크래퍼와 브라우저 에이전트가 차단되지 않도록 보호하는 스텔스 Chromium 엔진입니다. 봇 감지기는 브라우저 핑거프린트를 읽어 자동화를 감지합니다. Fortress는 그 핑거프린트를 Chromium의 C++ 내부에서 수정하여, 브라우저가 일반 Chrome 설치처럼 보이도록 합니다. 스크래퍼는 작업을 완료하고, 에이전트는 목표 페이지에 도달하며, CreepJS, Sannysoft, BrowserScan 및 실제 Cloudflare Turnstile은 모두 사람으로 인식합니다. 기존 Playwright 또는 Puppeteer를 CDP를 통해 Fortress에 연결하기만 하면, 코드의 다른 부분은 변경할 필요가 없습니다.
Blink · V8 · BoringSSL 인트리(in-tree) 패치 · ANGLE / D3D11 기반 WebGL · JA3/JA4 일관성 TLS · 월별 업스트림 리베이스 · 재현 가능, gauntlet 테스트 통과 릴리스
34단일 표면C++ 패치 |
0%CreepJSheadless / stealth |
모든 |
BSD-3오픈 엔진,직접 재빌드 가능 |

실제 창에서 Fortress 바이너리를 캡처한 모습: 실제 Cloudflare 챌린지를 통과하고, bot.sannysoft.com을 모두 초록색으로 바꾼 후 BrowserScan에서 "Normal"로 표시됩니다. tools/gauntlet.py로 재현 가능.
네이티브 코드 동등성모든 스푸핑된 getter는 C++ getter입니다: |
플러그 앤 플레이 CDP:9222에서 nodriver 스타일의 원시 CDP, |
Gauntlet 통과CreepJS에서 0% headless; Sannysoft, BrowserScan 및 실제 Cloudflare Turnstile을 모두 일반 Chrome 설치로 통과합니다. |
감사 가능한 패치
|
구조적 일관성실제 V8, Blink, BoringSSL이 엔진, 사용자 에이전트 및 JA3/JA4 TLS 형태를 일치시킵니다: 일치하는 스택 위의 Windows 페르소나. |
조정 가능한 페르소나하나의 바이너리, 일관성 검증된 Windows ID; |
출시됨. 실행 시 일관된 페르소나, 강화됨.
toString()은 [native code] 유지), realm 불변 (메인 / 워커 / iframe) — JavaScript가 아닌 브라우저에 컴파일된 일관성.```bash
pip install -U tilion-fortress # or: docker run --rm -p 9222:9222 tilion/fortress:latest**[→ 전체 릴리스 노트](https://github.com/tiliondev/fortress/releases/tag/v151.0.7908.0)**
## Contents
| | |
|---|---|
| **[What it is](#what-it-is)** · **[Quick start](#quick-start)** | 정의, 설치, 첫 번째 스크립트, AI 에이전트 설정 |
| **[The Fortress MCP](#the-fortress-mcp--stealth-browsing-as-agent-tools)** | AI 에이전트를 위한 29가지 스텔스 브라우저 도구 (베타) |
| **[Why patch the engine, not the page](#why-patch-the-engine-not-the-page)** | 자기 노출 JS 이론 + 세 가지 탐지 계층 |
| **[How Fortress compares](#how-fortress-compares)** | vs puppeteer-stealth · Camoufox · CloakBrowser · 폐쇄형 벤더 |
| **[Proof: live-detector results](#proof-live-detector-results)** | CreepJS / Sannysoft / BrowserScan / Cloudflare, 스크린샷 포함 |
| **[Configure the persona](#configure-the-persona)** | `--uxr-*` 핑거프린트 표면 |
| **[Works with your stack](#works-with-your-stack)** | browser-use · Crawl4AI · Stagehand · LangChain |
| **[Build & verify](#build--verify)** | 소스에서 재현, 출처 확인 |
| **[Reference](#reference)** | 문제 해결 · FAQ · 로드맵 · 저장소 구조 |
---
## What it is
Fortress는 엔진 내부에서 브라우저 핑거프린트를 스푸핑하는 Chromium 포크입니다. 봇 탐지기가 읽는 표면(캔버스, WebGL, 오디오, 폰트, 네비게이터 등 약 30개 이상)은 Chromium의 **C++**에서 수정되며, 페이지가 잡을 수 있는 JavaScript 패치 레이어가 위에 없습니다.
일반 브라우저 바이너리로 제공되며 CDP 엔드포인트를 노출합니다. Playwright, Puppeteer 또는 다른 CDP 클라이언트를 해당 엔드포인트에 연결하면 기존 자동화가 변경 없이 실행됩니다.
JavaScript 스텔스 패치는 페이지가 찾을 수 있는 추가 레이어를 남깁니다: `.toString()`은 오버라이드의 소스를 표시하며, iframe이나 워커에서 동일한 프리미티브를 다시 가져오면 이를 우회합니다. Fortress는 대신 엔진에서 표면을 수정하므로 `navigator.vendor`는 실제 C++ getter를 반환하고, `[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")
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();
하나의 루프, 모두 실제 캡처: CreepJS / Sannysoft / BrowserScan / rebrowser 통과 → CDP를 통해 구조화된 데이터 스크래핑 → aa.com · lowes · macys · kohls에서 Akamai 차단 해제 (동일한 residential IP).
Fortress 엔진이 CDP를 통해 구동되는 편집되지 않은 캡처. 스텔스 플러그인, JS 패치 없음: 지문이 바이너리에서 수정됩니다. 다음을 사용하여 이를 재현하세요. examples/scrape_demos.py.
