防指紋瀏覽器

防指紋瀏覽器:指紋在核心裡改,不是靠注入 JavaScript

任何瀏覽器都會把自己所在這台機器的幾百件小事交給網站:螢幕尺寸、字型清單、顯示卡、音訊部分。這些湊在一起,足以把那台機器認出來,連從這台機器登入的第二個帳號也會被當成同一個人。防指紋瀏覽器存在的意義,就是讓每個設定檔看起來像另一台機器。究竟怎麼做到,才是各家產品之間的全部差別,而這正好是多數產品頁跳過的部分。

免費開始
不同類型的工具把指紋寫在哪一層 頁面腳本跑在這個堆疊的最上層,所以注入在那裡的值可能在被覆寫之前就已經被讀走,而它下面的層根本碰不到。SigoLogin 寫在下面那兩層,頁面腳本伸不到那裡。 頁面腳本 Web API:navigator、canvas、WebGL 瀏覽器核心(C++) 網路:標頭、Client Hints、交握 注入的 JavaScript 寫在這裡 SigoLogin 寫在這裡
頁面腳本跑在這個堆疊的最上層,所以注入在那裡的值可能在被覆寫之前就已經被讀走,而它下面的層根本碰不到。SigoLogin 寫在下面那兩層,頁面腳本伸不到那裡。

你拿到的是什麼

在核心裡改

值在頁面腳本執行之前就用 C++ 寫好,不是事後往 Chrome 上注入。

字型三條路一起過濾

量寬度、按名字查、本機字型 API,三條路都從同一份清單作答,所以互相對得上。

每個設定檔一個代理

帶驗證的 HTTP 與 SOCKS5,旁邊不漏 DNS,時區取自代理所在的國家。

每個設定檔一台真機

螢幕、核心數、記憶體與顯示卡都來自同一台量過的機器,絕不拼湊。

跨工作階段不變

同一個設定檔每次開啟都畫出同一個 canvas。會漂移的指紋比沒有還糟。

量出來的,不是嘴上說的

在同一台機器上和真實的 Chrome 對著量出來的,不是從設計上推出來的。

防指紋瀏覽器是什麼

防指紋瀏覽器在一台電腦上跑很多個瀏覽器設定檔,並給每個設定檔一份自己的身分:自己的指紋、自己的 Cookie、自己的代理、磁碟上自己的資料夾。彼此之間什麼都不共用,所以看到設定檔 A 的網站,沒有辦法把它和設定檔 B 連起來。

瀏覽器指紋到底是什麼

指紋不是一個值。它是瀏覽器對任何頁面都提得出的那些問題所給的一整套答案:User-Agent 怎麼寫、螢幕多大、回報幾個 CPU 核心、哪些字型查得到、顯示卡驅動程式回傳什麼字串、canvas 畫出來的每一個像素長什麼樣。SigoLogin 為每個設定檔寫十五個這樣的識別面,正是辨識時分量最重的那幾個。

危險不在單獨某一個答案,而在組合。一台機器在 User-Agent 裡說自己是 macOS,WebGL renderer 報的卻是 Direct3D 驅動程式,這是一台根本不存在的機器;而一台不存在的機器,比一台普通機器好認得多。

為什麼光有代理還不夠

代理換的是請求從哪個位址過來。瀏覽器裡面它什麼都沒換。走兩個不同代理的兩個帳號,回報的仍然是同一塊螢幕、同一份字型清單、同一張顯示卡、同一批 canvas 像素,這些就足以把它們串在一起。

反過來也一樣。一個設定檔回報的是雅加達時區,位址卻在美國,這在任何人讀到指紋之前就已經自相矛盾。SigoLogin 的時區與語言直接取自代理所在的國家,兩者沒辦法對不上。

兩種做法,以及這為什麼要緊

多數防指紋瀏覽器就是一般的 Chrome,往每個頁面注入 JavaScript 去覆寫 navigator、canvas 和 WebGL。這樣做便宜,也過得了簡單的檢測。它同樣會留下痕跡。

注入 JavaScript 的工具

  • 被覆寫的函式不再像原生的:對打過修補的方法呼叫 toString,回傳的文字和真的不一樣。
  • 注入發生在頁面開始載入之後。腳本在第一行就讀值,讀到的是真實值。
  • JavaScript 之外的東西原封不動:請求標頭、Client Hints 的順序、每次請求帶上的語言。
  • 把一個字型從 JavaScript 裡藏起來,並不能改變這個字型實際把文字畫多寬。
  • 每多一個識別面就要多一段注入腳本,而每一段腳本都是多一處會被察覺的地方。

