【发布时间】:2018-12-23 14:25:58
【问题描述】:
最近,我看到this Stackoverflow 帖子描述了如何检查运行应用程序的设备是否是模拟器。该解决方案描述了检查设备指纹、型号和品牌:
public static boolean isEmulator() {
return Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")
|| Build.MANUFACTURER.contains("Genymotion")
|| (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
|| "google_sdk".equals(Build.PRODUCT);
}
现在我想知道是否有办法解决这个问题。如果我有一个标准的 Genymotion 设备,我该如何屏蔽我的仿真指纹、型号和品牌?
现在,如果您想知道我为什么要这样做,那只是为了尝试在模拟器上实现真正的设备体验,尤其是在拒绝在模拟器上运行的应用程序上。
【问题讨论】:
-
我只知道一些关于 VM 的事情,但我有一个朋友在一家恶意软件检测公司工作,它每天都在与他们打交道。在我们进行的一次讨论中,他告诉我一些恶意软件可以检查它是否在 VM 中运行,并且不会执行其代码以使其看起来安全。从这里开始,我想当它真的在虚拟机上运行时,没有办法欺骗它在真实电脑上运行的一些代码(如果真的有可能,我猜想从这个行业工作的人会有一个方法)。
-
检查模拟器的功能在模拟器本身中是硬编码的,所以你无法绕过它,除非你编译自己的模拟器和系统映像,我不认为它是甚至可能。
标签: android android-emulator virtual-machine emulation genymotion