一台云手机每月租金不到一杯咖啡。真的安卓镜像、真的 ARM 硅片,跑在某个数据中心里,通过浏览器远程操控 —— Redfinger、NoxCloud、NetBoom、腾讯的 GameMatrix,还有几十家,每个季度还有新的出来。在几乎所有 App 眼里,它们看起来就是真机。
然后是大家都听过的本地模拟器:BlueStacks、Genymotion、LDPlayer、Google 自家的 AVD。再往里,是靠 Docker 跑在笔记本内核上的容器 —— Anbox 和 Waydroid。
随便一个 Build.HARDWARE 检查它们都能过。我花了一个周末让 BlueStacks 声称自己是 Pixel 7,在字符串层面走出了很远;一开始交叉核验就走不动了。下面这些是真正扛用的。
字符串
Build.FINGERPRINT 开头 generic。Build.MANUFACTURER 是 Genymotion。Build.MODEL 里带 google_sdk。Build.PRODUCT 里带 vbox86p。
抓粗糙的模拟器秒中。抓商业云手机农场几乎零命中 —— 它们把这些字段全部覆盖成一台真 Pixel 或 Galaxy 的样子。当第一层过滤,没别的作用。
你真的跑在 ARM 上吗?
真 ARM 手机原生跑 ARM 二进制。桌面模拟器通过 Houdini 或 NDK Translation 转译,转译会漏 —— os.arch 返回 i686,Build.SUPPORTED_ABIS 列表里同时有 armeabi-v7a 和 x86_64,/proc/cpuinfo 悄悄提到 GenuineIntel。
ARM 原生的云手机能干净通过。必要,但不够。
传感器
这是差距开始的地方。真手机汇报一份跟机型强绑定的杂乱传感器清单 —— 加速度、陀螺、磁力、气压、光线、距离、步数、折叠机上还有铰链角。数据中心里的云手机没有任何物理传感器接上,要么啥都不报,要么报一个来自宿主机 OS 的通用桩。
拿传感器列表对着宣称机型的已知集合做交叉核验。「Galaxy S24」只报 5 个传感器,而真机有 15 个 —— 这几乎一定是一台跑着 Galaxy S24 镜像的租用 ARM。
温度和电池怪癖
真手机以固定又混乱的方式发热。读一台真机的 /sys/class/thermal/thermal_zone0/temp 三十秒,你会看到它随着负载抖动、充电时缓慢上升、大致跟着 SoC 的热曲线。云手机通常永远返回 25.0°C,永远 100% 电量,从来不会跨过充电到放电的边界。看半分钟就足够。
GPU 会出卖它们
OpenGL renderer 字符串大概是你单次调用里信号最强的一条。真高通报 Adreno (TM) XXX。真 Exynos 报 Mali-GXX。BlueStacks 和 LDPlayer 报 ANGLE 或 VirtIO-GPU。Genymotion 报 VirtualBox Graphics Adapter。
用 GPU passthrough 的云手机确实会返回真的 Adreno 或 Mali —— 听起来是死胡同,直到你注意到 passthrough 经常跟宣称 SoC 对不上。骁龙配 Mali 在真机上不可能存在。松散的农场每天在漏这个。
交叉核验才是真正管用的
上面每条单独用都会误放。抓伪装得好的关键是几个字段一起跟真机基线关联。Build.MODEL 说 SM-S921B(Galaxy S24),那么 SOC_MODEL 必须是 SM8650 或 S5E9945,GPU renderer 必须跟 SoC 家族对上,传感器数量必须在 15 左右,FINGERPRINT 必须遵循三星那套精确格式,存储必须是 UFS 4.0。
提供商必须把这些一次性伪造完,还得在反复查询下自洽。两个字段?可以。八个?你在跑国家级行动。
我们的硬件可信度评分拿 8 条这样的关联去跟社区上传的 83,000+ 台安卓 fingerprint 数据库做核验,出一个 0-100 数字。不完美,但比你自己搭一整套流水线便宜。
为什么你其实早见过这个
你可能不做反欺诈团队。但同一套检查解释了几件你已经遇到过的烦事。
你的银行 App 在 Root 过的手机或 BlueStacks 里拒绝启动 —— 同一套检查,被温度或 GPU 卡住。你买的可疑二手 Pixel 7 用了几天就不再显示广告 —— 卖家刷了 ROM 让 FINGERPRINT 撒谎,GPU 厂商仍然出卖真芯片,AdMob 悄悄降权这台设备。Netflix 在你的模拟器上不给 HD —— Widevine L1 证明走的是同一棵树。
安卓的硬件指纹现在不是元数据了。它是设备真实的身份,你手机上几乎每个正经 App 都在读它。想看看你自己的长什么样?DevCheck AI 3 秒给你所有字段。