CacheEmulatorChecker

Introduction: 检测设备是否是模拟器 ,并且获取相对真实的 IMEI AndroidId 序列号 MAC 地址等,作为 DeviceID,应对防刷需求等
More: Author   ReportBugs   
Tags:

本库目标:

  • 1 检测运行设备是否模拟器
  • 2 获取相对真实的 IMEI AndroidId 序列号 MAC 地址等

用法 MavenCentral

   implementation 'io.github.happylishang:antifake:1.7.0'

Java 代码中:

模拟器检测激进做法

 EmulatorDetectUtil.isEmulatorFromAll(context)

模拟器保守做法

AndroidDeviceIMEIUtil.isRunOnEmulator(context) //特征值判断

非 UI 进程启动检测,回调上报

EmuCheckUtil.checkEmulatorFromCache(getApplicationContext(),
            new EmuCheckUtil.CheckEmulatorCallBack() {
                @Override
                public void onCheckSuccess(boolean isEmulator) {

                }

                @Override
                public void onCheckFaild() {

                }
            })

1、检测是否模拟器原理 Android 模拟器识别技术

ARM 与模拟器采用的 Simple X86 在架构上有很大区别,可利用 SMC(自修改代码+mmap)甄别

原文链接 Android 模拟器识别技术

2、获取真实的 Android 设备信息

  • 可以采用一些系统隐藏的接口来
  • 可以自己实现通过 Binder 通信
  • 可以采用 Native 方式获取设备信息,避免被 Xposed Hook

Android8.0 之后,序列号的获取跟 IMEI 权限绑定,如果不授权电话权限,同样获取不到序列号

Android 10.0 之后,序列号、IMEI 非系统 APP 获取不到

Android 11.0 之后,序列号、IMEI MAC 非系统 APP 获取不到

java 1.8 demo 更容易跑起来

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools