Android模拟器检测常用方法

news/2025/3/15 11:40:35/

在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:如有错误或需要补充的地方,请各位多多指正~

 


http://www.ppmy.cn/news/410042.html

相关文章

Android判断模拟器还是真机的方法

作为一个App&#xff0c;我们在做推广的同时&#xff0c;肯定会担心刷量的问题。一般常见的刷量手段就是通过安卓模拟器进行刷量。 那就会想到&#xff0c;怎么判断一个设备是模拟器还是真机。 先吐槽一下&#xff0c;百度上搜出来的都是什么垃圾答案。各种抄袭来的代码&…

使用gtest做单元测试

使用gtest做单元测试 文章目录 使用gtest做单元测试1.用gtest写测试工程的大致流程配置gtest头文件及库 gtest的相关概念TEST与TEST_F断言事件机制 参考 gtest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C单元测试框架&#xff0c;由google…

测试内存的软件欧阳,TestMem5(内存测试程序)

平时电脑使用久了内存就会变得越来越小&#xff0c;可能会影响到电脑的运行速度&#xff0c;使用这款TestMem5 软件可以帮助用户对系统的内存进行检测&#xff0c;让用户对电脑系统的具体情况有一定的了解&#xff0c;软件不但可以检测出内存的稳定度&#xff0c;还能测试系统储…

Android 使用 MuMu模拟器 进行程序调试

MuMu模拟器速度快&#xff0c;体积小&#xff0c;版本新&#xff08;目前beta已到6.0&#xff09;&#xff0c;推荐使用 本文环境&#xff1a; android-studio-ide-143.2739321-windows MuMu模拟器 2.0.4 android sdk 19版&#xff0c;即4.4 KitKat Build-Tools版本是21.1.2 下…

手机App性能测试工具Genymotion安卓模拟器使用和简介

手机APP测试知识 测试环境准备 windos adb:参考《Applum自动化测试教程》2-3初识Android SDK【51zxw】 python3:参考《Selenium自动化测试用例》3-2Python安装与配置【51zxw】 移动设备 Android(Genymotion模拟器) 下载地址&#xff1a;https://www.genymotion.com/download/…

Ubuntu中也能玩游戏

Ubuntu中也能玩游戏 如果只是介绍“sl”可以跑小火车(sudo apt-get install sl)&#xff0c;“fortune”可以输出“fortune cookie”(sudo apt-get install fortune)&#xff0c;“cmatrix”可以模拟黑客帝国(sudo apt-get install cmatrix )&#xff0c;也未免太无趣了一些。…

游戏测试-功能测试

你所想的游戏测试是什么 整天捧个手机玩游戏&#xff1f;整天几个人联机玩游戏&#xff1f;加班也是玩游戏&#xff1f;NO NO NO真实的游戏测试要做哪些 游戏测试是软件测试的一种分支&#xff0c;具备所有软件测试的特性。游戏测试的产业相关及工作划分&#xff0c;可查看&…

Unity USB 连接 Android 真机/模拟器测试

一、下载 winSDK 先检查电脑里是否已经安装了 adb 安卓包&#xff1a;打开 Windows PowerShell 命令窗口&#xff0c;输入指令 adb version&#xff0c;如果有出现版本号&#xff0c;就说明没问题 否则需要下载 SDK&#xff0c;完毕之后配置下环境变量 二、快速安装 developme…