Android模拟器检测常用方法

在Android开发过程中,防作弊一直是老生常谈的问题,而模拟器的检测往往是防作弊中的重要一环,接下来有关于模拟器的检测方法,和大家进行一个简单的分享。

1.传统的检测方法。

传统的检测方法主要是对模拟器的IMSI、IDS、默认文件等几个方面进行检测。

(1)默认号码:

private static String[] known_numbers = {"15555215554", "15555215556",
            "15555215558", "15555215560", "15555215562", "15555215564",
            "15555215566", "15555215568", "15555215570", "15555215572",
            "15555215574", "15555215576", "15555215578", "15555215580",
            "15555215582", "15555215584"};
(2)默认ID:

private static String[] known_device_ids = {"000000000000000"};
(3)默认IMSI:

private static String[] known_imsi_ids = {"310260000000000"};
(4)默认文件路径:

private static String[] known_files = {
            "/system/lib/libc_malloc_debug_qemu.so",
            "/sys/qemu_trace",
            "/system/bin/qemu-props"};

在得知了这些信息后,只需在运行时进行检测,如果检测结果和默认值吻合,那么检测设备便是模拟器。不过随着防反作弊技术的迭代,现在很多模拟器都可以改变这些值来逃避检测,所以上述传统方法在很多时候未曾达到开发者的预期效果。


2.基于模拟器cpu信息的检测。

成功率相较于传统方法,有了更高的成功率。

cpu信息检测主要是在cpu信息看看是否包含intel、amd等字段,很多模拟器目前对于cpu信息还无法进行模拟。

(1)读取cpu信息:

 public static String readCpuInfo() {
        String result = "";
        try {
            String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
            ProcessBuilder cmd = new ProcessBuilder(args);

            Process process = cmd.start();
            StringBuffer sb = new StringBuffer();
            String readLine = "";
            BufferedReader responseReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf-8"));
            while ((readLine = responseReader.readLine()) != null) {
                sb.append(readLine);
            }
            responseReader.close();
            result = sb.toString().toLowerCase();
        } catch (IOException ex) {
        }
        return result;
    }
(2)进行判定:

String cpuInfo = readCpuInfo();
if ((cpuInfo.contains("intel") || cpuInfo.contains("amd"))) {return true;}
类似的还有

String[] blockList = "google_sdk,sdk,sdk_x86,vbox86p".split(",");

原理相同。


3.关键路径检测特定模拟器检测

前面2个方法在很大程度上已经可以鉴定出很多模拟器了,但是对于某些在反防作弊上同样热爱的模拟器,需要特定的检测方法。

bluestacks成功躲避了前两种检测方法,所以在这里给予其VIP的待遇。

以下是总结出来的一些bluestacks的关键路径:

 private static String[] known_bluestacks = {"/data/app/com.bluestacks.appmart-1.apk", "/data/app/com.bluestacks.BstCommandProcessor-1.apk",
            "/data/app/com.bluestacks.help-1.apk", "/data/app/com.bluestacks.home-1.apk", "/data/app/com.bluestacks.s2p-1.apk",
            "/data/app/com.bluestacks.searchapp-1.apk", "/data/bluestacks.prop", "/data/data/com.androVM.vmconfig",
            "/data/data/com.bluestacks.accelerometerui", "/data/data/com.bluestacks.appfinder", "/data/data/com.bluestacks.appmart",
            "/data/data/com.bluestacks.appsettings", "/data/data/com.bluestacks.BstCommandProcessor", "/data/data/com.bluestacks.bstfolder",
            "/data/data/com.bluestacks.help", "/data/data/com.bluestacks.home", "/data/data/com.bluestacks.s2p", "/data/data/com.bluestacks.searchapp",
            "/data/data/com.bluestacks.settings", "/data/data/com.bluestacks.setup", "/data/data/com.bluestacks.spotlight", "/mnt/prebundledapps/bluestacks.prop.orig"
    };

检测方法:

public static boolean checkBlueStacksFiles() {
        for (int i = 0; i < known_bluestacks.length; i++) {
            String file_name = known_bluestacks[i];
            File qemu_file = new File(file_name);
            if (qemu_file.exists()) {
                FkLog.e("Result : Find BlueStacks Files!");
                return true;
            }
        }
        FkLog.e("Result : Not Find BlueStacks Files!");
        return false;
    }

这种基于关键路径的检测,便可以成功的检测出bluestacks。


4.模拟器检测新思路

模拟器检测与模拟器反检测都在不断的更新迭代中,无法确保哪一种方法会永垂不朽,在这里分享下新的思路。

电池信息检测

可以从电池的温度和电量等信息入手,检测温度在使用过程中是否一直保持不变、或者是电量一直是固定值并且不是百分之百等等。

亲测可以鉴别出genymotion、bluestacks等主流模拟器。


5.写在最后

其实很多时候在检测模拟器的过程中,都不是只使用某一种固定的方法,一来需要具体问题具体分析,二来也需要用多种方法来综合检测。言而总之,有了十八般武艺才能见招拆招。

ps:如有错误或需要补充的地方,请各位多多指正~

 

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Android模拟器检测及对抗方法主要针对一些恶意软件或者安全测试工具会利用Android模拟器进行仿真攻击或者测试的现象进行针对性的处理。 在进行Android模拟器检测时,主要需要关注一些与真实Android设备不同的特征,例如与硬件相关的参数、系统属性或者程序运行环境等等。 对于仿真攻击的范,可以采取识别或者拦截多次尝试注入攻击代码的恶意软件,限制模拟器的资源使用或者对模拟器的输入输出等进行限制。 同时,还可以针对模拟器本身的漏洞或者安全问题进行加强和升级,例如提高模拟器的执行效率、加强其隔离能力和安全控制等等,以提高其整体的安全性和稳定性。 总之,针对Android模拟器检测与对抗是一个不断发展的过程,需要综合运用安全技术和策略手段来保障Android系统的安全和稳定性。 ### 回答2: 随着Android开发工具的不断完善,现今已经出现了许多神经网络和机器学习模型,这些都是建立在手机设备的真实运行平台上的。因此,检测和对抗模拟器成为保护应用软件安全和用户隐私的重要一步。在下面的内容中,将就Android模拟器检测及对抗方法进行简要说明。 检测方法 如何检测模拟器就可以通过检测特定的硬件规范的方式来进行。通过检测设备的Sim卡号、IMEI、MAC地址等硬件定义能力,以此来进行模拟器检测。此外,还有一些开源的用于检测模拟器的工具,例如Anti-Emulator、J2Android等。 对抗方法 对于安卓模拟器检测的对抗方法,主要可以从以下几个方面来进行: (1)虚拟机检测绕过 在模拟器中检查与真实设备硬件参数相同的数据,以绕过检测,提高识别难度。此外还可以使用XPOSED框架,来使硬件参数信息看上去更加真实。 (2)操作系统绕过 使用修改后的ROM来绕过对模拟器检测。例如,Genymotion和AndroVM权限更高的虚拟化环境,同时支持模拟不同版本的Android。 (3)应用层绕过 可以通过模拟器操作系统中不可见的或者不常用的系统调用来绕过检测。此外,还可以通过代理或反向代理技术来绕过复杂的脚本或网络检测。 总之,基于某种检测方式设计的对抗方法是不固定的;因此,开发人员要考虑多种检测模拟器方法,进行合理的应对。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值