Android检测模拟器
1. 前言
模拟器大家都应该很熟悉的吧!现在市面上的模拟器多的数不清,例如:雷电模拟器、夜神模拟器等等。而因为模拟器所搭载的Android系统是阉割过的,一些安全相关的功能都没有了。这就造成了一个安全问题,在模拟器运行的APP,可被动态调试、抓取数据等,从而增大APP被破解、敏感数据遭泄露的风险。所以一些公司就会禁止用户在模拟器中使用他们的APP。
那怎么检测APP当前运行的环境是模拟器呢?接下来我就介绍一个方案给大家吧!
2. 解决方案
网上相关资料其实蛮多的,但是因为模拟器的技术也在逐步增长,所以有些资料其实并没有完全有用,还是会出现无法检测某些模拟器。
我在GitHub上发现了一个开源项目 anti-emulator 。经测试可以检测出市面上较常用的模拟器。我将关键代码提取了出来,封装成一个module,详见 lib_anti_emulator。
我封装了两个方法,如下所示:
/*** 检测是否是模拟器** @param context 上下文* @return true:是模拟器;false:不是模拟器*/
public static boolean check(Context context) {try {return isTaintTrackingDetected(context) || isMonkeyDetected() || isDebugged()|| isQEmuEnvDetected(context);} catch (Exception e) {e.printStackTrace();return false;}
}/*** 检测是否是模拟器,安全模式<br>* 机制较弱,可避免部分真机被识别为模拟器,但是这也造成了有些模拟器无法被识别** @param context 上下文* @return true:是模拟器;false:不是模拟器*/
public static boolean checkSafely(Context context) {try {return isTaintTrackingDetected(context) || isMonkeyDetected() || isDebugged()|| isQEmuEnvSafeDetected(context);} catch (Exception e) {e.printStackTrace();return false;}
}
这两个方法的区分,看注释大家也应该很清楚了。而这也是 anti-emulator 的最大缺点,可以说是检测机制太强,或者说某些真机系统被魔改了,造成真机会被错误识别为模拟器的bug。所以如果使用 check
方法,为了避免用户无法正常使用APP,就需要我们再做一些处理,例如当被检测为模拟器时,可以弹出窗口,引导用户上报相关真机信息,然后后台审核并记录这些信息,将此用户所使用的真机加入白名单,免检测模拟器。
当然如果APP不需要这么强的检测机制的话,那就用 checkSafely
方法就行了。
3. 演示
我在我的 BlogDemo 中已加入演示代码,感兴趣的可以去看看。下面是演示的相关内容,演示环境是雷电模拟器。
3.1 标准模式
能够正确检测模拟器,提示“是模拟器”。
3.2 安全模式
不能够正确检测模拟器,提示“不是模拟器”。PS:雷电模拟器的仿真程度真高,所以平时大家调试APP的时候,如果不想用真机,可以试试雷电模拟器哦!比起 Android Studio 自带的模拟器,不会那么吃 CPU 和内存。
如果想进一步交流和学习的同学,可以加一下QQ群哦!
Android检测模拟器相关推荐
- Android恶意软件模拟器检测技术
前言 下面的报告来自SophosLabs实验室的Android安全专家陈宇,还有来自Android组的成员William Lee, Jagadeesh Chandraiah and Ferenc Lá ...
- Android Studio模拟器启动时显示Could not automotically detect an ADB binary
Android Studio模拟器启动时,会显示Could not automotically detect an ADB binary.的提示信息如图1所示. 图1 提示信息 图1中的提示信息的意思 ...
- Android反模拟器的总结
0x00背景: 很多病毒都很先检测检测运行环境.如果不是沙箱环境就释放恶意代码. 我们来总结他检测了哪些模拟器的特性 0x01检测特定文件 检测一些系统特定属性,如检测当前设备手机号,设备Device ...
- android SDK模拟器环境搭建
android SDK模拟器环境搭建 一.下载安装android SDK 两种方式: (1)官网下载(需FQ):https://developer.android.com/studio/index.h ...
- Android Studio 模拟器卡慢、占内存解决方法
Android Studio 模拟器卡慢.占内存解决方法 Android Studio 模拟器卡慢.占内存解决方法 在使用Android virtual device来进行调试运行时会比较慢,性能也不 ...
- 介绍一款比Android原生模拟器还要快的模拟器Genymotion(转)
源:介绍一款比Android原生模拟器还要快的模拟器Genymotion
- 更改android AVD模拟器创建路径位置的方法
2019独角兽企业重金招聘Python工程师标准>>> 使用eclipse创建的android AVD模拟器,默认位置一般在用户文件夹下的.android文件夹中,并且路径不可有中文 ...
- android 检测字符串是否为合法域名
今天,简单讲讲android里如何检测输入的字符串为合法的域名. 这个昨天搜索了很多资料,基本没有找到符合要求的代码.后来,花了很多时间,才解决了问题.这里记录一下. 一.检查输入域名是否合法. 具体 ...
- 解决Android 启动模拟器是出现“Failed to allocate memory: 8”错误提示
Android 启动模拟器是出现" Failed to allocate memory: 8"错误,模拟器无法启动,如下: [2012-11-26 13:40:12 - TestS ...
最新文章
- 4-剑指offer: 把数组排成最小的数
- Elasticsearch和Hive整合,将hive数据同步到ES中
- WildFly 8的Camel子系统集成了Java EE –入门
- LeetCode 513. 找树左下角的值 思考分析
- Linux_2.6字符设备驱动实例
- kindeditor图片批量上传失败问题
- 多线程 NSThread 的使用
- 分享一波大厂面试题,助力大家拿个好Offer
- 我的世界服务器显示fps,我的世界帧数优化攻略 低配、fps低玩家必看
- 2021年1月PMP考试改版
- 【工具】Movielens数据集详细介绍
- termux python turtle_如何在termux上安装Python的turtle库?
- android qq登录分析,Android第三方登录之QQ登录
- Web of Science 数据库导出记录中各个字段的含义
- 视频教程-《信息学竞赛-C语言》 DAY30-清华尹成老师-C/C++
- 【三维目标检测】PointRCNN(一)
- 生日蛋糕-python实现
- CSDN:0分下载的技术资料的地址列表(带链接)方便大家下载啦!第六期
- pkg-config到底是个啥
- C加加中的数组与指针-基础语法
热门文章
- 项目0单节点的虚拟机做大数据开发(四万字全)
- 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)
- C语言编程>第一周 ⑦ 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
- Java生鲜电商平台-安全设计与架构
- CMakeLists.txt 构建 Qt工程
- 使用DBLINK查询时报ORA-00600: internal error code, arguments: [kzdlk_zt2 err]
- 双相障碍快速循环发作的治疗:证据回顾 | 文献述评
- 100条超搞笑的“雷人”QQ/MSN 签名
- 数据分析团队正成为手游公司的标配,但我为什么说解散他
- pycharm贪吃蛇