android模拟器检测常用方法,Android模拟器检测方案优化

Android模拟器检测方案

项目背景:由于美柚当前检测模拟器的方案存在识别率(指模拟器没被检测出来)和准确率(错误地将真机判定为模拟器)都比较低的情况。导致黑产猖獗,所以提出该方案用于改善检测 Android 模拟器的识别率和准确率

PS: 经过309台真机测试

目前市面上所有的模拟器如下:

Android模拟器名

支持平台

Android内核版本

CPU架构方式

Adb连接方式

Android原生模拟器

Mac、 Linux 、Windows

All

x86

adb connect 127.0.0.1:5555

Genymotion

Mac、Linux、Windows

All

x86

adb connect 127.0.0.1:5555

海马玩模拟器(Droid4X)

Windows、Mac

4.2.2

x86

adb connect 127.0.0.1:26944

Bluestacks(蓝叠)模拟器

Windows

4.4.2

arm

adb connect 127.0.0.1:5555

雷电模拟器

Windows

5.1.1

x86

adb connect 127.0.0.1:5555

逍遥安卓模拟器

Windows

5.1.1

x86

adb connect 127.0.0.1:21503

天天模拟器

Windows

4.4.4、6.0

arm

adb connect 127.0.0.1:6555

网易MuMu安卓模拟器

Mac、Windows(为荒野求生)

6.0.1

x86

adb connect 127.0.0.1:7555

夜神安卓模拟器

Windows、Mac

4.4.2

x86

adb connect 127.0.0.1:62001

靠谱助手模拟器 / 猩猩助手模拟器

Windows

4.4.2、4.4.4、6.0

x86、arm

蓝叠、天天模拟器集成的

PS:后面的测试都会基于这些模拟器的基础上做测试,并且附加条件范围内能拿到的其他Android真机

目前市场上主流的模拟器:一种是基于Qemu,另一类是基于Genymotion

网上现在流行用一些模拟器特征进行鉴别,比如:

1.通过判断IMEI是否全部为0000000000格式,判断手机号码是否特殊的模拟器值,判断IMSI是否特殊值

2.判断Build中的一些模拟器特征值

3.匹配Qemu的一些特征文件以及属性

4.通过获取cpu信息,将x86的给过滤掉(真机一般都是基于ARM)

一、Android模拟器初级检测方案(基础特征值检测[原APP中只检测了部分,不够全面])

1.已知模拟器的IMEI:“000000000000000”, “e21833235b6eef10”, “012345678912345”

2.已知模拟器的手机号:“15555215554”, “15555215556”, “15555215558”, “15555215560”,“15555215562”, “15555215564”, “15555215566”, “15555215568”,“15555215570”, “15555215572”, “15555215574”, “15555215576”,“15555215578”, “15555215580”, “15555215582”, “15555215584”

3.已知模拟器的IMSI:“310260000000000”

4.已知模拟器的Build信息(可能误判):

private static Property[] known_props = {new Property("init.svc.qemud", null),

new Property("init.svc.qemu-props", null), new Property("qemu.hw.mainkeys", null),

new Property("qemu.sf.fake_camera", null), new Property("qemu.sf.lcd_density", null),

new Property("ro.bootloader", "unknown"), new Property("ro.bootmode", "unknown"),

new Property("ro.hardware", "goldfish"), new Property("ro.kernel.android.qemud", null),

new Property("ro.kernel.qemu.gles", null), new Property("ro.kernel.qemu", "1"),

new Property("ro.product.device", "generic"), new Property("ro.product.model", "sdk"),

new Property("ro.product.name", "sdk"),

// Need to double check that an "empty" string ("") returns null

new Property("ro.serialno", null)};

5.特殊手机的运营商:“android”

((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkOperatorName().toLowerCase().equals(“android”)

[2] 检测模拟器特征文件是否存在

“/dev/socket/qemud”,

“/dev/qemu_pipe”,

"/system/lib/libc_malloc_debug_qemu.so",

“/sys/qemu_trace”,

"/system/bin/qemu-props(不可靠,可能误判,很多真机有这项)",

"/dev/socket/genyd",

“/dev/socket/baseband_genyd”

-------新版本方案-----

(184个特征文件检测)

// =================== 主要证据 ===================

/**

* 特殊的模拟器特征文件

* 186项文件,查到一个文件就是百分百模拟器&#

你可能感兴趣的:(android模拟器检测常用方法,Android模拟器检测方案优化)