stealth-browser-launch について
stealth-browser-launchは、cloakbrowserとPlaywrightを使い、C++レベルのフィンガープリント変更を加えたChromiumを起動するスキルです。ボット対策サイトを対象とするセキュリティテストや自動偵察向けで、指紋設定や永続プロファイルを利用できます。
主な機能
- 01Chromiumの指紋変更
- 02Playwrightによるブラウザー自動化
- 03プロキシとGeoIPの設定
- 04指紋値のカスタマイズ
- 05永続ブラウザープロファイル
- 06cloakserveによる複数ID管理
活用シーン
- 01HTTPクライアントを拒否するサイトのテスト
- 02保護されたページでのフォーム送信
- 03CAPTCHA保護エンドポイントへのアクセス
- 04複数のIDを使った自動偵察
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill stealth-browser-launchインストール後、Claude Code で/stealth-browser-launchを入力して読み込まれたか確認します。
詳細
ステルスブラウザーの起動
ボット対策検知を回避するため、C++ソースレベルでフィンガープリントを変更したパッチ適用済みの Chromium バイナリを起動します。このバイナリは、JavaScript のインジェクションや Chrome の更新で動作しなくなる設定パッチではなく、バイナリレベルで canvas、WebGL、audio、GPU、screen、WebRTC、ネットワークタイミング、自動化のシグナルを偽装します。Cloudflare Turnstile、reCAPTCHA v3(スコア 0.9)、FingerprintJS、BrowserScan、および 30 以上の検知サイトを通過します。
使用する場面
- Cloudflare、Akamai、DataDome、または Kasada により、対象が curl/httpx/nuclei をブロックする場合。
- フォーム送信、ログイン、または XSS テストのため、ブラウザーで完全な JavaScript 実行が必要な場合。
- 適切なヘッダーを設定しても、認証されていないすべてのリクエストで対象から 403 が返される場合。
- CAPTCHA を解かずに reCAPTCHA で保護されたエンドポイントにアクセスする必要がある場合。
- レジデンシャルプロキシ経由で自動偵察を実行しており、ステルスブラウザーで IP と UA の相関を防ぐ必要がある場合。
前提条件
- python3 と pip を備えた
terminal。 playwrightがインストールされていること:pip install playwright && playwright install-deps chromium。- レジデンシャルプロキシ(データセンターの IP は、ブラウザーのフィンガープリントに関係なくレピュテーションによってブロックされます)。
- オプション:プロキシの出口 IP からタイムゾーンとロケールを自動解決する
cloakbrowser[geoip]。
クイックスタート
pip install cloakbrowser
python3 -c "
from cloakbrowser import launch
browser = launch()
page = browser.new_page()
page.goto('https://target.com')
print(page.title())
browser.close()
"
手順
フェーズ 1 — 基本的なステルス起動
バイナリは起動ごとにランダムなフィンガープリントシードを自動生成します。基本的なステルス起動にフラグは不要です。
from cloakbrowser import launch
browser = launch(
headless=True,
proxy="http://user:pass@residential-proxy:port",
geoip=True, # auto-detect timezone/locale from proxy exit IP
)
page = browser.new_page()
page.goto("https://target.com")
# Standard Playwright API from here
page.locator("input[name='username']").fill("test")
page.locator("button[type='submit']").click()
browser.close()
フェーズ 2 — ID の固定
同じ対象に再訪するときに固定のフィンガープリントシードを使うと、再訪問者として認識されます。
browser = launch(
proxy="http://user:pass@residential-proxy:port",
geoip=True,
args=["--fingerprint=42069"], # fixed seed = same fingerprint every launch
)
フェーズ 3 — ステルス性を最大限に高めるヘッド付きモード
C++ パッチを適用していても、ヘッドレスを検知するサイトがあります。仮想ディスプレイを使ってヘッド付きで実行します。
# Start virtual display
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
browser = launch(
headless=False, # real rendering
proxy="http://residential-proxy:port",
geoip=True,
humanize=True, # human-like mouse/keyboard/scroll
)
フェーズ 4 — フィンガープリントのカスタマイズ
特定のフィンガープリント値を上書きして、対象環境に合わせます。
browser = launch(stealth_args=False, args=[
"--fingerprint=42069",
"--fingerprint-platform=windows",
"--fingerprint-gpu-vendor=NVIDIA Corporation",
"--fingerprint-gpu-renderer=NVIDIA GeForce RTX 3060/PCIe/SSE2",
"--fingerprint-hardware-concurrency=16",
"--fingerprint-device-memory=16",
"--fingerprint-screen-width=2560",
"--fingerprint-screen-height=1440",
"--fingerprint-timezone=America/Sao_Paulo",
"--fingerprint-locale=pt-BR",
"--fingerprint-webrtc-ip=auto",
"--fingerprint-noise=false", # disable noise for FingerprintJS ML bypass
])
フェーズ 5 — 永続プロファイル
セッションをまたいで Cookie と localStorage を維持し、「初回訪問」時のチャレンジを回避します。
from cloakbrowser import launch_persistent_context
ctx = launch_persistent_context(
"./target-profile",
headless=False,
proxy="http://residential-proxy:port",
geoip=True,
)
page = ctx.new_page()
page.goto("https://target.com")
# Session persists across restarts
ctx.close()
フェーズ 6 — CDP Multiplexer による複数 ID の利用
cloakserve を使うと、1 つのコンテナーから複数のブラウザー ID を実行できます。
docker run -d --name cloak -p 127.0.0.1:9222:9222 cloakhq/cloakbrowser cloakserve
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
# Each unique fingerprint seed spawns separate Chrome process with independent identity
b1 = pw.chromium.connect_over_cdp("http://localhost:9222?fingerprint=11111")
b2 = pw.chromium.connect_over_cdp("http://localhost:9222?fingerprint=22222")
# Full identity control via query params
b3 = pw.chromium.connect_over_cdp(
"http://localhost:9222?fingerprint=33333"
"&timezone=America/New_York&locale=en-US&platform=windows"
"&hardware-concurrency=4&device-memory=8"
)
# Each browser has independent cookies, localStorage, canvas noise
フェーズ 7 — ボット対策用フォントの設定
canvas での絵文字の描画を確認する、検知の厳しいサイト(Kasada、Akamai)向けです。
apt install -y fonts-noto-color-emoji fonts-freefont-ttf fonts-unifont \
fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf
CreepJS によるフォント列挙の回避には、Windows フォントをインストールします。
# Copy from Windows machine: C:\Windows\Fonts\
mkdir -p ~/.local/share/fonts/windows
cp /path/to/windows/fonts/SegoeUI*.ttf ~/.local/share/fonts/windows/
fc-cache -f
# Then launch with:
browser = launch(args=["--fingerprint-fonts-dir=/home/user/.local/share/fonts/windows"])
フィンガープリントフラグのリファレンス
| フラグ | デフォルト | 制御する項目 |
|---|---|---|
--fingerprint=SEED | ランダムな 5 桁の数字 | canvas/WebGL/audio/fonts のマスターシード |
--fingerprint-platform | windows/macos | navigator.platform、UA の OS、GPU プール |
--fingerprint-gpu-vendor | 自動 | WebGL UNMASKED_VENDOR_WEBGL |
--fingerprint-gpu-renderer | 自動 | WebGL UNMASKED_RENDERER_WEBGL |
--fingerprint-hardware-concurrency | 8 | navigator.hardwareConcurrency |
--fingerprint-device-memory | 8 | navigator.deviceMemory |
--fingerprint-screen-width | 1920/1440 | 画面の幅 |
--fingerprint-screen-height | 1080/900 | 画面の高さ |
--fingerprint-timezone | — | IANA タイムゾーン |
--fingerprint-locale | — | BCP 47 ロケール |
--fingerprint-webrtc-ip | — | WebRTC ICE IP(プロキシの出口 IP には auto) |
--fingerprint-noise=false | true | canvas/WebGL/audio のノイズを無効化 |
--fingerprint-fonts-dir | — | 対象プラットフォームのフォントパス |
--fingerprint-windows-font-metrics | — | フォントメトリクスを Windows に合わせる(v148+) |
--fingerprint-storage-quota | 自動 | ストレージクォータ(MB) |
--fingerprint-taskbar-height | 48/95/0 | タスクバーの高さを偽装 |
落とし穴
- データセンターの IP アドレスは、ブラウザーフィンガープリントに関係なくブロックされます。 必ずレジデンシャルプロキシを使用してください。
page.wait_for_timeout()は reCAPTCHA に検知される CDP トラフィックを漏らします。 代わりにtime.sleep()を使用してください。- Puppeteer は Playwright より多くの CDP トラフィックを送信します。 reCAPTCHA 対策が重要なターゲットには Playwright を使用してください。
- フォントが不足すると、Kasada/Akamai でキャンバスハッシュが一致しなくなります。 フェーズ 7 に記載されているフォントパッケージをインストールしてください。
--fingerprint-noise=falseによって、FingerprintJS の機械学習ベースの検知が発生する場合があります。 その機能によって特にブロックされる場合にのみ、ノイズを無効にしてください。- C++ のパッチを適用していても、ヘッドレスモードは検知される可能性があります。 厳しい対策を行うサイトで最大限ステルス性を高めるには、ヘッドありモード(
headless=False)を使用してください。 - バイナリの自動更新は約 24 時間キャッシュされます。 再現性が必要な場合は、
browser_version=でバージョンを固定してください。
検証
https://browserscan.netでテストし、4 つすべてのボットチェックが NORMAL と表示されることを確認してください。https://demo.fingerprint.com/playgroundでテストし、「nodriver」や「bot」の検知が表示されないことを確認してください。- reCAPTCHA v3(
https://antcpt.com/eng/information/demo-form/recaptcha-3-test-score.html)でテストし、スコアが 0.7 以上であることを確認してください。 https://deviceandbrowserinfo.comでテストし、isBotが false で、true フラグが 0 個であることを確認してください。page.evaluate("navigator.webdriver")でnavigator.webdriverがfalseであることを確認してください。
関連スキル
humanize-automation— 振る舞いによる検知を回避する、人間のようなマウス操作、キーボード操作、スクロール。tls-fingerprint-impersonation— HTTP クライアントレベルでの TLS/JA4 フィンガープリントの偽装。http2-header-impersonation— ブラウザー固有の HTTP/2 擬似ヘッダーの順序と SETTINGS フレーム。