Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
fortress — 스크래퍼와 브라우저 에이전트가 차단되는 것을 방지하는 스텔스 Chromium 엔진, 코드 한 줄 변경만으로. | Kitploit
도구/GitHubGitHub/tiliondev/fortress
IDS/IPS EvasionAnti-BotFingerprint Spoofing
GitHubtiliondev/fortress

fortress

스크래퍼와 브라우저 에이전트가 차단되는 것을 방지하는 스텔스 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는 그 핑거프린트를 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

Fortress가 실제 Cloudflare 챌린지를 통과한 후 sannysoft 및 BrowserScan을 통과하는 모습

실제 창에서 Fortress 바이너리를 캡처한 모습: 실제 Cloudflare 챌린지를 통과하고, bot.sannysoft.com을 모두 초록색으로 바꾼 후 BrowserScan에서 "Normal"로 표시됩니다. tools/gauntlet.py로 재현 가능.


🆕 새로운 기능 — 151.0.7908.0 · 엔진 리프레시

출시됨. 실행 시 일관된 페르소나, 강화됨.

  • 로케일별 키보드 (QWERTY / QWERTZ / AZERTY) · 페르소나별 미디어 장치 · 전체 전달 동등성 일관성 검사.
  • 플랫폼 ↔ GPU ↔ 시간대 ↔ 언어 ↔ 음성 ↔ 키보드가 하나의 일관된 실제 장치로 움직입니다 — 매 실행마다, 단일 바이너리에서.
  • 네이티브 코드 동등성 (toString()은 [native code] 유지), realm 불변 (메인 / 워커 / 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)**


## 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")
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 in 12 seconds: passes CreepJS, Sannysoft, BrowserScan and rebrowser, scrapes real sites, and clears Akamai on aa.com, lowes.com, macys.com and kohls.com.

하나의 루프, 모두 실제 캡처: CreepJS / Sannysoft / BrowserScan / rebrowser 통과 → CDP를 통해 구조화된 데이터 스크래핑 → aa.com · lowes · macys · kohls에서 Akamai 차단 해제 (동일한 residential IP).

실제 스크래핑, 완전 헤드리스

Fortress 엔진이 CDP를 통해 구동되는 편집되지 않은 캡처. 스텔스 플러그인, JS 패치 없음: 지문이 바이너리에서 수정됩니다. 다음을 사용하여 이를 재현하세요. examples/scrape_demos.py.

Fortress extracting books.toscrape.com into typed JSON records live over CDP

구조화된 추출: 각 항목이 읽힐 때마다 레코드가 유형화된 JSON으로 빌드됩니다.

실제 Akamai 차단 해제 — 전 / 후

Before: a stock browser is blocked by Akamai on aa.com with Access Denied. After: Fortress loads the real page and Akamai's sensor accepts it.

