Coder Social home page Coder Social logo

happylishang / antifakerandroidchecker Goto Github PK

View Code? Open in Web Editor NEW
1.3K 41.0 269.0 8.81 MB

设备指纹 获取真实的IMEI AndroidId 序列号 MAC地址等,Android模拟器检测,检测Android模拟器 ,作为可信DeviceID,应对防刷需求等 Android设备指纹 How to detect Android emulator

License: Apache License 2.0

C 8.76% Java 88.08% AIDL 0.51% CMake 2.65%

antifakerandroidchecker's Introduction

非商业牟利项目

本库目标:

  • 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更容易跑起来

antifakerandroidchecker's People

Contributors

happylishang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

antifakerandroidchecker's Issues

不建议用 IMEI/Serial 或其它和硬件绑定的信息,会有很多问题(

首先,隐私是被诟病的,不用多说(
而且如果用户换手机了怎么办(手机走了闲鱼之类
如果用户不给权限,那么强制要不是很合适(
如果用户是平板或其它没有通信设备的硬件,那么也读不到 IMEI

防刷可以用类似帐号限制来做,而不建议通过客户端 ID 来识别,反而加大难度且不容易被防护。
个人思路,仅供参考(

运行报错

基于master分支, 用了下基于cache来检测模拟器的代码。
char code2[] = "\xF0\x40\x2D\xE9\x00\x60\xA0\xE3\x0F\x70\xA0\xE1\x00\x40\xA0\xE3"
"\x01\x60\x86\xE2\x00\x50\x97\xE5\x01\x40\x84\xE2\x0F\x70\xA0\xE1"
"\x0C\x70\x47\xE2\x00\x50\x87\xE5\x02\x00\x54\xE3\x02\x00\x00\xAA"
"\x02\x00\x56\xE3\x00\x00\x00\xAA\xF6\xFF\xFF\xEA\x04\x00\xA0\xE1"
"\xF0\x80\xBD\xE8";
现在可以做到,讲二进制代码copy到内存中, 但是在执行的时候, 为啥一只报错啊?

都是SIGILL的错误。

android.os.DeadObjectException

调用IEmulatorCheck.isEmulator() 方法判断是出现这个异常。

机型:努比亚 NX531J
系统:Android 6.0
进程:app 进程 和第三方友盟push 进程
不知道什么原因,希望能解答下,感谢~

ps:运行你的项目在同一款手机上,没有这个错误~

读不到imei

targetSdk >= 23时,在不允许权限的时候,还能读取imei吗?

UnsatisfiedLinkError couldn't find "libemulator_check.so"

java.lang.UnsatisfiedLinkError

dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.internalkye.im-uQ3XeSjEkV13Y9Zq0P_WfA==/base.apk"],nativeLibraryDirectories=[/data/app/com.internalkye.im-uQ3XeSjEkV13Y9Zq0P_WfA==/lib/arm, /data/app/com.internalkye.im-uQ3XeSjEkV13Y9Zq0P_WfA==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]] couldn't find "libemulator_check.so"

com.snail.antifake.jni.EmulatorDetectUtil.(EmulatorDetectUtil.java:17)

偶发so库加载崩溃
机型:红米 REDMI 6 PRO
系统版本:Android 8.1.0,level 27
CPU架构:arm64-v8a

X86和ARM架构区分

作者你好,如果不想我的应用跑在模拟器上,那么我的应用打包的时候不支持X86就行,后面就不需要特意再去检测CPU类型了吧?还是说模拟器用的这个SimpleX86和X86还是有区别的?另外在验证过程中我发现mac上的夜神模拟器检测出来的也是X86架构,这个模拟器的CPU类型是不跟电脑系统跑的,还是模拟器能自己修改。

CALL_PHONE权限合规问题

android.permission.CALL_PHONE 问下博主使用这个权限是做什么哈,如果移除这个权限会影响判断模拟器的准确率吗?
合规问题,没有合理原因不允许使用CALL_PHONE这个权限.

可不可以使用Android读so库的原理来判断?

可以在x86,x86_64,armeabi,中分别建一个so返回不同的值,然后在java中去读取这个值,如果是在电脑上便会读取x86/x86_64下面的so文件,而在手机上就会直接读取armeabi的so,那么就能区别出是否是模拟器了!
大家给个意见哈!

用户信息安全合规问题

各位大佬好:
看了很多模拟器检测的方法,在自己手机测试也能通过,但是想问个问题,像这种ARM反向编译执行程序的需要用户授权吗?这种存不存在违背信息安全的问题?因为毕竟做这个还是想商业上用,不知道这种是不是损害用户权益

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.