ovobrowser

ovobrowsersupportMIT活跃维护

源码级修改 Chromium 内核的指纹浏览器,通过 C++ 补丁直接编译进二进制而非 JS 注入,让自动化浏览器在检测站上按普通 Chrome 评分,绕过 Cloudflare 等反爬。

源码级 Chromium 指纹内核,检测站按普通 Chrome 评分。Source-level Chromium fingerprint kernel that passes bot detection tests. Not JS injection — C++ patches compiled into the binary.

v1.26.1027发布于 2026-10-27 08:39 UTC1,152star +45 / 7 天63fork同步于 2026-11-10 23:51 UTC

怎么上手

由 README 提炼,执行前请确认
解压 zip 后直接运行:chrome.exe --user-data-dir=D:\ovobrowser-profiles\acc01 --no-first-run --no-default-browser-check --disable-quic --fingerprint-platform=windows --fingerprint-brand=Chrome --fingerprint-brand-version=150.0.7871.124 --fingerprint-platform-version=10.0.0 --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36" --fingerprint-screen=1536x864 --fingerprint-device-scale-factor=1.25 --fingerprint-screen-color-depth=24 --fingerprint-hardware-concurrency=8 --fingerprint-device-memory=8 --timezone=America/New_York --lang=en-US --accept-lang=en-US,en --webrtc-ip-handling-policy=disable_non_proxied_udp https://demo.fingerprint.com/playground
硬件要求按 README 说明

README 只提供 Windows x64 便携包,内核版本 138/144/150;未提及显存、CPU 运行或 GPU 厂商型号要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

源码级改 C++ 编译进二进制的 Chromium 指纹内核,检测站看到的就是普通 Chrome

源码级修改 Chromium 内核的指纹浏览器,通过 C++ 补丁直接编译进二进制而非 JS 注入,让自动化浏览器在检测站上按普通 Chrome 评分,绕过 Cloudflare 等反爬。

核心能力

  • 在 Chromium C++ 源码层改指纹并编进二进制,非 JS 注入
  • Canvas/WebGL/Audio/ClientRects/Font 五类噪声可开关可固定种子
  • 覆盖 UA-CH、平台、核数、内存、屏幕、DPR、电池、语音列表
  • WebGL vendor/renderer 可伪装,隐藏 WebGPU 与蓝牙,WebRTC 不漏内网 IP
  • 时区与 lang/accept-lang 可对齐出口 IP,任意语言拼命令行拉起 chrome.exe

容易踩的坑

UA 版本位必须写成 主版本.0.0.0,完整补丁号只放 --fingerprint-brand-version,否则 BrowserScan 扣分;只传 --fingerprint-screen 不传 DPR 会乘上宿主机真实缩放算出假分辨率;--lang 与 --accept-lang 必须都传并与出口 IP 对齐,SOCKS 代理场景必须加 --disable-quic;开噪声或伪装 GPU 易被 FingerprintJS Pro 判 Browser Tampering。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

