Loupe: 可視化 iOS 裝置指紋識別表面

Loupe 是一款開源的 iOS 與 iPadOS 應用程式,旨在展示原生應用程式可使用的裝置指紋識別表面。透過讀取來自公開 iOS API 的真實數值——即任何第三方應用程式都能使用的相同 API——Loupe 揭示了應用程式可以在不要求姓名或電子郵件地址等明確識別碼的情況下,收集用於在不同平台間識別並追蹤使用者的原始數據。

裝置指紋識別機制

當應用程式收集各種非唯一的數據點來為裝置建立一個唯一的識別碼時,就會發生裝置指紋識別。雖然單個讀取值本身可能不具備唯一性,但這些訊號的組合會產生一個高熵指紋,讓追蹤器能夠在不同的應用程式與網站之間識別使用者。

Loupe 中的數據存取層級

Loupe 根據存取「成本」以及作業系統要求的權限層級,將其收集的數據分為三個層級:

被動訊號

被動訊號對任何應用程式都是可見的,且不會觸發任何系統提示。這些包括:

  • 地區設定
  • 時區
  • 螢幕規格
  • 電池狀態
  • 以及其他一般的裝置元數據

基於權限的訊號

這些讀取值會觸發標準的 iOS 權限提示,需要使用者明確授予對特定數據類別的存取權,例如:

  • Contacts
  • Photos
  • Location
  • Calendars

進階訊號

進階訊號涉及使用公開 API 的側向通道方法來收集資訊。範例包括:

  • URL-scheme probing: 使用 canOpenURL 來偵測裝置上安裝了哪些其他應用程式。
  • Keychain persistence: 利用 Keychain 來儲存即使在應用程式被刪除並重新安裝後仍能持久存在的數據。

隱私與開發

Loupe 採用隱私優先的方法進行構建;除非使用者明確匯出,否則應用程式讀取的任何數據都不會離開裝置。所有數值皆以原始形式顯示,不進行聚合或雜湊處理,且不會上傳或同步到外部伺服器。

值得注意的是,該專案幾乎完全是使用 AI 編碼工具開發的。原始碼以 MIT License 發佈,但品牌、標誌與設計檔案仍歸 Mysk 所有。

建置技術需求

對於希望從原始碼建置 Loupe 的開發者,需要滿足以下需求:

  • Xcode 26 或更新版本。
  • 配置一個本地的 Signing.local.xcconfig 檔案,並包含有效的 DEVELOPMENT_TEAM 與 bundle identifiers。

Loupe 也支援 macOS,不過目前的 Mac 版本比起 iOS 版本尚未經過精細打磨。

Sources