04 / Android
Android 拿得最多,但稳定性分层明显
Android 允许应用读取的系统属性最多,因此熵也最大。代价是其中相当一部分会随用户操作和系统更新变化。
以下清单来自 MIT 协议的开源库 fingerprintjs-android。商业版 SDK 采集更多属性,未公开。
硬件组
- 厂商名
- 机型
- 总 RAM
- 内部存储总量
- /proc/cpuinfo
- 传感器列表
- 输入设备列表
- 电池健康度
- 电池满容量
- 摄像头列表及参数
- OpenGL ES 版本
- ABI 类型
- 核心数
系统构建组
- Android 版本
- SDK 级别
- 内核版本
- 加密状态
- 媒体编解码器列表
- 安全提供者列表
已安装应用组
- 全部应用列表
- 系统应用列表
设备状态组
- ADB 开关
- 开发者选项
- HTTP 代理
- 动画缩放
- 数据漫游
- 无障碍服务
- 默认输入法
- 字体缩放
- 息屏超时
- 12/24 小时制
- PIN 锁状态
- 指纹传感器状态
- 铃声源
- 可用 locale
- 区域国家
- 默认语言
- 时区
三个独立标识符
它们不是指纹,是系统直接给的 ID:Android ID、GSF ID、Media DRM ID。三者都会被恢复出厂设置清掉。
稳定性实测
| 标识 | 恢复出厂 | 系统更新 | 应用重打包 | 切换用户 |
|---|---|---|---|---|
| Android ID | 变 | 稳定 | 变 | 变 |
| Media DRM ID | 通常变 | 稳定 | 变 | 稳定 |
| GSF ID | 变 | 稳定 | 变 | 变 |
| 硬件指纹 | 稳定 | 稳定 | 稳定 | 稳定 |
| 系统指纹 | 变 | 变 | 稳定 | 稳定 |
| 应用列表指纹 | 变 | 变 | 变 | 稳定 |
| 设备状态指纹 | 变 | 变 | 稳定 | 变 |
Media DRM ID 在 Vivo、三星部分机型上有例外。
这张表说的是单个信号的稳定性。商业版把这些信号加服务端匹配合成 visitorId 之后,抗变化能力强得多——见 06 持久性。
Android 专属 Smart Signals
- 克隆应用检测:识别多开软件运行的副本。撸羊毛和批量注册的主力场景,优先级最高
- Root 检测
- 模拟器检测