Loupe: 可视化 iOS 设备指纹特征面
Loupe 是一款开源的 iOS 和 iPadOS 应用程序,旨在展示原生应用可以获取的设备指纹特征面。通过从公开的 iOS API 中读取真实值——即任何第三方应用都可以使用的相同 API——Loupe 展示了应用可以在无需姓名或电子邮件地址等显式标识符的情况下,通过收集原始数据来识别和跨不同平台追踪用户。
设备指纹机制
当应用收集各种非唯一数据点以创建设备的唯一标识符时,就会发生设备指纹识别。虽然单个读取值本身可能并不唯一,但这些信号的组合会创建一个高熵指纹,允许追踪器在不同的应用和网站之间识别用户。
Loupe 中的数据访问层级
Loupe 根据访问“成本”和操作系统所需的权限级别,将收集的数据分为三个层级:
被动信号
被动信号对任何应用程序都是可见的,且不会触发任何系统提示。这些包括:
- 语言区域设置
- 时区
- 屏幕规格
- 电池状态
- 以及其他通用的设备元数据
基于权限的信号
这些读取操作会触发标准的 iOS 权限提示,要求用户显式授予对特定数据类别的访问权限,例如:
- 联系人
- 照片
- 位置
- 日历
高级信号
高级信号涉及使用公开 API 通过侧信道方法收集信息。示例包括:
- URL-scheme 探测:使用
canOpenURL来检测设备上安装了哪些其他应用。 - Keychain 持久化:利用 Keychain 存储即使在应用被删除并重新安装后仍然存在的数据。
隐私与开发
Loupe 采用隐私优先的方法构建;除非用户显式导出,否则应用读取的任何数据都不会离开设备。所有值都以原始形式显示,不进行聚合或哈希处理,且没有任何数据被上传或同步到外部服务器。
值得注意的是,该项目几乎完全是使用 AI 编程工具开发的。源代码以 MIT License 发布,但品牌、Logo 和设计文件仍归 Mysk 所有。
构建的技术要求
对于希望从源码构建 Loupe 的开发者,需要满足以下要求:
- Xcode 26 或更高版本。
- 配置本地
Signing.local.xcconfig文件,其中包含有效的DEVELOPMENT_TEAM和 bundle identifiers。
Loupe 也支持 macOS,尽管目前的 Mac 版本不如 iOS 版本完善。