隐藏设备是仿真器的事实吗?

时间:2018-07-16 05:26:19

标签: android android-emulator virtual-machine emulation genymotion

最近,我遇到了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设备,我该如何掩盖仿真的指纹,型号和品牌?

enter image description here

现在,如果您想知道为什么要这样做,仅是想在模拟器上实现真正的设备体验,尤其是在拒绝在模拟器上运行的应用程序上。

1 个答案:

答案 0 :(得分:0)

通常,有三种方法可以绕过模拟器检查:

  1. 修改应用并删除模拟器检查。
  2. 修改模拟器,使其伪装成真实设备。
  3. 修改系统调用应用程序以检测其是否正在模拟器上运行

所有方法都不是那么简单。但是,第三种方法可能是最简单的,因为有些工具可以为您提供帮助。

返回选项1-它需要大量开发技能来反编译应用程序(例如,使用apktool将其反编译为Smali代码),识别仿真器检查,然后绕过可能存在的应用程序完整性检查。

选项2更加困难,因为它要求您修补并重新编译Android仿真器(可作为源代码使用)。

因此,从我的角度来看,只有选项3对您而言是现实的。但是,它仍然可能需要Java开发。

您可以将XPosed框架安装到模拟器上。它允许修改应用程序用来识别其正在模拟器上运行的系统调用。有一些现有的XPosed模块可​​用于隐藏设备已植根或正在模拟器上运行。如果幸运的话,有一个现成的模块可以直接使用,可以让您在模拟器上运行应用程序。