2 个版本v1.26.1027
  1. v1.26.1027ovobrowser portable kernels (138 / 144 / 150/150/155)最新正式版2026-10-27 · 2026-10-27 08:39 UTC

    ovobrowser portable kernels v1.26.1027

    Windows x64 portable builds of the ovobrowser Chromium fingerprint kernel.

    Assets

    把我们的内核、某商业指纹浏览器、正版 Chrome 155 放在一起逐项对比,下面这些地方原来和正版不一样,可能被识别,现已对齐:

    • measureText 修复:开 --fingerprint-font 等噪声后,文字宽度会变成接近 0,现在只做极小的偏移。
    • WebGL 参数:真机是 NVIDIA、伪装成 Intel / AMD 时,MAX_VERTEX_UNIFORM_VECTORS 等 3 个参数原来露出 NVIDIA 特有的 4095,现在按伪装的厂商返回 4096 / 16384 / 212992。
    • WebGPU 厂商与架构:伪装显卡时,adapter.info 返回和正版一样的短名,如 intel / gen-9、amd / rdna-2、nvidia / ampere,原来是 Google Inc. (Intel)、架构为空。
    • WebGPU 特性:不再按种子隐藏可选特性,改报本机真实的全部特性。
    • WebGL 噪声:readPixels、toDataURL、drawImage(webglCanvas) 三种读取方式结果完全一致,原来只有 readPixels 加了噪声,一比对就能看出来。
    • 语音列表:补上正版 Chrome 自带的 19 个 Google 在线语音(加上系统语音共 22 个),名称和正版逐字相同。
    • outerWidth / outerHeight:返回真实窗口尺寸,原来等于内视口,真实浏览器不会这样。打开开发者工具导致差值异常时,才回退成「内视口 + 正常边框」,反调试仍然有效。
    • ClientRects 噪声:整数坐标的元素不再加小数偏移(正版返回 10, 20,不会是 9.9998, 19.9992),带小数的坐标照常加噪声。
    • 书签栏:默认不再常驻。原来网页可视高度比正版矮 33px,现在和正版一样只在新标签页显示。
    • Widevine:便携包里带上了 Widevine 组件,com.widevine.alpha 可用,Netflix 等 DRM 视频能播放。
    • 新参数 --fingerprint-max-touch-points=<0~10>:用于桌面平台,改 navigator.maxTouchPoints,并同步 any-pointer: coarse。普通台式机传 0。不传则跟随宿主机,触屏笔记本会报 10。
    • Google 首页登录态:登录后新标签页打开的 Google 首页能正常显示头像,原来始终显示「登录」按钮。

    验证结果:四个内核的 lies 均为 0,BrowserScan 不论是否伪装 GPU 都是 100%。

  2. v1.0.0ovobrowser portable kernels (138 / 144 / 150)2026-08-23 · 2026-08-23 06:35 UTC
    查看更新说明

    ovobrowser portable kernels v1.0.0

    Windows x64 portable builds of the ovobrowser Chromium fingerprint kernel.

    Assets

    KernelVersionFile
    150 (recommended)150.0.7871.124ovobrowser-150-150.0.7871.124-win64-portable.zip
    144144.0.7559.132ovobrowser-144-144.0.7559.132-win64-portable.zip
    138138.0.7204.183ovobrowser-138-138.0.7204.183-win64-portable.zip

    Unzip one archive and launch the included chrome.exe. See the repository README for flags and language examples.

    Verify downloads

    Download SHA256SUMS.txt with the archives, then verify on Windows PowerShell:

    Get-FileHash .\ovobrowser-150-150.0.7871.124-win64-portable.zip -Algorithm SHA256
    

    The result must match the corresponding line in SHA256SUMS.txt.

    Notes

    • Platform: Windows x64
    • Version 150 is recommended.
    • Versions 144 and 150 include fuller audio noise and main-thread/Worker canvas alignment.
    • Documentation and examples are available in Chinese and English in the repository.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    源码级修改的 Chromium 指纹内核。不是 JS 注入,不是 playwright-stealth 那套运行时补丁——指纹在 C++ 里改完再编译进二进制。检测站看到的是普通 Chrome,因为它本来就是 Chromium。

    当前便携包:Windows x64 · 内核 138 / 144 / 150 · 产品名 ovobrowser(UA / Client Hints 仍报 Chrome,避免被判未知浏览器)

    • 5 类独立噪声:Canvas / WebGL / Audio / ClientRects / Font(可关可固定种子)
    • UA-CH、平台、核数、内存、屏幕、DPR、电池、DNT、语音列表
    • WebGL vendor/renderer、隐藏 WebGPU / 蓝牙、WebRTC 不漏内网 IP
    • 时区 / lang / accept-lang 与出口 IP 对齐
    • 任意语言:拼命令行 → 拉起 chrome.exe(Python / Node / Go / C# / PowerShell / Java / Rust 示例都在本页)

    普通用户客户端

    针对普通用户,我们已经开发了图形化指纹浏览器客户端:装好就能管理环境、代理、团队和窗口同步,不必自己拼命令行。中英双语说明与软件截图见 ovobrowser-manger。官网下载:ovobrowser.com。

    下载最新包 → Releases v1.0.0


    目录


    检测通过的网站列表

    https://github.com/user-attachments/assets/18958668-6489-44f5-9b7e-91d897c3ce86

    https://github.com/user-attachments/assets/ef4b4520-d504-430c-84c8-129208074986

    https://github.com/user-attachments/assets/3ee4751f-d6bc-4684-8c6e-58f815927029

    https://github.com/user-attachments/assets/61f3f519-991e-40af-ab76-70e4a5db9d13


    下载

    解压 zip,里面的 chrome.exe 就是内核。

    内核版本下载
    150(推荐)150.0.7871.124ovobrowser-150-…-win64-portable.zip
    144144.0.7559.132ovobrowser-144-…-win64-portable.zip
    138138.0.7204.183ovobrowser-138-…-win64-portable.zip

    150 对 FingerprintJS 的 ML 更友好;三套开关基本一致(144/150 的 audio 噪声更完整,canvas 主线程与 Worker 已对齐)。

    环境变量(下面所有示例通用):

    set OVO_CHROME=D:\ovobrowser-150\chrome.exe
    set OVO_PROFILE=D:\ovobrowser-profiles\acc01
    set OVO_URL=https://demo.fingerprint.com/playground
    

    30 秒上手

    把路径换成你解压出来的 chrome.exe:

    chrome.exe --user-data-dir=D:\ovobrowser-profiles\acc01 --no-first-run --no-default-browser-check --disable-quic --fingerprint-platform=windows --fingerprint-brand=Chrome --fingerprint-brand-version=150.0.7871.124 --fingerprint-platform-version=10.0.0 --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36" --fingerprint-screen=1536x864 --fingerprint-device-scale-factor=1.25 --fingerprint-screen-color-depth=24 --fingerprint-hardware-concurrency=8 --fingerprint-device-memory=8 --timezone=America/New_York --lang=en-US --accept-lang=en-US,en --webrtc-ip-handling-policy=disable_non_proxied_udp https://demo.fingerprint.com/playground
    

    这套是 FingerprintJS Pro 全绿骨架(不开噪声、不伪装 GPU 串)。时区/语言请改成你的出口 IP 所在地。


    为什么自己编译

    注入式工具ovobrowser
    改指纹的位置JS / CDP / 启动参数拼装Chromium C++ 源码,编进二进制
    典型代表playwright-stealth、puppeteer-extra本仓库便携包
    检测站看到什么补丁痕迹、Function.toString 异常、CDP 特征普通 Chrome API
    升级Chrome 一更就碎跟内核版本一起 rebase

    产品名改成 ovobrowser(任务管理器、关于页、默认 User Data 目录)。UA 和 Client Hints 故意仍是 Chrome——改成 ovobrowser 会被直接判未知浏览器。

    规则:不传开关 = 真机/上游默认;传入 = 按你给的值伪装或加噪。


    可修改的指纹(全表)

    Navigator / UA-CH / 硬件

    开关改什么示例不传
    --user-agent=navigator.userAgent + 请求头…Chrome/150.0.0.0 Safari/537.36内核自带 UA
    --fingerprint-brand=UA-CH brandsChromeChromium / Google Chrome
    --fingerprint-brand-version=UA-CH 完整补丁号150.0.7871.124内核版本
    --fingerprint-platform=navigator.platform + UA-CHwindows / macos / linux / android / ios真机 OS
    --fingerprint-platform-version=UA-CH platformVersion10.0.0(Win11 用 13.0.0+)真机
    --fingerprint-hardware-concurrency=navigator.hardwareConcurrency8真机核数
    --fingerprint-device-memory=navigator.deviceMemory0.25/0.5/1/2/4/8默认 8
    --fingerprint-dnt=navigator.doNotTrack1 / 0 / unspecifiednull
    --fingerprint-battery=getBattery()1,1.0,0,Infinity真实电池
    --fingerprint-disable-speech-voicesspeechSynthesis.getVoices()传入即空列表真实语音

    platform=ios 时自动隐藏 navigator.userAgentData(真机 Safari 没有这个 API)。GREASE 品牌由内核按主版本生成,不用手写。

    UA 里的版本位必须是 主版本.0.0.0。完整补丁号只放 --fingerprint-brand-version。写成 Chrome/150.0.7871.124 → BrowserScan Different browser version −5%。

    屏幕

    开关改什么示例不传
    --fingerprint-screen=screen.width/height/avail*(CSS 逻辑像素)1536x864真机分辨率
    --fingerprint-device-scale-factor=devicePixelRatio、CSS resolution、Sec-CH-DPR1.25宿主机缩放(会泄露真机)
    --fingerprint-screen-color-depth=colorDepth / pixelDepth24真机
    --fingerprint-screen-width= / -height=144/150 分量写法等价于 screen—

    GPU / WebRTC / 隐藏接口

    开关改什么示例不传
    --fingerprint-gpu-vendor=UNMASKED_VENDOR_WEBGLQualcomm真机 vendor
    --fingerprint-gpu-renderer=UNMASKED_RENDERER_WEBGLANGLE (Qualcomm, Adreno (TM) 730, OpenGL ES 3.2)真机 renderer
    --fingerprint-webgpu=disablenavigator.gpu = null传入即隐藏暴露适配器
    --fingerprint-disable-bluetoothnavigator.bluetooth = null传入即隐藏真实蓝牙 API
    --webrtc-ip-handling-policy=ICE 候选disable_non_proxied_udp(推荐,默认)同默认

    vendor 和 renderer 必须是同一块真实 GPU 的成套字符串。手机 UA + 桌面 RTX/D3D11 = 一眼假。

    时区 / 语言

    开关改什么示例不传
    --timezone=JS Intl / DateAmerica/New_York系统时区
    --lang=UI + navigator.language + Intl localeen-US系统语言
    --accept-lang=请求头 + navigator.languagesen-US,en(不要 q=)系统默认

    三个都要跟出口 IP 对齐,否则 BrowserScan:Different time zones −10%、Language mismatch −10%。--lang 和 --accept-lang 必须都传。

    行为类(不是指纹,但常用)

    开关作用
    --blink-settings=imagesEnabled=false不加载图片
    --max-image-size-kb=300丢掉过大的图
    --autoplay-policy=document-user-activation-required禁自动播放
    --mute-audio静音
    --disable-save-password关掉保存密码气泡(默认会保存)
    --block-notifications只拒通知
    --deny-permission-prompts拒全部权限弹窗
    --disable-quicSOCKS 场景必须关,否则 https 常 ERR_SSL_PROTOCOL_ERROR
    --user-data-dir=持久化 Cookie / 密码;不传则像临时档案

    无开关、默认生效:ClientRects 噪声跨调用一致;144/150 canvas 主线程与 Worker 一致;UA 与内核主版本自洽;地址栏默认搜索已从 ungoogled 的「No Search」改回 Google。


    分类噪声

    传入 = 该类加噪;不传 = 原生输出(FingerprintJS 全绿请全部不传)。

    开关作用面
    --fingerprint-canvas[=种子]toDataURL / getImageData / measureText
    --fingerprint-webgl[=种子]WebGL readPixels
    --fingerprint-audio[=种子]AudioContext 波形 / 采样率
    --fingerprint-rects[=种子]getClientRects / getBoundingClientRect
    --fingerprint-font[=种子]字体度量 / 字体列表
    --fingerprint-random五类一起开(各随机种子)
    • 裸开关:本次启动随机种子,同一次运行跨标签一致
    • =8842:固定种子,一个账号一套
    • --fingerprint=数字 只是缺省种子回退,单独传不会开噪声

    138 的 audio 只有帧数微扰;144/150 才有完整采样率噪声。

    开噪声或 --fingerprint-gpu-* → FingerprintJS Pro 容易报 Browser Tampering。要换 visitor 就开;要全绿就关。


    屏幕必须和 DPR 成对

    --fingerprint-screen 填的是逻辑像素。检测站显示的物理分辨率 = screen.width × devicePixelRatio。

    只传 screen 不传 DPR,会乘上宿主机真实缩放,算出不存在的分辨率。

    screenDPR真实硬件
    1920x108011080p @100%
    1536x8641.251080p 笔记本 @125%(最常见)
    1280x7201.51080p @150%
    2560x144012K @100%
    2048x11521.252K 笔记本 @125%
    1920x108024K @200%
    1280x8002MacBook Pro 13" Retina
    412x9152.625Pixel 7
    393x8523iPhone 14 Pro

    macOS 只有 1 / 2;Windows 用 1/1.25/1.5/1.75/2/2.25,不要编 1.33。

    Console 自检:

    console.table({
      logical: `${screen.width}x${screen.height}`,
      dpr: devicePixelRatio,
      physical: `${screen.width * devicePixelRatio}x${screen.height * devicePixelRatio}`,
      media: matchMedia(`(resolution: ${devicePixelRatio}dppx)`).matches,
    });
    

    多语言调用

    内核没有 HTTP SDK。所有语言做同一件事:拼 argv → spawn chrome.exe。把 OVO_CHROME 指到解压后的 exe。可运行文件也在 examples/。

    Python

    import os, subprocess
    from pathlib import Path
    
    chrome = os.environ.get("OVO_CHROME", r"D:\ovobrowser-150\chrome.exe")
    profile = os.environ.get("OVO_PROFILE", r"D:\ovobrowser-profiles\py")
    Path(profile).mkdir(parents=True, exist_ok=True)
    
    subprocess.Popen([
        chrome,
        f"--user-data-dir={profile}",
        "--no-first-run", "--no-default-browser-check", "--disable-quic",
        "--fingerprint-platform=windows",
        "--fingerprint-brand=Chrome",
        "--fingerprint-brand-version=150.0.7871.124",
        "--fingerprint-platform-version=10.0.0",
        "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
        "--fingerprint-hardware-concurrency=8",
        "--fingerprint-device-memory=8",
        "--fingerprint-screen=1536x864",
        "--fingerprint-device-scale-factor=1.25",
        "--fingerprint-screen-color-depth=24",
        "--fingerprint-battery=1,1.0,0,Infinity",
        "--webrtc-ip-handling-policy=disable_non_proxied_udp",
        "--timezone=America/New_York",
        "--lang=en-US",
        "--accept-lang=en-US,en",
        "https://demo.fingerprint.com/playground",
    ])
    

    Python + Playwright

    pip install playwright。用 persistent context,不要 launch() 隐身窗(BrowserScan 会扣 Incognito)。

    from playwright.sync_api import sync_playwright
    
    CHROME = r"D:\ovobrowser-150\chrome.exe"
    PROFILE = r"D:\ovobrowser-profiles\pw"
    ARGS = [
        "--no-first-run", "--no-default-browser-check", "--disable-quic",
        "--fingerprint-platform=windows", "--fingerprint-brand=Chrome",
        "--fingerprint-brand-version=150.0.7871.124",
        "--fingerprint-platform-version=10.0.0",
        "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
        "--fingerprint-screen=1536x864", "--fingerprint-device-scale-factor=1.25",
        "--fingerprint-screen-color-depth=24",
        "--fingerprint-hardware-concurrency=8", "--fingerprint-device-memory=8",
        "--timezone=America/New_York", "--lang=en-US", "--accept-lang=en-US,en",
        "--webrtc-ip-handling-policy=disable_non_proxied_udp",
    ]
    
    with sync_playwright() as p:
        ctx = p.chromium.launch_persistent_context(
            user_data_dir=PROFILE,
            executable_path=CHROME,
            headless=False,
            args=ARGS,
            ignore_default_args=["--enable-automation", "--no-sandbox"],
            chromium_sandbox=True,
            no_viewport=True,
        )
        page = ctx.pages[0] if ctx.pages else ctx.new_page()
        page.goto("https://demo.fingerprint.com/playground")
        input("检查完回车…")
        ctx.close()
    

    Node.js

    const { spawn } = require("child_process");
    const fs = require("fs");
    
    const chrome = process.env.OVO_CHROME || "D:\\ovobrowser-150\\chrome.exe";
    const profile = process.env.OVO_PROFILE || "D:\\ovobrowser-profiles\\node";
    fs.mkdirSync(profile, { recursive: true });
    
    spawn(chrome, [
      `--user-data-dir=${profile}`,
      "--no-first-run", "--no-default-browser-check", "--disable-quic",
      "--fingerprint-platform=windows", "--fingerprint-brand=Chrome",
      "--fingerprint-brand-version=150.0.7871.124",
      "--fingerprint-platform-version=10.0.0",
      "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
      "--fingerprint-hardware-concurrency=8", "--fingerprint-device-memory=8",
      "--fingerprint-screen=1536x864", "--fingerprint-device-scale-factor=1.25",
      "--fingerprint-screen-color-depth=24",
      "--fingerprint-battery=1,1.0,0,Infinity",
      "--webrtc-ip-handling-policy=disable_non_proxied_udp",
      "--timezone=America/New_York", "--lang=en-US", "--accept-lang=en-US,en",
      "https://demo.fingerprint.com/playground",
    ], { detached: true, stdio: "ignore" }).unref();
    

    Go

    chrome := `D:\ovobrowser-150\chrome.exe`
    profile := `D:\ovobrowser-profiles\go`
    cmd := exec.Command(chrome,
        "--user-data-dir="+profile,
        "--no-first-run", "--no-default-browser-check", "--disable-quic",
        "--fingerprint-platform=windows", "--fingerprint-brand=Chrome",
        "--fingerprint-brand-version=150.0.7871.124",
        "--fingerprint-platform-version=10.0.0",
        "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
        "--fingerprint-hardware-concurrency=8", "--fingerprint-device-memory=8",
        "--fingerprint-screen=1536x864", "--fingerprint-device-scale-factor=1.25",
        "--fingerprint-screen-color-depth=24",
        "--webrtc-ip-handling-policy=disable_non_proxied_udp",
        "--timezone=America/New_York", "--lang=en-US", "--accept-lang=en-US,en",
        "https://demo.fingerprint.com/playground",
    )
    cmd.Start()
    

    C#

    Process.Start(new ProcessStartInfo {
        FileName = @"D:\ovobrowser-150\chrome.exe",
        Arguments = string.Join(" ", new[] {
            "--user-data-dir=\"D:\\ovobrowser-profiles\\cs\"",
            "--no-first-run", "--no-default-browser-check", "--disable-quic",
            "--fingerprint-platform=windows", "--fingerprint-brand=Chrome",
            "--fingerprint-brand-version=150.0.7871.124",
            "--fingerprint-platform-version=10.0.0",
            "--user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36\"",
            "--fingerprint-screen=1536x864", "--fingerprint-device-scale-factor=1.25",
            "--timezone=America/New_York", "--lang=en-US", "--accept-lang=en-US,en",
            "--webrtc-ip-handling-policy=disable_non_proxied_udp",
            "https://demo.fingerprint.com/playground",
        }),
        UseShellExecute = true,
    });
    

    PowerShell

    $chrome  = $env:OVO_CHROME;  if (-not $chrome)  { $chrome  = "D:\ovobrowser-150\chrome.exe" }
    $profile = $env:OVO_PROFILE; if (-not $profile) { $profile = "D:\ovobrowser-profiles\ps" }
    New-Item -ItemType Directory -Force -Path $profile | Out-Null
    Start-Process $chrome -ArgumentList @(
      "--user-data-dir=$profile",
      "--no-first-run","--no-default-browser-check","--disable-quic",
      "--fingerprint-platform=windows","--fingerprint-brand=Chrome",
      "--fingerprint-brand-version=150.0.7871.124",
      "--fingerprint-platform-version=10.0.0",
      "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
      "--fingerprint-screen=1536x864","--fingerprint-device-scale-factor=1.25",
      "--fingerprint-hardware-concurrency=8","--fingerprint-device-memory=8",
      "--timezone=America/New_York","--lang=en-US","--accept-lang=en-US,en",
      "--webrtc-ip-handling-policy=disable_non_proxied_udp",
      "https://demo.fingerprint.com/playground"
    )
    

    Java

    List<String> cmd = new ArrayList<>();
    cmd.add("D:\\ovobrowser-150\\chrome.exe");
    cmd.add("--user-data-dir=D:\\ovobrowser-profiles\\java");
    cmd.add("--no-first-run"); cmd.add("--disable-quic");
    cmd.add("--fingerprint-platform=windows");
    cmd.add("--fingerprint-brand=Chrome");
    cmd.add("--fingerprint-brand-version=150.0.7871.124");
    cmd.add("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36");
    cmd.add("--fingerprint-screen=1536x864");
    cmd.add("--fingerprint-device-scale-factor=1.25");
    cmd.add("--timezone=America/New_York");
    cmd.add("--lang=en-US"); cmd.add("--accept-lang=en-US,en");
    cmd.add("https://demo.fingerprint.com/playground");
    new ProcessBuilder(cmd).start();
    

    Rust

    Command::new(r"D:\ovobrowser-150\chrome.exe")
        .args([
            "--user-data-dir=D:\\ovobrowser-profiles\\rust",
            "--no-first-run", "--disable-quic",
            "--fingerprint-platform=windows",
            "--fingerprint-brand=Chrome",
            "--fingerprint-brand-version=150.0.7871.124",
            "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
            "--fingerprint-screen=1536x864",
            "--fingerprint-device-scale-factor=1.25",
            "--timezone=America/New_York",
            "--lang=en-US", "--accept-lang=en-US,en",
            "https://demo.fingerprint.com/playground",
        ])
        .spawn()?;
    

    代理(带账密)

    Chromium --proxy-server 不支持用户名密码。住宅代理请:

    浏览器 → 本地无认证 SOCKS5 桥 →(国内再经本机梯子,如 7890)→ 上游认证代理
    

    --proxy-server=socks5://127.0.0.1:本地桥端口

    走 SOCKS 时务必 --disable-quic。时区/语言要在启动前按出口 IP 填好,启动后再改 --timezone 无效。


    详细文档

    文档中文English
    启动参数完整说明FLAGS.mdFLAGS.md
    指纹修改面与实现说明FINGERPRINT.mdFINGERPRINT.md
    推荐启动配方RECIPES.mdRECIPES.md
    仓库目录结构STRUCTURE.md—

    版本更新说明

    把我们的内核、某商业指纹浏览器、正版 Chrome 155 放在一起逐项对比,下面这些地方原来和正版不一样,可能被识别,现已对齐:

    • measureText 修复:开 --fingerprint-font 等噪声后,文字宽度会变成接近 0,现在只做极小的偏移。
    • WebGL 参数:真机是 NVIDIA、伪装成 Intel / AMD 时,MAX_VERTEX_UNIFORM_VECTORS 等 3 个参数原来露出 NVIDIA 特有的 4095,现在按伪装的厂商返回 4096 / 16384 / 212992。
    • WebGPU 厂商与架构:伪装显卡时,adapter.info 返回和正版一样的短名,如 intel / gen-9、amd / rdna-2、nvidia / ampere,原来是 Google Inc. (Intel)、架构为空。
    • WebGPU 特性:不再按种子隐藏可选特性,改报本机真实的全部特性。
    • WebGL 噪声:readPixels、toDataURL、drawImage(webglCanvas) 三种读取方式结果完全一致,原来只有 readPixels 加了噪声,一比对就能看出来。
    • 语音列表:补上正版 Chrome 自带的 19 个 Google 在线语音(加上系统语音共 22 个),名称和正版逐字相同。
    • outerWidth / outerHeight:返回真实窗口尺寸,原来等于内视口,真实浏览器不会这样。打开开发者工具导致差值异常时,才回退成「内视口 + 正常边框」,反调试仍然有效。
    • ClientRects 噪声:整数坐标的元素不再加小数偏移(正版返回 10, 20,不会是 9.9998, 19.9992),带小数的坐标照常加噪声。
    • 书签栏:默认不再常驻。原来网页可视高度比正版矮 33px,现在和正版一样只在新标签页显示。
    • Widevine:便携包里带上了 Widevine 组件,com.widevine.alpha 可用,Netflix 等 DRM 视频能播放。
    • 新参数 --fingerprint-max-touch-points=<0~10>:用于桌面平台,改 navigator.maxTouchPoints,并同步 any-pointer: coarse。普通台式机传 0。不传则跟随宿主机,触屏笔记本会报 10。
    • Google 首页登录态:登录后新标签页打开的 Google 首页能正常显示头像,原来始终显示「登录」按钮。

    验证结果:四个内核的 lies 均为 0,BrowserScan 不论是否伪装 GPU 都是 100%。

    • AMD 显卡 Canvas 报红:在 AMD 显卡上开画布噪声,BrowserScan 会报 Canvas Tampering。新的画布噪声只改抗锯齿边缘半透明像素的 alpha 最低位,不动 RGB 和纯色区域,同一画面处理两遍结果不变。getImageData、toDataURL、toBlob、子区域读取的结果彼此一致。
    • Google 登录校验头:发往 Google 域名的请求补上正版 Chrome 才有的 x-browser-channel / year / validation / copyright 四个请求头,按 UA 主版本取值,和同版本正版逐字节一致,登录 Google 账号更不容易被风控。
    • deviceMemory:navigator.deviceMemory 与请求头 Sec-CH-Device-Memory 统一成同一个值,原来请求头报的是真机内存。取值范围也按各版本正版:138 / 144 为 0.25~8;150 / 155 桌面为 2~32、移动端为 1~8。
    • 新增 155.0.8059.39 内核(基于 ungoogled-chromium 155),参数和 150 完全相同。
    • 155 内核 BrowserScan 100%;FingerprintJS Pro 的 Bot、Tampering、DevTools、VM、Incognito 均为 Not detected,与 150 一致。
    • 原来在 Chrome 应用商店点「添加至 Chrome」,144 会一直转圈,138 会显示「目前无法获取该产品」,现在都能正常下载安装。
    • 后台自动更新扩展仍然是关闭的,浏览器不会主动连 Google 检查扩展更新。
    • 设备控制条:平台设为 android / ios 并传了 --fingerprint-screen 时,窗口顶部出现类似 DevTools 设备模式的控制条,可以:
      • 切换机型预设或自定义宽高;
      • 旋转横竖屏;
      • 调整显示比例;
      • 设置网络限速。
    • 手机画面显示:手机画面居中显示,窗口较小时按比例整体缩小,网页看到的视口和 DPR 仍是设备的值。原来网页贴在左上角,窗口小了还会被裁掉。
    • 中文字体:切到 Android / iOS 并开 --fingerprint-font 时,中文不再显示成方框,雅黑、宋体、苹方等中日韩字体会保留。
    • 平台信息一致:页面、Worker、网络请求三处的平台信息保持一致,userAgentData、Sec-CH-UA-Platform、Sec-CH-UA-Mobile 都会跟着改成 Android。iOS 不再发送 Client Hints 请求头。
    • 触控、指针和屏幕方向:移动端的 maxTouchPoints 为 5,pointer: coarse,hover: none,竖屏时 screen.orientation 为 portrait-primary。
    • WebGL 报错:移动端伪装 GPU 后,BrowserScan 不再扣「WebGL exception」分。
    • 新标签页:新标签页默认打开 Google 首页(原来是空白页),安卓 UA 下打开 Google 也不会 404。
    • 网页里的 debugger 语句(包括字面量、eval、new Function)默认不再让页面暂停,防止站点借此卡死页面或检测开发者工具。
    • 需要自己调试时,传 --fingerprint-allow-debugger 恢复原生行为。

    许可

    文档与示例:本仓库 LICENSE(MIT)。内核二进制遵循 Chromium / ungoogled-chromium 上游许可。


    联系我们


    Star History