NimbusX
00
› 页面已加载
← 博客
移动15.07.20267分钟

无需手机的移动端指纹

Android 配置文件可以在普通电脑上运行,并从 iphey 获得 Trustworthy 结论。我们付出代价后得到的规则是:不要手工为手机指定硬件。目前仍有一项桌面窗口限制,产品会明确显示。

01如何启用

创建移动配置文件时使用参数:

$ python -m app.cli profile create \ --name mobile-01 --platform android

引擎会选择一套内部一致的移动身份,包括型号、芯片、屏幕和内存。设备型号会写入 uaData.model,检测器也从这里读取型号。测试套件得分为 100/100,iphey 返回 Trustworthy,无需实体手机。

02为什么我们删除了型号列表

第一版使用我们维护的型号列表为手机指定硬件,结果把 Pixel 7 与 Redmi 芯片配在一起。仅这一处错误就让 iphey 返回 Unreliable。检测器对真实的“型号加芯片”组合,了解得比任何手工维护的清单都准确。

我们已经完全移除手工维护的型号列表。 移动身份现在由引擎选择,并由专门的回归测试防止旧问题再次出现:NimbusX 不再人为指定手机硬件。这一原则不只适用于移动配置文件。配置内部的一致性比逐项手动控制更重要。

03配置文件之间的实测信号

在一台干净电脑上连续创建三套移动配置文件:

表面结果
Windows 专属字体均未暴露;十三项检测全部通过
视频卡每套配置均不同
声明的屏幕每套配置均不同
Canvas每套配置均不同
逻辑处理器数量每套配置均为八个,与参考手机一致

字体是最清楚的检查项。如果一套自称 Pixel 的配置向网站暴露 Calibri 或 Segoe UI,矛盾会立即出现,因为 Android 不包含这些字体。我们检测了十三款仅随 Windows 或 Microsoft Office 安装的字体,配置文件一款也没有暴露。

04桌面窗口带来的限制

移动配置文件的布局视口比声明的屏幕更宽。引擎会修改 screen 和 outerWidth,但浏览器仍运行在真实的桌面窗口中。配置文件声明 360×800,布局视口实际为 500×731。我们测试了以下方法:

尝试方式布局视口宽度
不做调整500
窗口 412×915500
窗口 300×600500
渲染比例 1.27510
无头模式478

限制来自 Chrome 在桌面系统上的最小窗口宽度,约为 500 个 CSS 像素。手机不会使用这么宽的视口,因此只要浏览器仍在桌面窗口中运行,这项差异就无法消除。若强行修改 innerWidth 而不改变真实布局并不可行。页面的第一个媒体查询就会读到真实宽度,最终不是消除差异,而是产生两组互相矛盾的值。

目前能够改善的是:启动后,NimbusX 会按页面自行声明的高度调整窗口,并且 CreepJS 不再标记 Screen 区域。剩余的宽度差异会在面板中明确显示:WIN 单元格变暗,表格下方给出说明。隐藏它没有意义,因为网站比用户更早看到这项差异。

05了解更多

一致性比数量更重要 · 检测器如何关联浏览器配置

下载NimbusX技术问题: @Get_NimbusX_Bot