一个普通 iPhone App,不要通讯录,不碰照片,也不申请定位,仍然能看到不少设备环境信息。

Mysk 新开源的 Loupe,就是把这件事摊开给你看。它读取 iOS/iPadOS 公开 API,把原始值展示出来:屏幕、电池、时区、语言环境,还有 URL scheme 探测、Keychain 重装后持久化这类更绕的侧信道。

重点不在“苹果被攻破了”。恰恰相反,Loupe 用的是公开入口。真正扎人的地方是:很多可用于设备指纹的信号,不需要弹窗,不需要同意,也不需要用户理解。

Loupe 做了什么:读取、展示、不上传

Loupe 更像一面镜子,不是抓贼工具。

它展示的是普通原生 App 能通过公开 API 或侧信道看到什么。README 说得很清楚:数据不离开设备,除非用户显式导出;应用展示原始值,不聚合、不哈希、不同步。

类别典型信号用户感知风险点
Passivelocale、time zone、screen、battery 等无弹窗、无提示单项普通,组合后可参与指纹
Needs Permission联系人、照片、定位、日历等触发系统授权属于用户能理解的显性权限
AdvancedURL scheme 探测、Keychain 重装后持久化等更接近侧信道可辅助识别 App 环境或延续标识

项目开源,代码采用 MIT 许可。但 Loupe 的名称、Logo、图标和设计资源不在 MIT 范围内。仓库目前大约 675 stars、31 forks,热度不算夸张,但问题指向很准。

还有一个边角信息:这个项目几乎由 AI 编码工具完成。这个点有趣,但不要让它抢戏。Loupe 的主线不是“AI 写了个 App”,而是“公开 API 能把多少隐私边缘信号暴露出来”。

这里要分清边界。Loupe 没有证明每个 Passive 信号都能单独识别一个人。屏幕尺寸、时区、电池状态,单看都不稀奇。

指纹识别靠的也不是单点命中,而是拼图。跨 App、跨网站、跨会话,碎信号越多,轮廓越清楚。

权限弹窗挡住了门,挡不住所有纹理

苹果这些年把权限弹窗做成了隐私叙事的核心:定位要问,照片要问,联系人要问,广告追踪也要问。

这套体系有价值。它挡住的是显性数据,是用户能命名、能拒绝、能在设置里回头管理的东西。

Loupe 提醒的是另一层:设备指纹不一定走正门。很多信号最初被设计出来,是为了让 App 正常适配设备、判断环境、调用系统能力。它们有合理用途,也有被滥用的空间。

这就是平台治理里最麻烦的灰区。

视角权限体系擅长处理Loupe 指向的盲区
用户“App 要不要读我的照片/定位”“App 默认能看到哪些环境信号”
开发者按系统规则申请敏感权限公开 API 也可能带来指纹风险
平台管住显性数据访问管住低精度信号、侧信道和组合识别

浏览器行业已经被这个问题折磨很多年。字体、画布、窗口尺寸、语言、时区,本来都是正常能力,组合后就成了浏览器指纹。原生 App 的环境不完全一样,但逻辑相似:能力越多,默认暴露面越大,追踪者越有材料。

“天下熙熙,皆为利来。”广告归因、风控、反作弊、增长分析,都有动力把碎信号榨干。问题不在某一个 API 天生邪恶,而在激励会把合理能力推向极限。

我不太买账“有弹窗就安全”的说法。弹窗保护的是用户知道自己在交出的东西。指纹利用的,常常是用户根本想不到要拒绝的东西。

受影响的人该看什么:别只盯着漏洞,要盯默认值

对关心 iOS 隐私和反追踪的技术用户来说,Loupe 最现实的价值是校准预期。

不要把“我没授权定位和照片”等同于“这个 App 什么都不知道”。更稳妥的做法,是减少不必要 App 的长期安装,定期清理不信任的应用,关闭不需要的后台能力,遇到过度索权或行为不透明的 App 直接弃用。Loupe 本身也可以当作学习工具,用来理解哪些信号无需授权就可见。

但用户侧能做的有限。普通人没法逐项关闭 screen、locale、time zone 这类环境信号。把责任全甩给用户,是平台最轻松、也最偷懒的说法。

对移动开发者和产品安全团队,动作更具体:做一次数据最小化盘点。别把“公开 API”自动写进采集清单,先问三个问题:业务是否真需要,是否能降精度,是否会和其他字段组合成稳定标识。

如果团队在做 SDK、风控、广告归因或反作弊,这个问题更硬。合法可读,不等于适合长期留存;本地可取,不等于应该回传。安全评审也不该只看系统权限,还要看无权限信号和侧信道。

对苹果来说,真正要观察的变量只有几个:

  • 哪些 Passive 信号会被降精度、随机化或延迟返回;
  • URL scheme 探测、Keychain 持久化这类侧信道会不会被进一步收紧;
  • App Store 审核是否会更关注 SDK 的组合指纹行为;
  • 隐私报告会不会从“权限访问记录”扩展到“默认可见信号说明”。

难点也在这里。收紧太狠,会伤开发体验和兼容性;放得太宽,就给指纹网络留下空间。平台治理从来不是把门锁做漂亮,而是决定哪些窗户默认开着。

Loupe 的价值,不是制造恐慌。它只是把 iOS 隐私叙事里最容易被忽略的一层拿到灯下:权限弹窗管的是明面上的请求,设备指纹吃的是默认暴露面。

门口的锁越来越精致,屋里的窗还得一扇扇查。