동일한 residential IP, 동일한 사이트 (aa.com · Akamai Bot Manager). 일반/헤드리스 브라우저는 Access Denied (Reference #)를 받습니다; Fortress는 실제 페이지를 로드하고 Akamai는 _abck 센서 쿠키를 발행합니다 — 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/`**를 함께 제공하므로, 엔진을 직접 재빌드하면서 모든 표면 수정 사항을 소스와 대조하여 검증할 수 있습니다. 다운로드는 릴리스 `SHA256SUMS`에 대해 SHA-256으로 자동 검증됩니다.

### 버전

Fortress는 **두 가지 Chromium 기반**으로 제공됩니다 — 은닉성과 최신성 사이의 절충점을 선택하세요:

| 채널 | Chromium | 사용 시기 |
|---|---|---|
| **`stable`** *(기본값)* | **149** | 권장 — 실제 사용자 대다수가 사용하는 Chrome 버전과 일치하므로 가장 잘 은닉됩니다 |
| **`latest`** | **151** | 최신 엔진 (안정 버전보다 약간 앞선 버전을 보고함) |```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

네이티브 바이너리: Linux x64 (두 버전) + Windows x64 (151); Windows-149 및 macOS는 Docker 이미지를 통해 실행됩니다.

AI 에이전트에 적용하세요

Fortress는 에이전트가 구동하는 브라우저입니다. :9222에서 원시 CDP를 제공하며, 연결할 스텔스 플러그인이 없습니다. 두 가지 방법이 있습니다.

옵션 1: 채팅 어시스턴트에 미리 로드하여 여세요. 한 번 클릭하면 AGENTS.md를 읽고 전체 설정 과정을 안내합니다:

ChatGPT에 묻기 Claude에 묻기 Gemini에 묻기

옵션 2: 에이전트용 복사 (전체를 클립보드로 복사). 아래 상자의 오른쪽 상단에 있는 복사 아이콘을 클릭하세요. 클립보드에 전체 설정 컨텍스트(무엇인지, 설치, 연결, 페르소나, 규칙 등 AGENTS.md의 모든 내용을 간결하게 요약)가 복사됩니다. Cursor, Claude Code, Copilot, ChatGPT 또는 다른 에이전트에 붙여넣으면 바로 시작됩니다:```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>베타</sub>

Raw CDP는 직접 작성하는 코드를 위한 것입니다. **Fortress MCP**는 **도구**를 호출하는 에이전트를 위한 것입니다. [Model Context Protocol](https://modelcontextprotocol.io) 서버로, Claude, Cursor 또는 모든 MCP 클라이언트에 스텔스 브라우저를 제공하여, fetch가 차단되는 순간 도구를 호출해 페이지를 가져옵니다. **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 — "Access denied"</b>를 받습니다. Fortress MCP를 사용하는 에이전트는 깨끗한 JSON을 반환합니다 — 동일한 사이트, 동일한 프롬프트. 프레임워크 저장소에서 재현 가능합니다.</i></sub>

### 30초 만에 설정하기

두 가지 실행 방식 중 하나를 선택하세요. `npx`는 PATH에 Python이 필요하며, `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 — 설정 → 개발자 → 구성 편집 (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` → Playwright / Puppeteer / browser-use용 CDP URL |

도구는 주석 처리되어 있고(읽기는 자동 승인, 쓰기는 게이트), 시작 시 **미리 워밍업**(첫 호출 약 100ms)되며, 동시성 안전 및 타임아웃·SSRF 보호됩니다. **리지덴셜 이그레스**를 지원하는 호스팅된 엔드포인트가 곧 제공될 예정입니다.

→ 전체 29개 도구 테이블, 벤치마크 및 에이전트 스킬: **[`mcp/`](https://github.com/tiliondev/fortress/blob/HEAD/mcp/README.md)**

---

## 엔진을 패치해야 하는 이유, 페이지가 아니라

일반적인 접근 방식은 `navigator.webdriver`를 패치하고, WebGL 공급업체를 스푸핑하며, 스크립트에서 `navigator.plugins`를 재정의합니다. CreepJS 및 유사한 탐지기는 여전히 이를 플래그하며, 그 이유는 **구조적**이기 때문입니다. 단순히 또 하나의 속성을 찾는 것이 아닙니다. JavaScript 스푸핑은 네이티브 함수가 있어야 할 자리에 함수를 세워놓은 것입니다. 탐지기는 반환된 값을 따로 설정하고 그 값을 반환하는 대상이 네이티브인지 조사합니다:

| 탐지 지점 | JavaScript 스푸핑이 걸리는 이유 |
|---|---|
| `toString` 자가 노출 | 네이티브 메서드는 `function get vendor() { [native code] }`로 문자열화되지만, 재정의된 것은 자체 소스 코드로 문자열화되므로 `.toString()` 한 번으로 잡힙니다. |
| Descriptor 및 `hasOwnProperty` | `getOwnPropertyDescriptor`는 재정의된 속성을 노출시키고, `hasOwnProperty('toString')`은 변조된 함수에서 `true`를 반환하는 반면 네이티브 함수는 `false`를 반환합니다. |
| `failsTypeError` | 네이티브 getter는 잘못된 `this`에 대해 특정 `TypeError`를 발생시키지만, 단순한 shim은 조용히 넘어가며 그 침묵 자체가 신호가 됩니다. |

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.

Your main-world patch lives in a different realm from that iframe. The same trap fires from a Web Worker, a thread your main-thread shim runs beside rather than inside.

Fortress has no such layer. The getter for navigator.vendor is the C++ getter: it reports [native code] because it is native code, identical across every realm. Camoufox puts it well: "there is no JavaScript hijacking to be detected." Fortress applies the same idea to V8 and Blink in place of Gecko.

The three layers of bot detection, and where Fortress fits

Modern anti-bots (Cloudflare, DataDome, Kasada, HUMAN, Akamai) read three structurally different surfaces, in three separate places. One tool rarely fixes all three:

Fortress is the Layer-C engine, built to be driven so A and B hold too. The binary alone leaves the CDP channel open. That part is on the control layer, and pretending otherwise is how you get caught.


How Fortress compares

Fortress builds on real prior art: fingerprint-chromium, ChromiumFish, and CloakBrowser came first, and commercial vendors (Multilogin, Kameleo, GoLogin, AdsPower, Browserbase, Surfsky) recompile Chromium behind closed source. Most of that work stays closed: the paywalled forks hand you a binary and ask you to trust it, and the vendors keep their patches in-house.

Fortress goes the other way, because a stealth engine only stays useful when the people relying on it can see how it works. Every surface correction lives in patches/ as a small, single-purpose diff you can read in a minute, and the whole engine rebuilds from source with one script. When a detector finds a new tell, you trace the fix, patch it, and send it back. That feedback loop is the point, and it only works while the engine stays open enough to read, extend, and rebuild.


Proof: live-detector results

Reproduce any row with tools/gauntlet.py --bundle ./tilion-fortress. Verified against live detectors; re-run dated in docs/GAUNTLET_RESULTS.md.

Proof: real, unedited screenshots
BrowserScanCreepJSCloudflare

Configure the persona

The binary carries zero brand strings; the launcher applies a coherent default Windows persona. Override any surface with --uxr-* switches, or set TILION_NO_DEFAULTS=1 for a bare launch.``` --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:~
| 환경 변수 | 목적 |
|---|---|
| `TILION_NO_DEFAULTS=1` | 기본 페르소나 건너뛰기 (베어 실행) |
| `TILION_TZ` / `TILION_LANG` | 빠른 시간대/언어 재정의 |

> [!NOTE]
> **페르소나는 오늘날 명령줄에서 실행됩니다.** `--uxr-*` 스위치는 `/proc/<pid>/cmdline`을 통해 전 세계에서 읽을 수 있으므로, 실행당 하나의 페르소나가 있고 호스트의 다른 프로세스에서 볼 수 있습니다. `MaskConfig` 런타임이 다음에 등장합니다: IPC를 통해 페르소나를 전달하고 프로세스당 제한을 해제합니다 (자세한 내용은 [다음 단계](#whats-next) 참조).

---

## 스택과 연동

Fortress는 `:9222`에서 원시 CDP를 노출하므로 Playwright, Puppeteer 또는 CDP를 사용하는 모든 것에서 바로 사용할 수 있습니다.

| 프레임워크 | 연결 방법 |
|---|---|
| [**browser-use**](https://github.com/browser-use/browser-use) (~7만 개의 스타) | `cdp_url="http://localhost:9222"` |
| [**Crawl4AI**](https://github.com/unclecode/crawl4ai) (~5.8만 개의 스타) | CDP 엔드포인트 |
| [**Stagehand**](https://github.com/browserbase/stagehand) (~2.1만 개의 스타) | `connectOverCDP` |
| [**LangChain**](https://github.com/langchain-ai/langchain) Playwright 툴킷 | 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/`)로 이루어져 있어, 대부분의 패치가 업스트림 릴리스에 깔끔하게 다시 적용됩니다. 그런 다음 gauntlet은 릴리스를 검증하여 어떤 회귀가 발생하는지 확인합니다.

| 플랫폼 | 상태 |
|---|---|
| Linux x64 (native) · **Windows x64 (native)** · Docker를 통한 모든 OS | <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`가 포함되어 있으며, `pip`/`npm` SDK는 설치 시 이를 자동으로 확인합니다:```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:~
**아무것도 신뢰하지 말고 직접 빌드하세요.** 전체 포크는 `patches/` 디렉터리에 34개의 읽기 쉬운 패치로 구성되어 있습니다. `build/build.sh`는 Chromium 소스에서 바이너리를 재현하므로, 직접 빌드한 것과 배포된 것을 비교(diff)할 수 있습니다.

---

## 참고

<details><summary><b>문제 해결</b></summary>

<br/>

**여전히 Cloudflare, DataDome 또는 Kasada에 차단됩니다.** 대부분의 경우 이는 지문(fingerprint)이 아닌 **IP** 문제입니다. 데이터센터 IP 범위는 페이지 스크립트가 실행되기 전에 플래그가 지정됩니다. 트래픽을 가정용 또는 모바일 프록시로 라우팅한 후 재시도하세요. 차단이 해제되면 지문은 문제가 없었던 것입니다.

**Linux 호스트에서 지문이 이상해 보입니다.** 기본 페르소나는 Windows이지만 TLS 모양과 일부 OS 관련 신호는 기본 시스템을 따릅니다. 페르소나를 트래픽이 나가는 OS와 일치시키거나 관련 `--uxr-*` 플래그를 설정하여 OS 정보가 트래픽 출발지와 일치하도록 하세요.

**macOS는 Docker 이미지를 사용합니다.** 현재 네이티브 Linux + Windows 바이너리가 제공되지만, macOS는 여전히 공식 Docker 이미지(`tilion/fortress`)를 통해 Fortress를 실행합니다. Docker Desktop을 설치하거나 Linux/Windows x64에서 네이티브 바이너리를 실행하세요.

**페르소나가 `/proc/<pid>/cmdline`에 나타납니다.** `--uxr-*` 플래그는 호스트의 다른 프로세스가 읽을 수 있으며, 실행마다 하나의 페르소나가 사용됩니다. 런타임 `MaskConfig`가 도입될 때까지는 프로세스당 하나의 페르소나를 유지하고 신뢰할 수 없는 코드와 호스트를 공유하지 마세요.

**검출기가 gauntlet을 통과하는 무언가를 플래그합니다.** 탐지는 계속 진화합니다. 현재 Chromium 리베이스에 있는지 확인한 후 테스트 페이지와 함께 이슈를 열어주세요. 해당 페이지가 다음 패치가 됩니다.

</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(주류 엔진)을 포크하므로 Chrome 사용자 에이전트가 설계상 일관성을 갖습니다.

**영원히 모든 것을 통과할 수 있나요?** 아닙니다. 탐지는 계속 진화하므로, 날짜가 지정된 재현 가능한 gauntlet과 월간 Chromium 리베이스를 제공합니다. 오늘 무엇이 통과하는지 정확히 항상 확인할 수 있습니다.

</details>

<details><summary><b>로드맵</b></summary>

<br/>

- [ ] 런타임 JSON 구성을 C++ `MaskConfig`로 (단일 바이너리, 여러 일관된 지문, 명령줄에 아무것도 없음)
- [ ] 자사 MCP 서버 및 Puppeteer/raw-CDP SDK 제공 (AI 에이전트에 바로 사용 가능)
- [ ] 코드 서명된 Windows `.exe` 및 macOS `.app`
- [ ] `linux/arm64` Docker 이미지
- [ ] `patches/`를 Brave 스타일의 `chromium_src/` 오버라이드로 마이그레이션
- [ ] 게시된 reCAPTCHA v3 / DataDome / Kasada 벤치마크 행 (날짜 지정, 재현 가능)

</details>

<details><summary><b>저장소 구조</b></summary>

</details>```
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

기여하기

우리가 놓친 탐지 벡터나 유출을 발견하셨나요? 재현 가능한 테스트 페이지와 함께 이슈를 열어주세요. Fortress를 확실히 탐지하는 페이지야말로 가장 가치 있는 정보입니다. 그것이 다음 패치가 됩니다. 두 가지 규칙이 있습니다: 모든 기능 주장은 이를 재현하는 명령어와 함께 제시되어야 하며, 모든 한계는 문서화되어야 합니다. "탐지 불가능"이라는 단어는 이 저장소에서 사용하지 않습니다.

라이선스

Fortress 패치 및 도구에 대해 BSD-3-Clause 라이선스(Chromium과 동일)를 적용합니다. Chromium 및 번들 폰트는 각각의 라이선스를 유지합니다. 자세한 내용은 LICENSE 및 NOTICE를 참조하세요. 패치 시리즈는 공개되어 있으므로, 직접 엔진을 감사하고 재구축할 수 있습니다.


다음은 무엇인가

[!IMPORTANT] v2: MaskConfig 런타임 페르소나. IPC로 전달되고 시드 기반으로 생성된 페르소나 그래프가 프로세스 전역 C++ MaskConfig 싱글톤에 공급됩니다. 단일 바이너리에서 수천 개의 일관성 불변 지문, BrowserContext별 ID 격리, 명령줄 풋프린트 제로를 구현합니다. 나머지는 로드맵에 있습니다.

최신 상태 유지

탐지 기술은 계속 발전하므로, 스텔스 엔진의 가치는 마지막 리베이스만큼만 유효합니다. Fortress는 매월 최신 Chromium을 추적하고, 전체 테스트를 재실행하며, 탐지 도구가 새로운 징후를 발견할 때마다 패치를 제공합니다. 따라서 실행 중인 Fortress가 실제 Chrome 설치와 계속 일치하도록 유지됩니다. 릴리즈 구독을 통해 v2 MaskConfig 작업을 팔로우하거나, 유용하다면 저장소에 별표를 눌러주세요.

별 기록 차트

읽고, 재구축하고, 직접 실행할 수 있는 스텔스.

도구 다운로드
단일 표면
C++ 패치

0%

CreepJS
headless / stealth

[native code]

모든
realm에서

BSD-3

오픈 엔진,
직접 재빌드 가능

네이티브 코드 동등성

모든 스푸핑된 getter는 C++ getter입니다: toString은 [native code]를 반환하며, realm 불변으로 메인 프레임, iframe 및 Web Worker에서 동일합니다.

플러그 앤 플레이 CDP

:9222에서 nodriver 스타일의 원시 CDP, Runtime.enable 누출 없음. Playwright, Puppeteer 또는 모든 CDP 클라이언트를 유지하고, 브라우저만 교체하면 코드는 그대로 사용 가능합니다.

Gauntlet 통과

CreepJS에서 0% headless; Sannysoft, BrowserScan 및 실제 Cloudflare Turnstile을 모두 일반 Chrome 설치로 통과합니다.

감사 가능한 패치

patches/ 디렉토리에 34개의 작은 단일 목적 diff 파일. 하나를 1분 안에 읽을 수 있으며, 하나의 스크립트로 엔진을 재빌드할 수 있습니다.

구조적 일관성

실제 V8, Blink, BoringSSL이 엔진, 사용자 에이전트 및 JA3/JA4 TLS 형태를 일치시킵니다: 일치하는 스택 위의 Windows 페르소나.

조정 가능한 페르소나

하나의 바이너리, 일관성 검증된 Windows ID; --uxr-* 스위치로 GPU, 화면, 시간대, 하드웨어, Client-Hints 등 모든 표면을 덮어쓸 수 있습니다.

Fortress auto-paginating across pages of quotes.toscrape.com
자동 페이지 매김: 3페이지에 걸쳐 30개의 인용문.
Fortress deep-crawling a product detail page
심층 상세 크롤링: UPC · 가격 · 세금 · 재고 · 리뷰.
Fortress clearing Akamai on lowes.com
lowes.com · 차단됨 → 해제됨
Fortress clearing Akamai on macys.com
macys.com · 차단됨 → 해제됨
Fortress clearing Akamai on kohls.com
kohls.com · 차단됨 → 해제됨

한 사이트의 우연이 아닙니다 — 동일한 residential IP에서 매 실행마다 주요 Akamai 보호 소매업체에서 동일한 전/후.

에이전트용 복사
LayerThe tellsWhere the fix livesFortress
A: driver / binary artifactscdc_ ChromeDriver vars, WebDriver protocol surfaceDrive raw CDP, skip chromedriveryes built to be driven this way
B: CDP side-effectsRuntime.enable leaks via sourceURL + init-script footprints, however clean the binary isThe control / CDP-client layer: hold back Runtime.enable, use Runtime.addBinding + isolated worldsyes no leak (verified)
C: fingerprint surfacecanvas, WebGL, audio, fonts, navigator, across main frame, iframes, workersThe engine (C++), because JS overrides self-revealyes this is Fortress
Stock Playwrightpuppeteer-extra-stealthundetected-chromedriverCamoufoxCloakBrowserFortress
Spoof layernoneJS injectionCDP/config patchC++ engineC++ engineC++ engine
toString yields [native code]n/anon/ayesyesyes
Survives realm re-acquisition (iframe/worker)nononoyesyesyes
No Runtime.enable leaknonopartialyesyesyes
Engine = Chrome / V8 (majority traffic)yesyesyesno Firefoxyesyes
Coherent Chromium TLS shapeyesyesyesno Firefoxyesyes
Fully open-source engineyesyesyesyespartial latest major paywalledyes
Published, auditable patch seriesn/an/an/ayespartial binary onlyyes
Reproducible from-source buildn/an/an/ayesnoyes
States its own limitsn/an/an/ayesnoyes
SuiteStock ChromiumFortress
CreepJSflagged headless0% headless · 0% stealth, worker signals coherent
bot.sannysoft.comred rows0 failed · WebDriver Advanced passed · WebGL = NVIDIA RTX 3060 / ANGLE D3D11
browserscan.netbot detected“No bots detected, could be a human”
rebrowser bot-detectorRuntime.enable LEAKno leak · webdriver=false · clean init-scripts (raw CDP)
Cloudflare Turnstileblockedbypassed: a human click cleared a live challenge (headed, datacenter IP)