SigoLogin

  • 值在頁面腳本執行之前就用 C++ 寫好,沒有打過修補的函式可以找。
  • 從第一行起,核心回的就是這個設定檔的值。
  • Client Hints、標頭與 locale 在網路層設定,和頁面讀得到的 User-Agent 對得上。
  • 字型查找在字型引擎裡就被過濾,所以量出來的寬度和宣告的清單一致。
  • 十九個修補編譯進同一個 Chromium 152 版本,在瀏覽器啟動之前就已套用。

我們這條路的代價值得直說:我們編譯的是整個瀏覽器,所以跟上一個新的 Chrome 版本要花好幾天而不是幾分鐘,核心下載量大約 2 GB,而不是幾 MB。

比較

SigoLogin 逐個識別面改了什麼

每個設定檔的指紋都由一顆種子產生,所以同一個設定檔每次開啟都完全一樣。指紋在兩次工作階段之間漂移,比完全不偽裝還可疑。所有值都取自同一個真實機型,欄位絕不會在不同機器之間拼湊。

身分

  • platform
  • browser
  • locale

加了雜訊

  • canvas
  • webgl
  • webgpu
  • audio
  • clientRects

機器

  • screen
  • hardware
  • battery

環境

  • fonts
  • mediaDevices
  • webrtc
  • network
每個設定檔都會寫的十五個識別面。它們全都取自同一個真實機型,所以各個答案彼此對得上;把不同機器的欄位拼在一起,才是造出一台沒人擁有的電腦的原因。

字型

已安裝字型清單是頁面讀得到的最強訊號之一,而頁面會從三條路去數它:量文字畫出來有多寬、按名字要一個字型、透過本機字型 API。三條路都在核心裡過濾,所以三個答案互相一致。

Windows 設定檔宣告大約 300 個字型,是在真機上量的,不是從哪份清單抄來的。macOS 的字型集用同樣辦法量下來大約 1,185 個。這裡有一條硬限制,我們寧可說出來也不藏著:核心能藏起一個字型,造不出一個字型。把作業系統一定會裝的字型藏掉,就等於編出一台沒人擁有的機器,所以這份清單是量出來的而不是猜出來的。

平台

Canvas、WebGL 與 WebGPU

canvas、音訊和文字矩形的讀數都會加上由設定檔種子推出來的確定性雜訊:同一個設定檔每次畫出的像素都一樣,換一顆種子畫出來的就不一樣。WebGL 和 WebGPU 回報的是同一張卡,因為頁面可以兩邊都問一次再比對。這項檢查是我們撞見一個版本之後才加的:那個版本裡 WebGL 報的是 GeForce RTX 3060,WebGPU 配接器報的卻是開發機上的 Intel 晶片。

螢幕、硬體與裝置

螢幕尺寸、可用高度、像素比、CPU 核心數、回報的記憶體、觸控點數,還有麥克風、喇叭與攝影機的名稱,全都取自同一個機型。決定成敗的是小細節。在 macOS 上,Chrome 報的是實體核心數而不是執行緒數,回報的記憶體上限在不同 Chrome 版本之間變過。這兩處只要錯一處,描述出來的就是一台沒人賣的電腦。

WebRTC、時區與語言

WebRTC 是那個經典的外洩口:就算走了代理,它也能把真實的本機位址報出去。有代理的設定檔上那條路是關掉的,真實位址沒有地方出來,我們是把外洩口堵上,而不是替它套一件代理的外衣。沒有代理的設定檔照實作答,而不是裝樣子,因為關掉 WebRTC 的真機極少,關掉本身就是一個標籤。時區與接受語言跟著代理所在的國家走,而不是跟著機器的設定。

代理與 DNS

TLS 與 HTTP/2 交握 即將推出

交握發生在 HTML 的第一個位元組到達之前,頁面腳本構不著它,正因如此它值得改,也正因如此靠注入 JavaScript 的工具碰不到它。這一塊正在做,目前的版本裡還沒有。我們寧可在這裡寫明它還沒做完,也不願讓你以為已經做好了。

我們怎麼知道它有用

我們不想讓你只憑設計就相信。每個識別面都在同一台機器上和真實的 Chrome 對著量,設定檔也拿去跑公開的偵測站台。

