共计 1908 个字符,预计需要花费 5 分钟才能阅读完成。
最近装了一个叫 [[Loupe]] 的 [[iOS]] 应用,用了不到五分钟就有点坐立难安。不是因为它做了什么危险的事,而是因为它把一件我隐约知道、却从未亲眼见过的事摆在了面前:一个完全不需要你授权任何权限的 App,仅凭系统默认暴露的数据,就能拼出一张足以识别你身份的数字画像。

设备指纹是什么
大多数人谈到手机隐私,脑子里浮现的是定位权限、通讯录权限、摄像头权限。这些确实重要,但追踪技术的发展早已不局限于此。设备指纹(Device Fingerprinting)是一种不依赖任何显式标识符(如广告 ID 或 Apple ID)的追踪手段,它通过收集大量细粒度的设备特征,将这些特征组合成一个几乎唯一的"指纹",从而在应用、网站、甚至跨平台场景中持续识别同一台设备。
具体来说,你的语言设置、时区、屏幕分辨率、字体列表、电池电量变化的方式、传感器的轻微物理偏差……每一项单独看都微不足道,但组合起来,区分世界上大多数设备绰绰有余。这一技术在广告行业早已普及,但在用户这边,它始终是隐形的。
Loupe 做的事情很直接:把这些原本隐形的信号全部显示出来,让你自己看。
Loupe 是谁做的
Loupe 来自 Mysk Research,一个由加拿大和德国研究人员组成的隐私研究团队。这个团队此前因发现多个 Apple 隐私相关问题而广为人知,他们的研究曾多次引发媒体关注。Loupe 是他们今年推出的最新作品,于 2026 年 6 月 5 日正式发布,免费开源,采用 MIT 许可证,代码托管在 GitHub 上。
值得一提的是,Loupe 的代码几乎完全由 AI 编程工具编写,这在其 GitHub 仓库的说明中有明确提及。作为一个用 Swift 编写的原生 iOS 应用,这也算是 AI 辅助开发在消费级产品中的一个有趣案例。
三个层次的信号
Loupe 将设备可暴露的信号按获取难度和隐蔽程度分为三个层次,这个分类方式非常清晰。
第一层是被动信号(Passive)。这些数据完全不需要任何权限,任何 App 只要运行就可以读取。包括但不限于:系统语言和地区设置、时区、屏幕物理尺寸和分辨率、电池电量和充电状态、设备运行时长。这些看起来都是无关痛痒的信息,但当一个应用同时拿到语言是"简体中文"、时区是"Asia/Tokyo"、屏幕是某个特定 iPhone 型号的分辨率、电池是 73% 且未充电,它已经在缩小范围了。
第二层是需要授权的信号(Needs Permission)。这部分对应我们熟悉的 iOS 权限体系,包括通讯录、照片、位置、日历等。如果你授权过,应用可以读取这些数据。Loupe 在这一层让你看到的是:当你点击"允许"的时候,应用实际上拿到了什么。
第三层最让人意外,Loupe 称之为进阶信号(Advanced)。这一层利用了 iOS 公开 API 的一些非常规用法。最典型的两个例子:一是通过 canOpenURL API 探测设备上安装了哪些应用,这个接口本来是用来判断某个链接能否被打开,却可以被用来批量探测应用安装情况;二是利用 iOS Keychain 的跨应用、跨重装持久性,即使你卸载重装了某个应用,它仍然能从 Keychain 中读取到之前存下的数据,从而维持对设备的识别。
打开 Loupe 的感受
装好 Loupe 之后,第一屏就是被动信号列表,滚动下去密密麻麻。每一条信号旁边都显示着它的实际读取值,不做任何遮挡或模糊处理。我的时区、我的语言偏好顺序、我屏幕的精确 PPI、我的 iOS 版本——全都清清楚楚地列在那里,这些数据会被任何一个 App 看到。
切换到进阶信号页面,canOpenURL 探测的部分更直观。你可以看到 Loupe 尝试探测了哪些 URL Scheme,以及哪些探测返回了阳性结果——对应着你实际安装的应用。这不是什么秘密技术,是写进 Apple 开发者文档的公开 API,但当它真正显示在屏幕上时,感觉仍然不太舒服。
Loupe 明确表示,它所读取的一切都只在设备本地展示,不上传、不同步、不分享。代码是开源的,任何人都可以验证这一点。它的目的不是拦截追踪,而是让追踪变得可见。
最后
Loupe 让我印象最深的不是它揭示了什么惊天秘密,而是它把一件已经存在多年的事情做得如此清晰可见。设备指纹追踪不是什么新鲜话题,但它一直藏在用户感知的盲区里,因为没有任何通知、没有任何弹窗、没有任何日志。
这个应用的价值恰恰在于填补这个盲区。看完之后你不一定能做什么,iOS 的系统限制也不允许你完全屏蔽这些信号,但至少你知道了这件事的具体模样。对于关心数字隐私的人来说,知道总比不知道好。
如果你对 iOS 隐私或设备追踪感兴趣,Loupe 值得装来看看,免费且开源,几分钟就能有直观感受。