對不上的地方,要麼改掉,要麼寫下來,不抹平。這頁上你不會看到的是分數:那些站台報的數字在兩次造訪之間會變,彼此也對不上,在這裡印一個數字就等於替別人的演算法許諾。它們真正管用的地方,是幫我們找出自己的缺陷。

量也是抓我們自己錯誤的辦法。字型過濾第一次推出時,一個偵測站台翻了臉:本來讀作可信的設定檔開始讀作可疑。原因是過濾器把 Windows 11 自己帶的十一個字型也藏掉了,於是這個設定檔描述出一台不可能存在的 Windows 機器。把清單改對就沒事了。這件事光靠推理找不出來,只有真的跑一遍才會露出來。

我們自己一個缺陷之前、期間與之後,一個偵測站台的判定 一個偵測站台對一個設定檔下的判定,在我們自己一個缺陷之前、期間與之後。字型過濾帶著十一個 Windows 11 一定會裝的字型一起藏掉就推出了,這等於描述出一台不可能存在的機器,判定就翻了過去。把清單改對,判定就回來了。這件事推理推不出來;跑一遍才跑得出來。 字型過濾之前 出錯期間 修好之後 可信 可疑 可信
一個偵測站台對一個設定檔下的判定,在我們自己一個缺陷之前、期間與之後。字型過濾帶著十一個 Windows 11 一定會裝的字型一起藏掉就推出了,這等於描述出一台不可能存在的機器,判定就翻了過去。把清單改對,判定就回來了。這件事推理推不出來;跑一遍才跑得出來。

防指紋瀏覽器做不到什麼

指紋只是眾多訊號中的一個,把其餘的說清楚,比給一個我們守不住的承諾更值錢。

常被問到的問題

用防指紋瀏覽器合法嗎?

這個軟體是一個瀏覽器,在自己的電腦上跑多個瀏覽器設定檔,這件事本身不違法。有規矩管的是你拿它做什麼:你所在地的法律,以及你造訪的網站的條款。我們不協助詐騙或冒充他人,我們的條款裡寫明了這一點。

Chrome 算防指紋瀏覽器嗎?

不算。Chrome 的設定檔會分開 Cookie 和瀏覽記錄,最明顯的那條關聯是去掉了,但每個設定檔回報的仍然是同一塊螢幕、同一批字型、同一張顯示卡、同一批 canvas 像素,因為它們都跑在同一台機器上。儲存分開不等於身分分開。

這和 VPN 或代理有什麼不一樣?

代理或 VPN 換的是請求從哪個位址過來,僅此而已;瀏覽器描述的還是同一台電腦。兩者是互相補充,不是互相取代。SigoLogin 要求每個設定檔配一個代理,並從那個代理所在的國家取時區與語言,讓它們不會和位址相矛盾。

有免費方案嗎?

三個設定檔免費,用的是和付費方案相同的指紋引擎。免費方案限的是設定檔數量,不是保護程度。付費方案提高設定檔數量,也提高可啟用的裝置台數。

我的資料會上你們的伺服器嗎?

設定檔是你自己磁碟上的資料夾,裡面的 Cookie、儲存的登入資料與瀏覽記錄都留在那裡。應用程式會上傳一小組管理用的欄位,好讓你在這個站台上看到自己的設定檔,另外還有一份錯誤記錄。把設定檔分享給隊友是唯一的例外,因為對方坐在另一台機器前。隱私權頁面把每一個欄位都列了出來。

它能在哪些作業系統上執行?

Windows 10 與 11,以及 macOS 13 以上,64 位元。Intel 和 Apple silicon 都有對應版本。Linux 還沒開始做。平台頁寫明了哪些已經有、哪些還沒有。

繼續讀

這一頁提出的問題,都有更長的答案。

不確定這是不是合適的工具?

問一個在答案裡沒有利害關係的助手。

怎麼用

  1. 1

    安裝並連結

    在 Windows 上安裝,開啟應用程式,按下把它登入到這裡的那個按鈕。核心只下載一次。

  2. 2

    建一個設定檔

    取個名字,掛上一個代理。指紋由一顆種子產生,從那之後就固定不變。

  3. 3

    開啟它,然後一直開

    每次開啟都用同一個身分。把設定檔分享出去,隊友在自己機器上開的就是同一台裝置。

三個設定檔免費,引擎和付費方案同一套

Windows 10 與 11,或 macOS 13 以上,64 位元。開始不用卡。

繼續讀